Java万年历源代码.docx
- 文档编号:3680612
- 上传时间:2022-11-24
- 格式:DOCX
- 页数:21
- 大小:22.08KB
Java万年历源代码.docx
《Java万年历源代码.docx》由会员分享,可在线阅读,更多相关《Java万年历源代码.docx(21页珍藏版)》请在冰豆网上搜索。
Java万年历源代码
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
importjavax.swing.table.DefaultTableModel;
importjava.text.DateFormat;
importjava.text.SimpleDateFormat;
importjava.util.Calendar;
importjava.util.Date;
importjava.util.GregorianCalendar;
importjava.util.Locale;
importjava.util.TimeZone;
publicclasswannianliextendsJframe//窗体类implementsActionListener,//事件处理接口MouseListener{
privateCalendarcld=Calendar.getInstance();//获取一个Calendar类的实例对象
privateString[]astr={"星期一","星期二","星期三","星期四","星期五","星期六","星期日"};
//JPanel是Java图形用户界面(GUI)工具包swing中的面板容器类,包含在javax.swing包中,是一种轻量级容器,可以加入到JFrame窗体中。
JPanel默认的布局管理器是FlowLayout,其自身可以嵌套组合,在不同子容器中可包含其他组件(component),如JButton、JTextArea、JTextField等
privateDefaultTableModeldtm=newDefaultTableModel(null,astr);//创建了一个表格模型
privateJTabletable=newJTable(dtm);
privateJScrollPanesp=newJScrollPane(table);
privateJButtonbLastYear=newJButton("上一年");
privateJButtonbNextYear=newJButton("下一年");
privateJButtonbLastMonth=newJButton("上月");
privateJButtonbNextMonth=newJButton("下月");
privateJPanelp1=newJPanel();//设立八个中间容器,装入布局控制日期的按钮模块
privateJPanelp2=newJPanel(newGridLayout(3,2));//网格布局
privateJPanelp3=newJPanel(newBorderLayout());//边界布局
privateJPanelp4=newJPanel(newGridLayout(2,1));
privateJPanelp5=newJPanel(newBorderLayout());
privateJPanelp6=newJPanel(newGridLayout(2,2));
privateJPanelp7=newJPanel(newGridLayout(2,1));
privateJPanelp8=newJPanel(newBorderLayout());
privateJComboBoxtimeBox=newJComboBox(TimeZone.getAvailableIDs());//对所有支持时区进行迭代,获取所有的id;
privateJTextFieldjtfYear=newJTextField(5);//jtfYeaar年份显示输入框
privateJTextFieldjtfMonth=newJTextField
(2);//jtfMouth月份显示输入框
privateJTextFieldtimeField=newJTextField();//各城市时间显示框
privatestaticJTextAreajta=newJTextArea(10,5);//农历显示区
privateJScrollPanejsp=newJScrollPane(jta);
privateJLabell=newJLabel("花江小精灵:
亲!
你可以直接输入年月查询.");
privateJLabellt=newJLabel();
privateJLabelld=newJLabel();
privateJLabellu=newJLabel("农历和节气");
privateJLabelnull1=newJLabel();
privateintlastTime;
//privateStringlocalTime=null;
privateStrings=null;
privateSimpleDateFormatdateFormat=newSimpleDateFormat("yyyy年MM月dd日hh时mm分ss秒");
publicwannianli(){
super("花江日历过去仅留追忆,未来刚生憧憬,唯有坚守本心,把握今天");//框架命名
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//窗口关闭函数
this.getContentPane().setLayout(newBorderLayout(9,10));
jta.setLineWrap(true);//长度大于分配长度时候则换行
jta.setFont(newFont("黑体",Font.BOLD,16));
table.setBackground(Color.white);
table.setGridColor(Color.pink);//星期之间的网格线是灰色的
table.setBackground(Color.white);
table.setColumnSelectionAllowed(true);//将table中的列设置为可选择的
table.setSelectionBackground(Color.pink);//当选定某一天时背景颜色为黑色
table.setSelectionForeground(Color.GREEN);
table.setBackground(newColor(184,207,229));//日期显示表格为浅蓝色
table.setFont(newFont("黑体",Font.BOLD,24));//日期数字字体格式
table.setRowHeight(26);//表格的高度
table.addMouseListener(this);//鼠标监听器、
lu.setFont(newFont("黑体",Font.BOLD,22));//农历标签格氏
jtfYear.addActionListener(this);//可输入年份的文本框
//为各个按钮添加监听函数
bLastYear.addActionListener(this);
bNextYear.addActionListener(this);
bLastMonth.addActionListener(this);
bNextMonth.addActionListener(this);
timeBox.addItemListener(newTimeSelectedChangedListener());
//将按钮添加到Jpane上
p1.add(bLastYear);
p1.add(jtfYear);//年份输入文本框
p1.add(bNextYear);
p1.add(bLastMonth);
p1.add(jtfMonth);
p1.add(bNextMonth);
p3.add(jsp,BorderLayout.SOUTH);
p3.add(lu,BorderLayout.CENTER);
p3.add(ld,BorderLayout.NORTH);
p4.add(lt);
p4.add(l);
p5.add(p4,BorderLayout.SOUTH);
p5.add(sp,BorderLayout.CENTER);
p5.add(p1,BorderLayout.NORTH);
p6.add(timeBox);
p6.add(null1);
p6.add(timeField);
p8.add(p2,BorderLayout.CENTER);
p8.add(p7,BorderLayout.SOUTH);
this.getContentPane().add(p3,BorderLayout.EAST);
this.getContentPane().add(p5,BorderLayout.CENTER);
this.getContentPane().add(p6,BorderLayout.SOUTH);
this.getContentPane().add(p8,BorderLayout.WEST);
String[]strDate=DateFormat.getDateInstance().format(newDate())
.split("-");//获取日期
cld.set(Integer.parseInt(strDate[0]),Integer.parseInt(strDate[1])-1,0);
showCalendar(Integer.parseInt(strDate[0]),
Integer.parseInt(strDate[1]),cld);
jtfMonth.setEditable(false);//设置月份文本框为不可编辑
jtfYear.setText(strDate[0]);
jtfMonth.setText(strDate[1]);
this.showTextArea(strDate[2]);
ld.setFont(newFont("新宋体",Font.BOLD,24));
newTimer(lt).start();
newTimeThread().start();
this.setBounds(200,200,700,350);
this.setResizable(false);
this.setVisible(true);
}
publicvoidshowCalendar(intlocalYear,intlocalMonth,Calendarcld)
{
intDays=getDaysOfMonth(localYear,localMonth)+cld.get(Calendar.DAY_OF_WEEK)-2;
Object[]ai=newObject[7];
lastTime=0;
for(inti=cld.get(Calendar.DAY_OF_WEEK)-1;i<=Days;i++)
{
ai[i%7]=String.valueOf(i-(cld.get(Calendar.DAY_OF_WEEK)-2));
if(i%7==6)
{
dtm.addRow(ai);
ai=newObject[7];
lastTime++;
}
}
dtm.addRow(ai);
}
publicintgetDaysOfMonth(intYear,intMonth){//计算各月的天数
if(Month==1||Month==3||Month==5||Month==7||Month==8||Month==10||Month==12)
{
return31;
}
if(Month==4||Month==6||Month==9||Month==11)
{
return30;
}
if(Year%4==0&&Year%100!
=0||Year%400==0)//闰年
{
return29;
}
else{
return28;
}
}
publicvoidactionPerformed(ActionEvente)//从界面上获取年月数据
{
if(e.getSource()==jtfYear||e.getSource()==bLastYear||e.getSource()==bNextYear||
e.getSource()==bLastMonth||e.getSource()==bNextMonth)
{
intm,y;
try//控制输入的年份正确,异常控制
{
if(jtfYear.getText().length()!
=4)
{
thrownewNumberFormatException();
}
y=Integer.parseInt(jtfYear.getText());
m=Integer.parseInt(jtfMonth.getText());
}
catch(NumberFormatExceptionex)
{
JOptionPane.showMessageDialog(this,"请输入4位0-9的数字!
","年份有误",JOptionPane.ERROR_MESSAGE);
return;
}
ld.setText("没有选择日期");
for(inti=0;i if(e.getSource()==bLastYear){jtfYear.setText(String.valueOf(--y));} if(e.getSource()==bNextYear){jtfYear.setText(String.valueOf(++y));} if(e.getSource()==bLastMonth) { if(m==1) { jtfYear.setText(String.valueOf(--y)); m=12; jtfMonth.setText(String.valueOf(m)); } else { jtfMonth.setText(String.valueOf(--m)); } } if(e.getSource()==bNextMonth) { if(m==12) { jtfYear.setText(String.valueOf(++y)); m=1; jtfMonth.setText(String.valueOf(m)); } else { jtfMonth.setText(String.valueOf(++m)); } } cld.set(y,m-1,0); showCalendar(y,m,cld); } } publicvoidmouseClicked(MouseEvente) { jta.setText(null); intr=table.getSelectedRow(); intc=table.getSelectedColumn(); if(table.getValueAt(r,c)==null) { ld.setText("没有选择日期"); } else { this.showTextArea(table.getValueAt(r,c)); } } privatevoidshowTextArea(Objectselected) { ld.setText(jtfYear.getText()+"年"+jtfMonth.getText()+"月"+selected+"日"); } publicstaticvoidmain(String[]args) { JFrame.setDefaultLookAndFeelDecorated(true); JDialog.setDefaultLookAndFeelDecorated(true); newwannianli(); jta.setText(today()); } privatevoidupdateTimeText(StringtimeZoneId){ if(timeZoneId! =null){ TimeZonetimeZone=TimeZone.getTimeZone(timeZoneId); dateFormat.setTimeZone(timeZone); Calendarcalendar=Calendar.getInstance(); calendar.setTimeZone(timeZone); timeField.setText(dateFormat.format(calendar.getTime())); }else{ timeField.setText(null); } } privateclassTimeSelectedChangedListenerimplementsItemListener{ publicvoiditemStateChanged(ItemEvente){ if(e.getStateChange()==ItemEvent.SELECTED){ if(e.getItem()instanceofString){ s=e.getItem().toString(); } } } } privateclassTimeThreadextendsThread{ publicvoidrun(){ while(true){ updateTimeText(s); try{ Thread.sleep(100); }catch(InterruptedExceptione){ e.printStackTrace(); } } } } classTimerextendsThread//显示系统时间 { privateJLabellt; privateSimpleDateFormatfy=newSimpleDateFormat("Gyyyy.MM.ddHH: mm: ss"); publicTimer(JLabellt) { this.lt=lt; } publicvoidrun() { while(true){ try{ lt.setText(fy.format(newDate())); this.sleep(500); } catch(InterruptedExceptionex) { ex.printStackTrace(); } } } } finalprivatestaticlong[]lunarInfo=newlong[]{0x04bd8,0x04ae0,0x0a570,0x054d5,0x0d260,0x0d950,0x16554, 0x056a0,0x09ad0,0x055d2,0x04ae0,0x0a5b6,0x0a4d0,0x0d250,0x1d255,0x0b540,0x0d6a0,0x0ada2,0x095b0, 0x14977,0x04970,0x0a4b0,0x0b4b5,0x06a50,0x06d40,0x1ab54,0x02b60,0x09570,0x052f2,0x04970,0x06566, 0x0d4a0,0x0ea50,0x06e95,0x05ad0,0x02b60,0x186e3,0x092e0,0x1c8d7,0x0c950,0x0d4a0,0x1d8a6,0x0b550, 0x056a0,0x1a5b4,0x025d0,0x092d0,0x0d2b2,0x0a950,0x0b557,0x06ca0,0x0b550,0x15355,0x04da0,0x0a5d0, 0x14573,0x052d0,0x0a9a8,0x0e950,0x06aa0,0x0aea6,0x0ab50,0x04b60,0x0aae4,0x0a570,0x05260,0x0f263, 0x0d950,0x05b57,0x056a0,0x096d0,0x04dd5,0x04ad0,0x0a4d0,0x0d4d4,0x0d250,0x0d558,0x0b540,0x0b5a0, 0x195a6,0x095b0,0x049b0,0x0a974,0x0a4b0,0x0b27a,0x06a50,0x06d40,0x0af46,0x0ab60,0x09570,0x04af5, 0x04970,0x064b0,0x074a3,0x0ea50,0x06b58,0x055c0,0x0ab60,0x096d5,0x092e0,0x0c960,0x0d954,0x0d4a0, 0x0da50,0x07552,0x056a0,0x0abb7,0x025d0,0x092d0,0x0cab5,0x0a950,0x0b4a0,0x0baa4,0x0ad50,0x055d9, 0x04ba0,0x0a5b0,0x15176,0x052b0,0x0a9
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 万年历 源代码