1、java万年历设计源码附截图import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.table.DefaultTableModel;import java.io.*;import java.text.DateFormat;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;import java.util.GregorianCalendar;import java.util.L
2、ocale;import java.util.TimeZone;public class h_main1 extends JFrame implements ActionListener, MouseListener private Calendar cld = Calendar.getInstance();/获取一个Calendar类的实例对象 private String astr = 星期一, 星期二, 星期三, 星期四, 星期五, 星期六, 星期日 ; private DefaultTableModel dtm = new DefaultTableModel(null, astr);
3、private JTable table = new JTable(dtm); private JScrollPane sp = new JScrollPane(table); private JButton bLastYear = new JButton(上一年); private JButton bNextYear = new JButton(下一年); private JButton bLastMonth = new JButton(上月); private JButton bNextMonth = new JButton(下月); private JButton bAddClock =
4、 new JButton(确定); private JPanel p1 = new JPanel(); / 装入控制日期的按钮模块 private JPanel p2 = new JPanel(new GridLayout(3,2); private JPanel p3 = new JPanel(new BorderLayout(); private JPanel p4 = new JPanel(new GridLayout(2,1); private JPanel p5 = new JPanel(new BorderLayout(); private JPanel p6 = new JPan
5、el(new GridLayout(2,2); private JPanel p7 = new JPanel(new GridLayout(2,1); private JPanel p8 = new JPanel(new BorderLayout(); private JComboBox timeBox = new JComboBox(TimeZone.getAvailableIDs();/对所有支持时区进行迭代,获取所有的id; private JTextField jtfYear = new JTextField(5);/ jtfYeaar年份显示输入框 private JTextFiel
6、d jtfMonth = new JTextField(2);/ jtfMouth月份显示输入框 private JTextField timeField=new JTextField(); private JTextField h1=new JTextField(5); private JTextField m1=new JTextField(5); private static JTextArea jta = new JTextArea(10,5); private JScrollPane jsp = new JScrollPane(jta); private JTextArea jta1
7、 = new JTextArea(5,4); private JScrollPane jsp1 = new JScrollPane(jta1); private JLabel l = new JLabel(你可以向年份输入框中输入年份,提高查询效率); private JLabel lt = new JLabel(); private JLabel ld = new JLabel(); private JLabel ts=new JLabel(请在右边下拉菜单选择你要选择的城市); private JLabel clock= new JLabel(闹钟); private JLabel not
8、ice= new JLabel(备忘录); private JLabel hour = new JLabel(小时); private JLabel minute= new JLabel(分钟); private JLabel lu = new JLabel(农历和节气); private JLabel null1=new JLabel(); private int lastTime; private String localTime = null; private String s = null; private SimpleDateFormat dateFormat=new SimpleD
9、ateFormat(yyyy年MM月dd日 hh时mm分ss秒); public h_main1() super(My Calender);/ 框架命名 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);/ 窗口关闭函数 this.getContentPane().setLayout(new BorderLayout(5, 5); jta.setLineWrap(true);/ 长度大于分配长度时候则换行 table.setGridColor(Color.GRAY);/ 星期之间的网格线是灰色的 table.setColumnSelecti
10、onAllowed(true);/ 将table中的列设置为可选择的 table.setSelectionBackground(Color.GRAY);/ 当选定某一天时背景颜色为黑色 table.setSelectionForeground(Color.GREEN); table.setBackground(new Color(184,207, 229);/ 日期显示表格为浅蓝色 table.setFont(new Font(黑体, Font.BOLD, 24);/ 日期数字字体格式 table.setRowHeight(30);/ 表格的高度 table.addMouseListener(
11、this); / 鼠标监听器 jtfYear.addActionListener(this);/ 可输入年份的文本框 / 为各个按钮添加监听函数 bLastYear.addActionListener(this); bNextYear.addActionListener(this); bLastMonth.addActionListener(this); bNextMonth.addActionListener(this); bAddClock.addActionListener(this); timeBox.addItemListener(new TimeSelectedChangedLis
12、tener(); / 将按钮添加到Jpane上 p1.add(bLastYear); p1.add(jtfYear);/ 年份输入文本框 p1.add(bNextYear); p1.add(bLastMonth); p1.add(jtfMonth); p1.add(bNextMonth); p2.add(clock); p2.add(bAddClock); p2.add(hour); p2.add(h1); p2.add(minute); p2.add(m1); p3.add(jsp, BorderLayout.SOUTH); p3.add(lu,BorderLayout.CENTER); p
13、3.add(ld, BorderLayout.NORTH); p4.add(l); p4.add(lt); p5.add(p4, BorderLayout.SOUTH); p5.add(sp, BorderLayout.CENTER); p5.add(p1, BorderLayout.NORTH); p6.add(ts); p6.add(timeBox); p6.add(null1); p6.add(timeField); p7.add(notice); p7.add(jsp1); p8.add(p2,BorderLayout.CENTER); p8.add(p7,BorderLayout.S
14、OUTH); 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(new Date() .split(-);/ 获取日期 cld.set(Int
15、eger.parseInt(strDate0), Integer.parseInt(strDate1) - 1,0); showCalendar(Integer.parseInt(strDate0), Integer.parseInt(strDate1), cld); jtfMonth.setEditable(false);/ 设置月份文本框为不可编辑 jtfYear.setText(strDate0); jtfMonth.setText(strDate1); this.showTextArea(strDate2); ld.setFont(new Font(新宋体, Font.BOLD, 24
16、); new Timer(lt).start(); new TimeThread().start(); this.setBounds(200, 200, 700, 350); this.setResizable(false); this.setVisible(true); public void showCalendar(int localYear, int localMonth, Calendar cld) int Days = getDaysOfMonth(localYear, localMonth) + cld.get(Calendar.DAY_OF_WEEK) -2; Object a
17、i = new Object7; lastTime = 0; for (int i = cld.get(Calendar.DAY_OF_WEEK)-1; i = Days; i+) aii%7 = String.valueOf(i-(cld.get(Calendar.DAY_OF_WEEK)-2); if (i%7 = 6) dtm.addRow(ai); ai = new Object7; lastTime+; dtm.addRow(ai); public int getDaysOfMonth(int Year, int Month) if(Month=1|Month=3|Month=5|M
18、onth=7|Month=8|Month=10|Month=12) return 31; if(Month=4|Month=6|Month=9|Month=11) return 30; if(Year%4=0&Year%100!=0|Year%400=0)/闰年 return 29; else return 28; public void actionPerformed(ActionEvent e) if(e.getSource() = jtfYear | e.getSource() = bLastYear | e.getSource() = bNextYear | e.getSource()
19、 = bLastMonth | e.getSource() = bNextMonth|e.getSource()=bAddClock) int m, y; try/控制输入的年份正确,异常控制 if (jtfYear.getText().length() != 4) throw new NumberFormatException(); y = Integer.parseInt(jtfYear.getText(); m = Integer.parseInt(jtfMonth.getText(); catch (NumberFormatException ex) JOptionPane.showM
20、essageDialog(this, 请输入4位0-9的数字!, 年份有误, JOptionPane.ERROR_MESSAGE); return; ld.setText(没有选择日期); for (int i = 0; i lastTime+1; i+) dtm.removeRow(0); if(e.getSource() = bLastYear) jtfYear.setText(String.valueOf(-y); if(e.getSource() = bNextYear)jtfYear.setText(String.valueOf(+y); if(e.getSource() = bLa
21、stMonth) 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(+
22、m); cld.set(y, m-1, 0); showCalendar(y, m, cld); if(e.getSource()=bAddClock) try Clock clock=new Clock(); clock.start(); if(Integer.parseInt(h1.getText()23| Integer.parseInt(m1.getText()59) throw(new Exception(); catch(Exception ex) JOptionPane.showMessageDialog(this, 时数应该为023,分钟数应该为059, 时间有误, JOpti
23、onPane.ERROR_MESSAGE); public void mouseClicked(MouseEvent e) jta.setText(null); int r = table.getSelectedRow(); int c = table.getSelectedColumn(); if (table.getValueAt(r,c) = null) ld.setText(没有选择日期); else this.showTextArea(table.getValueAt(r,c); private void showTextArea(Object selected) /在这里将公历化为
24、农历 ld.setText(jtfYear.getText()+年+jtfMonth.getText()+月+selected+日); public static void main(String args) JFrame.setDefaultLookAndFeelDecorated(true); JDialog.setDefaultLookAndFeelDecorated(true); new h_main1(); jta.setText(today(); private void updateTimeText(String timeZoneId) if(timeZoneId != null
25、) TimeZone timeZone = TimeZone.getTimeZone(timeZoneId); dateFormat.setTimeZone(timeZone); Calendar calendar = Calendar.getInstance(); calendar.setTimeZone(timeZone); timeField.setText(dateFormat.format(calendar.getTime(); else timeField.setText(null); private class TimeSelectedChangedListener implem
26、ents ItemListener public void itemStateChanged(ItemEvent e) if (e.getStateChange()=ItemEvent.SELECTED) if (e.getItem() instanceof String) s = e.getItem().toString(); private class TimeThread extends Thread public void run() while(true) updateTimeText(s); try Thread.sleep(100); catch(InterruptedExcep
27、tion e) e.printStackTrace(); class Clock extends Thread /闹钟线程 public void run() while(true) Calendar now=Calendar.getInstance(); int h=now.get(Calendar.HOUR_OF_DAY);/获取小时 int mi=now.get(Calendar.MINUTE);/获取分钟 int s=now.get(Calendar.SECOND);/获取秒钟 int ss=h*3600+mi*60+s; if(ss(Integer.parseInt(h1.getTe
28、xt()*3600+Integer.parseInt(m1.getText()*60+0) &ssInteger.parseInt(h1.getText()*3600+(Integer.parseInt(m1.getText()+5)*60+0) jta1.setText(闹钟启动); else jta1.setText(没有正在提示的闹钟); class Timer extends Thread /显示系统时间 private JLabel lt; private SimpleDateFormat fy = new SimpleDateFormat(yyyy.MM.dd G at HH:mm:ss z); private boolean b=true; public Timer(JLabel lt) this.lt=lt; public void run() while(true) try lt.setText(fy.format(new Date(); this.sleep(1000); ca
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1