如何用java写日历
导入Java . awt . color;
导入Java . awt . dimension;
导入Java . awt . gridlayout;
导入Java . awt . system color;
导入Java . awt . event . action event;
导入Java . awt . event . key event;
导入Java . awt . event . mouse event;
导入Java . util . calendar;
导入Java . util . Gregorian calendar;
导入Java . util . locale;
导入Java . util . date;
导入Java . util . string tokenizer;
导入javax . swing . border factory;
导入javax . swing . jbutton;
导入javax . swing . jframe;
导入javax . swing . jlabel;
导入javax . swing . jpanel;
导入javax . swing . jtextfield;
导入javax . swing . jtogglebutton;
导入javax . swing . swing constants;
导入javax . swing . ui manager;
/**
* & ltp & gt标题:摇摆日历
* & ltp & gt描述:操作日期
* @作者duxu2004
* @版本1.0.1
*/
JCalendar类扩展JPanel{
//动态表示年、月、日。
private int年= 0;
private int month = 0;
private int day = 0;
//主面板
private JPanel Main = new JPanel();
//日面板
private JPanel jPanelDay = new JPanel();
//月亮面板
private JPanel JPanel month = new JPanel();
//年的输入位置
私有JTextField Year = new JTextField();
//输入月份的位置
私有JTextField Month = new JTextField();
//减少月份
private JButton month down = new JButton();
//添加月份
private JButton MonthUp = new JButton();
private JPanel JPanel button = new JPanel();
//减少年份
private JButton year down = new JButton();
//添加年份
private JButton year up = new JButton();
//显示日期的位置。
private JLabel Out = new JLabel();
//中国时区,以后可以从中扩展设置时区的功能。
私有区域设置l =区域设置。中文;
//主日历
private Gregorian calendar cal = new Gregorian calendar(l);
//星期几面板
private JPanel week panel = new JPanel();
//日按钮组
private JToggleButton[]days = new JToggleButton[42];
//天空面板
私有JPanel天数=新JPanel();
//标记
private JLabel JLabel 1 = new JLabel();
private JLabel JLabel 2 = new JLabel();
private JLabel JLabel 3 = new JLabel();
private JLabel JLabel 4 = new JLabel();
private JLabel JLabel 5 = new JLabel();
private JLabel JLabel 6 = new JLabel();
private JLabel JLabel 7 = new JLabel();
//当前选择的日期按钮
private JToggleButton cur = null
//一个月中的天数数组,用于获取当前月份有多少天。
// 1 2 3 4 5 6 7 8 9 10 11 12
private int[] mm={31,28,31,30,31,30,31,30,31,30,31}
//空日期构造函数
公共JCalendar() {
尝试{
JB init();
}
捕捉(异常e) {
e . printstacktrace();
}
}
//带日期设置的构造函数
public JCalendar(int年,int月,int日){
cal.set(年、月、日);
尝试{
JB init();
}
捕捉(异常e) {
e . printstacktrace();
}
}
//带有日历输入的构造函数
公共日历(公历日历){
cal =日历;
尝试{
JB init();
}
捕捉(异常e) {
e . printstacktrace();
}
}
//带日期输入的构造函数
公共JCalendar(日期日期){
cal.setTime(日期);
尝试{
JB init();
}
捕捉(异常e) {
e . printstacktrace();
}
}
//初始化组件
私有void jbInit()抛出异常{
//初始化年、月、日。
iniCalender();
this . set layout(new BorderLayout());
this . set border(border factory . createraisedbevelborder());
this.setMaximumSize(新维度(200,200));
this.setMinimumSize(新维度(200,200));
this.setPreferredSize(新维度(200,200));
main . set layout(new BorderLayout());
main . set background(system color . info);
main . set border(null);
out . set background(color . light gray);
out . sethorizontal alignment(swing constants。中心);
Out.setMaximumSize(新维度(100,19));
Out.setMinimumSize(新维度(100,19));
Out.setPreferredSize(新维度(100,19));
jlabel 1 . set foreground(color . red);
jlabel 1 . sethorizontalignment(swing constants。中心);
jlabel 1 . sethorizontaltextposition(swing constants。中心);
jlabel 1 . settext(" day ");
jlabel 2 . set foreground(color . blue);
jlabel 2 . sethorizontal alignment(swing constants。中心);
jlabel 2 . sethorizontaltextposition(swing constants。中心);
jlabel 2 . settext(" six ");
jlabel 3 . sethorizontal alignment(swing constants。中心);
jlabel 3 . sethorizontaltextposition(swing constants。中心);
jlabel 3 . settext(" five ");
jlabel 4 . sethorizontal alignment(swing constants。中心);
jlabel 4 . sethorizontaltextposition(swing constants。中心);
JLabel4.setText("四");
jlabel 5 . sethorizontal alignment(swing constants。中心);
jlabel 5 . sethorizontaltextposition(swing constants。中心);
jlabel 5 . settext(" three ");
jlabel 6 . set border(null);
jlabel 6 . sethorizontal alignment(swing constants。中心);
jlabel 6 . sethorizontaltextposition(swing constants。中心);
jlabel 6 . settext(" two ");
jlabel 7 . set background(color . light gray);
jlabel 7 . set foreground(color . black);
jlabel 7 . set border(null);
jlabel 7 . sethorizontal alignment(swing constants。中心);
jlabel 7 . sethorizontaltextposition(swing constants。中心);
jlabel 7 . settext(" one ");
week panel . set background(ui manager . getcolor(" internal frame . activetitlegradient "));
week panel . set border(border factory . createetchedborder());
weekPanel.setLayout(新GridLayout(1,7));
weekPanel.add(jLabel1,null);
weekPanel.add(jLabel7,null);
weekPanel.add(jLabel6,null);
weekPanel.add(jLabel5,null);
weekPanel.add(jLabel4,null);
weekPanel.add(jLabel3,null);
weekPanel.add(jLabel2,null);
monthup . setalignmentx((float)0.0);
monthup . setactionmap(null);
jpanelmonth . set background(system color . info);
jpanelmonth . set layout(new BorderLayout());
jpanelmonth . set border(border factory . createetchedborder());
month . set border(null);
month . sethorizontal alignment(swing constants。中心);
month . addmouse listener(new Java . awt . event . mouse adapter(){
public void mouse clicked(mouse event e){
month _ mouse clicked(e);
}
});
month . addkey listener(new Java . awt . event . key adapter(){
公共void按键(按键事件e) {
month _ keyped(e);
}
});
month down . set border(null);
month down . settext(" \ u25c 4 ");
month down . addactionlistener(new Java . awt . event . action listener(){
public void action performed(action event e){
month down _ action performed(e);
}
});
monthup . set border(null);
monthup . settext(" \ u25BA ");
monthup . addactionlistener(new Java . awt . event . action listener(){
public void action performed(action event e){
MonthUp _ action performed(e);
}
});
jpanelbutton . set layout(null);
jpanelbutton . set border(null);
jpanelbutton . addcomponentlistener(new Java . awt . event . component adapter(){
public void component resized(Java . awt . event . component event evt){
jpanelbuttoncomponentrezed(evt);
}
});
year . set border(border factory . createetchedborder());
Year.setMaximumSize(新维度(80,25));
Year.setMinimumSize(新维度(80,25));
Year.setPreferredSize(新维度(80,25));
year . sethorizontal alignment(swing constants。中心);
year . addmouse listener(new Java . awt . event . mouse adapter(){
public void mouse clicked(mouse event e){
year _ mouse clicked(e);
}
});
year . addkey listener(new Java . awt . event . key adapter(){
公共void按键(按键事件e) {
year _ keyped(e);
}
});
year down . set border(null);
YearDown.setMaximumSize(新维度(16,16));
YearDown.setMinimumSize(新维度(16,16));
YearDown.setPreferredSize(新维度(16,16));
YearDown.setSize(新维度(16,16));
year down . settext("▼");
year down . addactionlistener(new Java . awt . event . action listener(){
public void action performed(action event e){
year down _ action performed(e);
}
});
year up . set border(null);
YearUp.setMaximumSize(新维度(16,16));
YearUp.setMinimumSize(新维度(16,16));
YearUp.setPreferredSize(新维度(16,16));
YearUp.setSize(新维度(16,16));
year up . settext(" ▲");
year up . addactionlistener(new Java . awt . event . action listener(){
public void action performed(action event e){
year up _ action performed(e);
}
});
jpanelday . set layout(new BorderLayout());
Days.setLayout(new GridLayout(6,7));
days . set background(system color . info);
for(int I = 0;我& lt42;i++){
days[I]= new JToggleButton();
天[我]。set border(null);
天[我]。set background(system color . info);
天[我]。sethorizontal alignment(swing constants。中心);
天[我]。setHorizontalTextPosition(swing constants。中心);
//days[i]。setSize(l,l);
天[我]。addActionListener(new Java . awt . event . actionlistener(){
public void action performed(action event e){
day = integer . parse int((JToggleButton)e . getsource())。getText());
showDate();
showDays();
}
});
days . add(days[I]);
}
this.add(Main,BorderLayout。北);
this.add(jPanelDay,BorderLayout。中心);
this.add(jPanelMonth,BorderLayout。南);
Main.add(Year,BorderLayout。中心);
Main.add(Out,BorderLayout。西);
Main.add(jPanelButton,BorderLayout。东);
jpanelbutton . add(year up);
jpanelbutton . add(year down);
jPanelDay.add(weekPanel,BorderLayout。北);
jPanelDay.add(Days,BorderLayout。中心);
jPanelMonth.add(Month,BorderLayout。中心);
jPanelMonth.add(MonthDown,BorderLayout。西);
jPanelMonth.add(MonthUp,BorderLayout。东);
show month();
show year();
showDate();
showDays();
}
//自定义重画年份选择面板
void jpanelbuttoncomponentrezed(Java . awt . event . component event evt){
YearUp.setLocation(0,0);
YearDown.setLocation(0,year up . get height());
jpanelbutton . setsize(year up . getwidth()、year up . getheight()* 2);
jPanelButton.setPreferredSize(新维度(YearUp.getWidth()、year up . getheight()* 2));
jpanelbutton . update ui();
}
//用于测试
公共静态void main(String[] args){
JFrame f = new JFrame();
f . setcontentpane(new JCalendar());
f . pack();
//f . setresizable(false);
f . show();
}
//添加年份
void year up _ action performed(action event e){
year++;
show year();
showDate();
showDays();
}
//减少年份
void year down _ action performed(action event e){
年份-;
show year();
showDate();
showDays();
}
//减少月份
void month down _ action performed(action event e){
月-;
如果(月& lt0) {
月= 11;
年份-;
show year();
}
show month();
showDate();
showDays();
}
//添加月份
void MonthUp _ action performed(action event e){
month++;
if(month==12) {
月= 0;
year++;
show year();
}
show month();
showDate();
showDays();
}
//初始化年、月、日
void in calender(){
year=cal.get(日历。年份);
month=cal.get(日历。月);
day=cal.get(日历。月日);
}
//刷新月份
void showMonth(){
month . settext(integer . tostring(month+1)+" month ");
}
//刷新年份
void showYear(){
year . settext(integer . tostring(year)+" year ");
}
//刷新日期
void showDate(){
out . settext(integer . tostring(year)+"-"+integer . tostring(month+1)+"-"+integer . tostring(day));
}
//重新绘制日期选择面板
void showDays() {
cal.set(年,月,1);
int first day ofweek = cal . get(Calendar。星期几);
int n = mm[月];
if(cal . isleapyear(year )& amp;& ampmonth = = 1)n++;
int I = 0;
for(;我& ltfirst day ofweek-1;i++){
天[我]。set enabled(false);
天[我]。set selected(false);
天[我]。setText(" ");
}
int d = 1;
for(;d & lt= n;d++){
天[我]。setText(integer . tostring(d));
天[我]。setEnabled(真);
if(d==day) days[i]。set selected(true);
else days[i]。set selected(false);;
i++;
}
for(;我& lt42;i++){
天[我]。set enabled(false);
天[我]。set selected(false);
天[我]。setText(" ");
}
}
//单击年份面板选择整年字符串。
void SelectionYear(){
year . setselectionstart(0);
year . set selection end(year . gettext()。length());
}
//单击月份面板选择整月字符串。
void SelectionMonth(){
month . setselectionstart(0);
month . set selection end(month . gettext()。length());
}
//月面板响应鼠标点击事件。
void Month _ mouse clicked(mouse event e){
//selection month();
input month();
}
//检查输入的月份。
void inputMonth(){
字符串s;
If(Month.getText()。endsWith("月"))
{
s=Month.getText()。substring(0,Month.getText()。长度()-1);
}
else s = month . gettext();
month = integer . parse int(s)-1;
this . show me();
}
//月面板键盘敲击事件响应
void Month _ key pressed(key event e){
if(e.getKeyChar()==10)
input month();
}
//年份面板响应鼠标点击事件。
void Year _ mouse clicked(mouse event e){
//selection year();
input year();
}
//年份键盘敲击事件响应
void Year _ key pressed(key event e){
//System.out.print(新整数(e.getKeyChar())。byte value());
if(e.getKeyChar()==10)
input year();
}
//验证输入的年份字符串。
void inputYear() {
字符串s;
If(Year.getText()。endsWith("年"))
{
s=Year.getText()。substring(0,Year.getText()。长度()-1);
}
else s = year . gettext();
year = integer . parse int(s);
this . show me();
}
//以字符串形式返回日期,yyyy-mm-dd。
公共字符串getDate(){ return out . gettext();}
//以字符串形式输入日期,yyyy-mm-dd。
public void setDate(字符串日期){
如果(日期!=null){
string tokenizer f = new string tokenizer(日期,“-”);
if(f.hasMoreTokens())
year = integer . parse int(f . nexttoken());
if(f.hasMoreTokens())
month = integer . parse int(f . nexttoken());
if(f.hasMoreTokens())
day = integer . parse int(f . nexttoken());
cal.set(年、月、日);
}
this . show me();
}
//以date对象的形式输入日期。
公共无效设置时间(日期日期){
cal.setTime(日期);
this . inicalender();
this . show me();
}
//返回日期对象
public Date getTime(){ return cal . getTime();}
//返回当前日期。
public int getDay() {
返回日;
}
//设置当前日期
public void setDay(int day) {
this.day = day
cal.set(今年,本月,本日);
this . show me();
}
//设置当前年份
public void setYear(int year) {
this.year = year
cal.set(今年,本月,本日);
this . show me();
}
//返回当前年份。
public int getYear() {
返回年份;
}
//返回当前月份。
public int getMonth() {
返回月份;
}
//设置当前月份
公共void setMonth(int month) {
this.month =月;
cal.set(今年,本月,本日);
this . show me();
}
//刷新
public void showMe(){
this . showdays();
this . show month();
this . show year();
this . showdate();
}
}
公共类TestJCalendar {
公共静态void main(String[] args) {
JFrame f = new JFrame();
f . setcontentpane(new JCalendar());
f . pack();
//f . setresizable(false);
f . show();
}
}