用Java制作风景日历
Java万年历源代码,可显示公历、农历、系统时间、国际时间

import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.table.DefaultTableModel;import java.text.DateFormat;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;import java.util.GregorianCalendar;import java.util.Locale;import java.util.TimeZone;public class wannianli extends JFrame implements ActionListener, MouseListener {private Calendar cld = Calendar.getInstance();//获取一个Calendar类的实例对象private String[] astr = { "星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日" };private DefaultTableModel dtm = new DefaultTableModel(null, astr);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 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 JPanel(new GridLayout(2,2));private JPanel p7 = new JPanel(new GridLayout(2,1));private JPanel p8 = new JPanel(new BorderLayout());private JComboBox timeBox = newJComboBox(TimeZone.getAvailableIDs());//对所有支持时区进行迭代,获取所有的id;private JTextField jtfYear = new JTextField(5);// jtfYeaar年份显示输入框private JTextField jtfMonth = new JTextField(2);// jtfMouth月份显示输入框private JTextField timeField=new JTextField();//各城市时间显示框private static JTextArea jta = new JTextArea(10,5);//农历显示区private JScrollPane jsp = new JScrollPane(jta);private JLabel l = new JLabel("花江小精灵:亲!你可以直接输入年月查询.");private JLabel lt = new JLabel();private JLabel ld = 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 SimpleDateFormat("yyyy年MM月dd 日 hh时mm分ss秒");public wannianli() {super("花江日历过去仅留追忆,未来刚生憧憬,唯有坚守本心,把握今天 ZYT 詹永堂 ");// 框架命名this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 窗口关闭函数this.getContentPane().setLayout(new BorderLayout(9, 10));jta.setLineWrap(true);// 长度大于分配长度时候则换行jta.setFont(new Font("黑体", 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(new Color(184,207, 229));// 日期显示表格为浅蓝色table.setFont(new Font("黑体", Font.BOLD, 24));// 日期数字字体格式table.setRowHeight(26);// 表格的高度table.addMouseListener(this); // 鼠标监听器、lu.setFont(new Font("黑体", Font.BOLD, 22));//农历标签格氏jtfYear.addActionListener(this);// 可输入年份的文本框// 为各个按钮添加监听函数bLastYear.addActionListener(this);bNextYear.addActionListener(this);bLastMonth.addActionListener(this);bNextMonth.addActionListener(this);timeBox.addItemListener(new TimeSelectedChangedListener());// 将按钮添加到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(new Date()) .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(new Font("新宋体", Font.BOLD, 24));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 [] ai = new Object[7];lastTime = 0;for (int i = 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 = new Object[7];lastTime++;}}dtm.addRow(ai);}public int getDaysOfMonth(int Year, int Month) {//计算各月的天数if(Month==1||Month==3||Month==5||Month==7||Month==8||Month==10||Mont h==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() == bLastMonth || e.getSource() == bNextMonth){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.showMessageDialog(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() == 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);}}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){ld.setText(jtfYear.getText()+"年"+jtfMonth.getText()+"月"+selected+"日");}public static void main(String[] args){JFrame.setDefaultLookAndFeelDecorated(true);JDialog.setDefaultLookAndFeelDecorated(true);new wannianli();jta.setText(today());}private void updateTimeText(String timeZoneId) {if(timeZoneId != null){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 implements 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(InterruptedException e){e.printStackTrace();}}}}class Timer extends Thread //显示系统时间{private JLabel lt;private SimpleDateFormat fy = new SimpleDateFormat(" Gyyyy.MM.dd HH:mm:ss ");public Timer(JLabel lt){this.lt=lt;}public void run(){while(true){try{lt.setText(fy.format(new Date()));this.sleep(500);}catch(InterruptedException ex){ex.printStackTrace();}}}}final private static long[] lunarInfo= new long[] { 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, 0x0a930, 0x07954, 0x06aa0, 0x0ad50, 0x05b52, 0x04b60, 0x0a6e6, 0x0a4e0,0x0d260, 0x0ea65, 0x0d530, 0x05aa0, 0x076a3, 0x096d0, 0x04bd7, 0x04ad0, 0x0a4d0, 0x1d0b6, 0x0d250, 0x0d520,0x0dd45, 0x0b5a0, 0x056d0, 0x055b2, 0x049b0, 0x0a577, 0x0a4b0, 0x0aa50, 0x1b255, 0x06d20, 0x0ada0 };final private static int[] year20 = new int[] { 1, 4, 1, 2, 1, 2, 1, 1, 2, 1, 2, 1 };final private static int[] year19 = new int[] { 0, 3, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0 };final private static int[] year2000 = new int[] { 0, 3, 1, 2, 1, 2, 1, 1, 2, 1, 2, 1 };public final static String[] nStr1 = new String[] { "", "正", "二", "三", "四", "五", "六", "七", "八", "九", "十", "十一","十二" };private final static String[] Gan = new String[] { "甲", "乙", "丙", "丁", "戊", "己", "庚", "辛", "壬", "癸" };private final static String[] Zhi = new String[] { "子", "丑", "寅", "卯", "辰", "巳", "午", "未", "申", "酉", "戌", "亥" };private final static String[] Animals = new String[] { "鼠", "牛", "虎", "兔", "龙", "蛇", "马", "羊", "猴", "鸡", "狗", "猪" };// 传回农历 y年的总天数final private static int lYearDays(int y) {int i, sum = 348;for (i = 0x8000; i > 0x8; i >>= 1) {if ((lunarInfo[y - 1900] & i) != 0)sum += 1;}return (sum + leapDays(y));}// 传回农历 y年闰月的天数final private static int leapDays(int y) {if (leapMonth(y) != 0) {if ((lunarInfo[y - 1900] & 0x10000) != 0)return 30;elsereturn 29;} elsereturn 0;}// 传回农历 y年闰哪个月 1-12 , 没闰传回 0final private static int leapMonth(int y) {return (int) (lunarInfo[y - 1900] & 0xf);}//传回农历 y年m月的总天数final private static int monthDays(int y, int m) {if ((lunarInfo[y - 1900] & (0x10000 >> m)) == 0)return 29;elsereturn 30;}// 传回农历 y年的生肖final public static String AnimalsYear(int y) {return Animals[(y - 4) % 12];}//传入月日的offset 传回干支,0=甲子final private static String cyclicalm(int num) {return (Gan[num % 10] + Zhi[num % 12]);}// 传入 offset 传回干支, 0=甲子final public static String cyclical(int y) {int num = y - 1900 + 36;return (cyclicalm(num));}// 传出农历.year0 .month1 .day2 .yearCyl3 .monCyl4 .dayCyl5 .isLeap6final private long[] Lunar(int y, int m) {long[] nongDate = new long[7];int i = 0, temp = 0, leap = 0;Date baseDate = new GregorianCalendar(1900 + 1900, 1,31).getTime();Date objDate = new GregorianCalendar(y + 1900, m, 1).getTime();long offset = (objDate.getTime() - baseDate.getTime()) / 86400000L;if (y < 2000)offset += year19[m - 1];if (y > 2000)offset += year20[m - 1];if (y == 2000)offset += year2000[m - 1];nongDate[5] = offset + 40;nongDate[4] = 14;for (i = 1900; i < 2050 && offset > 0; i++) {temp = lYearDays(i);offset -= temp;nongDate[4] += 12;}if (offset < 0) {offset += temp;i--;nongDate[4] -= 12;}nongDate[0] = i;nongDate[3] = i - 1864;leap = leapMonth(i); // 闰哪个月nongDate[6] = 0;for (i = 1; i < 13 && offset > 0; i++) {// 闰月if (leap > 0 && i == (leap + 1) && nongDate[6] == 0) { --i;nongDate[6] = 1;temp = leapDays((int) nongDate[0]);} else {temp = monthDays((int) nongDate[0], i);}// 解除闰月if (nongDate[6] == 1 && i == (leap + 1))nongDate[6] = 0;offset -= temp;if (nongDate[6] == 0)nongDate[4]++;}if (offset == 0 && leap > 0 && i == leap + 1) {if (nongDate[6] == 1) {nongDate[6] = 0;} else {nongDate[6] = 1;--i;--nongDate[4];}}if (offset < 0) {offset += temp;--i;--nongDate[4];}nongDate[1] = i;nongDate[2] = offset + 1;return nongDate;}// 传出y年m月d日对应的农历.year0 .month1 .day2 .yearCyl3 .monCyl4 .dayCyl5 .isLeap6final public static long[] calElement(int y, int m, int d) {long[] nongDate = new long[7];int i = 0, temp = 0, leap = 0;Date baseDate = new GregorianCalendar(0 + 1900, 0, 31).getTime();Date objDate = new GregorianCalendar(y, m - 1, d).getTime();long offset = (objDate.getTime() - baseDate.getTime()) / 86400000L;nongDate[5] = offset + 40;nongDate[4] = 14;for (i = 1900; i < 2050 && offset > 0; i++) {temp = lYearDays(i);offset -= temp;nongDate[4] += 12;}if (offset < 0) {offset += temp;i--;nongDate[4] -= 12;}nongDate[0] = i;nongDate[3] = i - 1864;leap = leapMonth(i); // 闰哪个月nongDate[6] = 0;for (i = 1; i < 13 && offset > 0; i++) {// 闰月if (leap > 0 && i == (leap + 1) && nongDate[6] == 0) { --i;nongDate[6] = 1;temp = leapDays((int) nongDate[0]);} else {temp = monthDays((int) nongDate[0], i);}// 解除闰月if (nongDate[6] == 1 && i == (leap + 1))nongDate[6] = 0;offset -= temp;if (nongDate[6] == 0)nongDate[4]++;}if (offset == 0 && leap > 0 && i == leap + 1) { if (nongDate[6] == 1) {nongDate[6] = 0;} else {nongDate[6] = 1;--i;--nongDate[4];}}if (offset < 0) {offset += temp;--i;--nongDate[4];}nongDate[1] = i;nongDate[2] = offset + 1;return nongDate;}public final static String getChinaDate(int day) { String a = "";if (day == 10)return"初十";if (day == 20)return"二十";if (day == 30)return"三十";int two = (int) ((day) / 10);if (two == 0)a = "初";if (two == 1)a = "十";if (two == 2)a = "廿";if (two == 3)a = "三";int one = (int) (day % 10);switch (one) {case 1:a += "一";break;case 2:a += "二";break;case 3:a += "三";break;case 4:a += "四";break;case 5:a += "五";break;case 6:a += "六";break;case 7:a += "七";break;case 8:a += "八";break;case 9:a += "九";break;}return a;}public static String today() {Calendar today = Calendar.getInstance(Locale.SIMPLIFIED_CHINESE);int year = today.get(Calendar.YEAR);int month = today.get(Calendar.MONTH) + 1;int date = today.get(Calendar.DATE);long[] l = calElement(year, month, date);StringBuffer sToday = new StringBuffer();try {sToday.append(sdf.format(today.getTime()));sToday.append(" \n");sToday.append(" \n");sToday.append(" \n");sToday.append(" 农历");sToday.append(cyclical(year));sToday.append('(');sToday.append(AnimalsYear(year));sToday.append(")年");sToday.append(" \n");sToday.append(" ");sToday.append(nStr1[(int) l[1]]);sToday.append("月");sToday.append(getChinaDate((int) (l[2])));return sToday.toString();} finally {sToday = null;}}private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy 年M月d日 EEEEE");public void mouseEntered(MouseEvent e) {}public void mouseExited(MouseEvent e) {}public void mousePressed(MouseEvent e) {}public void mouseReleased(MouseEvent e) { }}。
Java实现简单的万年历

Java实现简单的万年历本⽂实例为⼤家分享了Java实现简单万年历的具体代码,供⼤家参考,具体内容如下1 要求1、输⼊年份;2、输⼊⽉份;3、输出某年某⽉的⽇历。
2 思路1、实现从控制台接收年和⽉,判断是否是闰年(判断是否是闰年:能被4整除但不能被100整除;或者能被400整除);2、计算输⼊⽉份的天数;3、计算该⽉第⼀天是星期⼏;3.1 计算输⼊年份距离1900年1⽉1⽇的天数;3.2 计算输⼊⽉份之前的天数(从当年年初开始);3.3 将以上两组数据进⾏求和;3.4 已知该⽉之前的天数,计算输⼊⽉份的第⼀天是星期⼏(从1900年1⽉1⽇(星期⼀)开始推算: 星期⼏ = 1 + 天数差 % 7 )。
4、按格式输出该⽉⽇历。
3 源代码import java.util.Scanner;public class index {//每个⽉的天数public static int monthday(int month, int year) {if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {int[] day = {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};return day[month];} else {int[] day = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};return day[month];}}//⽉份总天数public static int monthdays(int month, int year) {int totaldays = 0;for (int i = 1; i < month; i++) {totaldays = totaldays + monthday(i, year);}return totaldays;}//距离1900年的年份总天数public static int yeardays(int year){int yeardays = 0;for (int i = 1900;i<year;i++){if ((i % 4 == 0 && i % 100 != 0) || i % 400 == 0) {yeardays = yeardays+366;} else {yeardays = yeardays+365;}}System.out.println(year+"年距离1900年的总天数"+yeardays);return yeardays;}//输出⽇历public static void printCalendar(int month,int year){int totaldays = 0;if (year > 0) {if (month > 0 && month < 13) {//距离1900年1⽉1⽇总天数totaldays = monthdays(month,year)+yeardays(year);System.out.println(year+"年"+month+"⽉1⽇距离1900年的总天数:"+totaldays);System.out.println("\n**********"+year+"年"+month+"⽉的⽇历为**********");System.out.println("⼀\t⼆\t三\t四\t五\t六\t⽇\t");int week = 1+totaldays%7;//根据1⽇为周⼏输出空格for(int i=1;i<week;i++){System.out.print(" \t");}//输⼊具体⽇期for(int i=1;i<=monthday(month,year);i++){System.out.print(i+"\t");if(week==7){week = 1;//重置为星期⼀System.out.println();}else{week++;}}} else {System.out.println("输⼊的⽉份不合法!");}} else {System.out.println("输⼊的年份不合法!");}}//主函数public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.println("***********************欢迎使⽤万年历**************************");System.out.println("*********请选择你需要进⾏的操作(输⼊进⾏操作之前的数字)**********"); System.out.println("********************1.查询某年某⽉的⽇历************************");System.out.println("********************2.结束操作*********************************");System.out.print("\n请选择你需要进⾏的操作:");int a = scanner.nextInt();for (int i=0;i>=0;i++) {switch (a) {case 1:System.out.print("请选择年份:");int year = scanner.nextInt();System.out.print("请选择⽉份:");int month = scanner.nextInt();printCalendar(month, year);System.out.print("\n请选择你需要进⾏的操作:");a = scanner.nextInt();break;case 2:System.out.println("退出程序成功!");return;}}}}4 结果截图注意:我的周⽇是在最后⼀栏以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
java日历小程序

java日历小程序简介:Java日历小程序是一个基于Java语言开发的工具,用于显示和管理日期和时间。
它提供了一种简单而直观的方式来查看、创建和编辑日历事件,并提供了一些额外的功能,如提醒、重复事件和时间段的计算等。
本文将详细介绍Java日历小程序的功能、使用方法和设计原理。
功能:1. 显示日历:Java日历小程序可以显示当前月份的日历,并以日、周或月的形式展示。
用户可以通过界面上的上下翻页按钮切换月份,方便查看不同日期的日历。
2. 创建和编辑事件:用户可以通过Java日历小程序创建新的日历事件,并为每个事件指定标题、日期、时间和地点等详细信息。
程序还提供了事件编辑功能,允许用户修改已有事件的信息。
3. 提醒功能:Java日历小程序可以设置事件的提醒功能,提醒用户在指定的时间前提醒。
用户可以选择在事件开始前几分钟、几小时或几天提醒,并可以自定义提醒方式,如弹窗、声音或邮件通知等。
4. 重复事件:用户可以为事件设置重复功能,使事件在指定的日期间隔内重复发生。
可以选择每天、每周、每月或每年重复,并可以设置重复的结束日期。
5. 时间段计算:Java日历小程序可以计算两个日期之间的时间段,如计算两个事件之间的天数、小时数或分钟数等。
用户可以选择计算方式,并获取精确的时间段结果。
使用方法:1. 下载和安装:用户可以从官方网站上下载Java日历小程序的安装包,然后按照安装向导进行安装。
安装完成后,用户可以在桌面或开始菜单中找到程序的快捷方式。
2. 打开程序:双击程序的快捷方式,Java日历小程序将启动并显示当前月份的日历。
用户可以通过界面上的按钮和菜单来使用各种功能。
3. 创建事件:用户可以点击界面上的“添加事件”按钮,弹出一个对话框,输入事件的详细信息,如标题、日期、时间和地点等。
点击“确定”按钮后,事件将被创建并显示在日历上。
4. 编辑事件:用户可以在日历上点击已有的事件,弹出一个对话框,允许用户修改事件的信息。
java课程设计简单日历(word文档良心出品)

j a v a课程设计报告题目:JA V A简易时间日历程序****:***学号:**********专业班级:信101****:***课程设计题目题目说明通过编写一个基于JAVA的应用系统综合实例,自定义一个日历组件显示日期和时间并进行适当的功能扩充,实践Java语言编程技术。
系统设计1 设计目标一个完整的程序应具有以下功能:1)显示当月日历、当前日期、当前时间;2)可查寻任意月以及任意年的日历;3)使用图形化界面能够弹出对话框;5)正常退出程序。
2 设计思想设计一个类用来构成日历系统的主窗口,然后编写一个框架类显示时间和提示信息。
在设计中应用了多种容器和控件。
系统模块划分图1:简易日历的程序结构图初始化:public void init()完成界面初始化,形成一个以挂历形式显示当前日期的窗口。
日历描述:(1)public void updateView()改变日期后完成更新界面;(2)抽象类java.util.Calendar获取系统日期并传递日期数据而且在人工改变日期后得出当天是周几;(3)public static void main(String[] args)主函数完成系统各算法的调用并对主窗口的一些属性进行设置;滚动时间:将时间以文本的形式在文本框中滚动播出,并能改变滚动的速度。
4. 使用类及接口仅仅简单说明类的功能,详细资料请参看《JavaTM 2 Platform Standard Ed. 6》的电子文档,常规的接口与包则省略不屑。
//以下是日历程序块中使用的类package fancy;import java.awt.*;import java.awt.event.*;import java.util.*; //主要用此包中的日期和时间类import javax.swing.*;import javax.swing.event.*;import javax.swing.table.*;//以下是对滚动时间程序块所使用的类和接口,用到定时器类Timerimport java.awt.Color;import java.awt.FlowLayout;import java.awt.event.ActionListener;import java.awt.event.ActionEvent;import java.awt.event.FocusListener;、//用于监听鼠标单击(焦点改变)事件import java.awt.event.FocusEvent;//用于响应鼠标单击(焦点改变)事件、import javax.swing.JFrame;import javax.swing.JTextField;import javax.swing.JSpinner;//让用户从一个有序序列中选择一个数字或者一个对象值的单行输入字段。
java迷你日历_程序+实验报告

Java 万年历程序实验报告<实验题目>实现图形界面的万年历,可以显示不同年月日历。
<实现结果>截图如下操作步骤:自己输入年份,自己输入月份,按ok按钮后显示。
<程序简述>以下为窗口大致布局,对应代码中各变量。
label0 t0 label1 t1 btn1 label00月份OKP3程序中主要运用第八章内容,包含窗口的布局设计和各个组件的功能和显示。
同时利用网络学习了类型转换的两个函数和标签的内容改写。
程序基本完成了实验要求,同时有处理异常输入的能力。
<总结心德>此次java编程对第八章的内容有了比较深入的理解,在编程中遇到了各种的问题,但还是在不断的改错和补充中完成了实验。
第一次有这种图形界面的成品感觉很有成就感,而且得来确实不容易。
我觉得实践确实出真知而且实践还能不断发现问题,解决问题,真正提高自己。
在这次实验中收获很多。
<源代码>import java.awt.*;import java.awt.event.*;import javax.swing.*;public class Calendar extends JFrame implements ActionListener{static int year,month; //设置静态变量便于计算方法的实现private String [] ast = {" 星期日"," 星期一", " 星期二", " 星期三", " 星期四", " 星期五", " 星期六"};private JLabel [] ai = new JLabel[49];private JLabel label0,label1,label2,label00; //标签private JTextField t0,t1; //输入框private JButton btn1; //按钮private JPanel p0,p1,p2; //面板public Calendar(){super("mini万年历"); //框架命名this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//窗口关闭函数this.setBounds(100,100,500,300);//设置窗口的位置和大小Container c=getContentPane();p1 = new JPanel();//面板对象p0 = new JPanel();p2 = new JPanel(new GridLayout(7,7,10,1));//网格布局管理器label0=new JLabel("年份(如:2012)");//标签组件label1=new JLabel("月份(如:6 )");label2=new JLabel("");label00=new JLabel(" 欢迎使用该万年历!可输入年份进行定位(制作者:田响)");t0=new JTextField(5);//文本框t1=new JTextField(3);btn1=new JButton("OK");//按钮int i;//中心面板中各个标签初始化(用显示日历7行7列)for(i=0;i<7;i++)p2.add(ai[i]=new JLabel(ast[i]));//第一行显示是周几(星期日到星期六)for (i= 7; i < 49; i++)p2.add(ai[i]=new JLabel(""));//暂时为空,在showCalendar中具体定义各月不同的显示p1.add(label0);p1.add(t0);p1.add(label1);p1.add(t1);p1.add(btn1);p1.add(label2);p0.add(label00);c.add(p1,BorderLayout.NORTH);c.add(p0,BorderLayout.SOUTH);c.add(p2,BorderLayout.CENTER);btn1.addActionListener(this);//注册年份、月份输入和ok按钮监听器t0.addActionListener(this);t1.addActionListener(this);this.setVisible(true);//窗口可见}//main主函数public static void main(String[] args){Calendar a=new Calendar();a.showCalendar(2012,6);//初始化显示2012年6月日历}//事件处理方法public void actionPerformed (ActionEvent e){if(e.getSource() == t0 || e.getSource() == t1 || e.getSource() == btn1){try//控制输入的年份正确,异常控制{if (t0.getText().length() != 4)throw new NumberFormatException();}catch (NumberFormatException ex){return;}String s1=t0.getText();//得到输入的年份year=Integer.parseInt(s1);//将年份转换为int型,year为静态变量String s2=t1.getText();//月份,同年份处理month=Integer.parseInt(s2);showCalendar(year,month);//调用显示日历的函数}}//showCalendar:在中间面板中显示网格布局之后的日历主界面public void showCalendar(int year,int month){int monthDay=getMonthDay(year,month);//得到一个月有多少天int startDay=getStartDay(year,month);//得到每个月开始是周几//显示当前窗口中显示日历的年月String rr="当前月份"+" (("+Integer.toString(year)+"-"+Integer.toString(month)+"))";label2.setText(rr);//控制各月日历的正确显示int i;for (i= 7; i < startDay+7; i++)ai[i].setText("");for (i =startDay+7;i<startDay + monthDay + 7;i++){String bb;//存在意义:便于实现setText函数的带格式输入if(i-startDay-6<10)bb=" "+Integer.toString(i-startDay-6);//将int型转换为String型elsebb=" "+Integer.toString(i-startDay-6);ai[i].setText(bb);}for(i=startDay + monthDay + 7;i<49;i++)ai[i].setText("");}//leapYear:判断是否为闰年public static boolean leapYear(int year){if ((year % 400 == 0) || ((year % 4 == 0) && (year % 100 != 0))) return true;return false;}//getMonthDay:每月总天数public static int getMonthDay(int year, int month){if (month == 1 || month==3 || month == 5 || month == 7 ||month == 8 || month == 10 || month == 12)return 31;if (month == 4 || month == 6 || month == 9 || month == 11)return 30;if (month == 2)if (leapYear(year))//闰年二月29天return 29;elsereturn 28;return 0; //if month is incorrect.//如果月份输入错误返回0.}//getStartDay:返回每月第一天是周几public static int getStartDay(int year,int month){//从1800年1月1日开始int startDay1800 = 3;long totalDays = getTotalDays(year, month);return (int)((totalDays + startDay1800) % 7);}//getTotalDays:从1800年1月1日到所查月份前总的天数public static long getTotalDays(int year, int month){long total = 0;for (int i = 1800; i < year; i++)if (leapYear(i))total = total + 366;elsetotal = total + 365;for (int i = 1; i < month; i++)total = total + getMonthDay(year, i);return total;}}。
JAVA日历代码

} int sum1=0; for(int i=1900;i<year;i++){
dd=31; break; case 4: case 6: case 9: case 11:
dd=30; break; case 2: dd=isRun?29:28; break; } sum2 +=dd; }
//计算总天数 int sumDays= sum1+sum2;
//计算输入月份的第一天是星期几 int weekday=sumDays%7+1;
boolean isRun=false;
//判断年份是否是闰年 if(year%4==0&&year%100!=0||year%400==0) {
isRun=true; }
//计算输入年和月对应的总天数 int days=0;//存放当月的总天数 switch(month) { case 1: case 3: case 5: case 7: case 8: case 10: case 12:
txt39人生旅程并不是一帆风顺的逆境失意会经常伴随着我们但人性的光辉往往在不如意中才显示出来希望是激励我们前进的巨大的无形的动力
import java.util.Scanner; import java.util.Date;
public class Test { public static void main(String args[]){ //键盘接收年月,并且判断输入的是否是闰年 Scanner sc=new Scanner(System.in); System.out.print("请输入年份:"); int year=sc.nextInt(); System.out.print("请输入月份:"); int month=sc.nextInt();
自学java编写的日历小程序
//1900年以来的日历imp ort j ava.u til.*;pu blicclass Test10 {publ ic st aticvoidmain(Strin g[] a rgs){Sc anner in=n ew Sc anner(Syst em.in);Syste m.out.prin tln("请输入年份:");int year s=in.nextI nt();Sy stem.out.p rintl n("请输入月份:");int m onth=in.ne xtInt();Syst em.ou t.pri ntln("请输入日期:");in t day=in.n extIn t();int sum=0;for(i nt ye ar=1900;ye ar<ye ars;y ear++){if(ye ar%4==0&&y ear%100!=0||yea r%400==0){sum+=366;}e lse{s um+=365;}}for(i nt i=1;i<m onth;i++){i f(i==2){if(year s%4==0&&ye ars%100!=0||yea rs%400==0){ sum+=29;}else{sum+=28;}}else if(i==4||i==6||i==9||i==11){s um+=30;}els e{sum+=31;}}Sy stem.out.p rintl n("一\t二\t三\t四\t五\t六\t日");in t day1=sum%7+1;in t mon thday;i f(mon th==2){if(y ears%4==0&&year s%100!=0||years%400==0){m onthd ay=29;}else{mont hday=28;}}els e if(month==4||month==6||month==9||month==11){month day=30;}else{month day=31;}for(i nt k=1;k<d ay1;k++){Sy stem.out.p rint(" \t");}int d=1;for(int w eek1=day1;week1<=7;w eek1++){ Sys tem.o ut.pr int(d+" \t");d++;}Sy stem.out.p rintl n();intj=d;whi le(j<=mont hday){for(i nt we ek=1;week<=7;we ek++){Syst em.ou t.pri nt(j+"\t");j++;if(j>month day){break;}}Syst em.ou t.pri ntln();}}}。
java日历
Java日历一、开发语言:java二、开发环境:MyEclipse8.6三、项目名称:java日历控件四、程序运行截图:1.通过单击更改年份:2.通过单击更改月份3.通过单击更改日期4.通过键盘方向键更改日期5.右击将快捷第显示当天的日历6.windows日历展示:7.通过双击可以关闭日历8.该日历的实质是一个去掉了修饰的JFrame9.通过右上角很小的关闭按钮也可以关闭日历10.该日历应用于其它应用程序进行日期输入,日期修改五、程序源文件文件一:package net.cqwu.control;/*_*=====使用已有类Calendar======*_*/import java.text.DateFormatSymbols;import java.util.*;/*** @version 1.4 2007-04-07* @author Cay Horstmann*/public class StandardCalendar{public static void main(String[] args) {GregorianCalendar d = new GregorianCalendar();StandardCalendar s= new StandardCalendar(d.get(Calendar.YEAR), d.get(Calendar.MONTH) - 1, d.get(Calendar.DAY_OF_MONTH));System.out.print(s.getCalendarString());String [][] b = s.getCalendarNumber2D(s.calendarString);int[][] a = s.getMinIndexOutOfMonth(b);for (int[] t: a){for (int p : t){System.out.print(p + " ");}}}public StandardCalendar(int ye, int mo, int da) {super();this.ye = ye;this.mo = mo;this.da = da;}public String getCalendarString(){calendarString = "";// construct d as current dateGregorianCalendar d = new GregorianCalendar(ye, mo, da);int today = d.get(Calendar.DAY_OF_MONTH);System.out.println("今天" + today + "号");int month = d.get(Calendar.MONTH);System.out.println("今天" + (month + 1) + "月");//set d to start date of the monthd.set(Calendar.DAY_OF_MONTH,1);// DAY_OF_WEEK表示一个周中的第几天int weekday = d.get(Calendar.DAY_OF_WEEK);System.out.println("日历当天是一周中的第"+weekday + "天");//get first day of week (Sunday in the U.S.)int firstDayOfWeek = d.getFirstDayOfWeek();// 如果一个月的第一天就是一个周的第一天,就输出上一个月的倒数七天String preMonthString = "";while (weekday == firstDayOfWeek){d.add(Calendar.DAY_OF_MONTH,-1);String temp = "" +d.get(Calendar.DAY_OF_MONTH);preMonthString = temp + " " + preMonthString;System.out.println(temp);weekday = d.get(Calendar.DAY_OF_WEEK);// GregorianCalendar temp1 = new GregorianCalendar(d.get(Calendar.YEAR), d.get(Calendar.MONTH)-1, 1);// do// {// preMonthDays++;// temp1.add(Calendar.DAY_OF_MONTH, 1);// }while(temp1.get(Calendar.MONTH)==month-1);// System.out.println("前一个月有:" + preMonthDays + "天");}//determine the required indentation for the first lineint indent = 0;while(weekday != firstDayOfWeek){indent ++;d.add(Calendar.DAY_OF_MONTH,-1);String temp = "" +d.get(Calendar.DAY_OF_MONTH);preMonthString = temp + " " + preMonthString;System.out.println(temp);weekday = d.get(Calendar.DAY_OF_WEEK);}System.out.println(preMonthString);//print weekday namesString[] weekdayNames = new DateFormatSymbols().getShortWeekdays();do{System.out.printf("%4s",weekdayNames[weekday]);d.add(Calendar.DAY_OF_MONTH,1);weekday = d.get(Calendar.DAY_OF_WEEK);}while(weekday != firstDayOfWeek);System.out.println();// for(int i = 1 ;i <= indent;i++)// {// System.out.print(" ");// }if (preMonthString.length()==21){System.out.print(preMonthString + "\n");calendarString += preMonthString + "\n";}else{System.out.print(preMonthString);calendarString += preMonthString;}d.set(Calendar.DAY_OF_MONTH,1);do{//print dayint day = d.get(Calendar.DAY_OF_MONTH);System.out.printf("%2d",day);if (day < 10){calendarString += " " + day;}else{calendarString += day;}// mark current day with *if(day == today){System.out.print("*");calendarString += "*";}else{System.out.print(" ");calendarString += " ";}//advance d to the next dayd.add(Calendar.DAY_OF_MONTH,1);weekday = d.get(Calendar.DAY_OF_WEEK);//start a new line at the start of the week if(weekday == firstDayOfWeek){System.out.println();calendarString += "\n";}}while(d.get(Calendar.MONTH) == month);//the loop exits when d is day 1 of the next month// 填充日历中的尾部do{//print dayint day = d.get(Calendar.DAY_OF_MONTH);System.out.printf("%2d",day);if (day < 10){calendarString += " " + day;}else{calendarString += day;}// mark current day with *if(day == today){System.out.print("*");calendarString += "*";}else{System.out.print(" ");calendarString += " ";}//advance d to the next dayd.add(Calendar.DAY_OF_MONTH,1);weekday = d.get(Calendar.DAY_OF_WEEK);//start a new line at the start of the weekif(weekday == firstDayOfWeek){System.out.println();calendarString += "\n";}}while(calendarString.length()<=131);// System.out.println("月份" + d.get(Calendar.MONTH));//print final end of line if necessary// if(weekday != firstDayOfWeek)// System.out.println();// System.out.println(calendarString);return calendarString;}// 获得一维日历字符串数组public String[] getCalendarNumber(String calendarString){String[] tempArray = calendarString.split("\n");String standardString = "";String[] standardStringArray = new String[42];for (int i = 0; i < tempArray.length; i ++){standardString += tempArray[i];}// System.out.println(standardString);int standardStringLength = standardString.length();for (int i = 0, j = 1, k =0 ; i < standardStringLength - 2 && j < standardStringLength - 1 && k < 49; i += 3, j += 3, k ++) {standardStringArray[k] = (standardString.charAt(i)==' '?"":standardString.charAt(i)) +""+ standardString.charAt(j);}// for (String temp : standardStringArray)// {// System.out.print(temp + " ");// }return standardStringArray;}// 获得二维日历字符串数组public String[][] getCalendarNumber2D(String calendarString){String[][] standardStringArray2D = new String[6][7];String[] temp = this.getCalendarNumber(this.calendarString);for (int i = 0; i < temp.length; i++) {standardStringArray2D[i/7][i%7] = temp[i];}System.out.println("输出二维数组");for (String [] temp1 : standardStringArray2D){for (String temp2 : temp1){System.out.print(temp2 + " ");}System.out.println();}return standardStringArray2D;}// 该方法用于获得本日历的两个1的索引public int[][] getMinIndexOutOfMonth(String[][] temp){int[][] index = {{0,0}, {0, 0}};for (int i = 0; i < 6; i++) {for (int j = 0; j < 7; j++) {if (Integer.parseInt(temp[i][j]) == 1 && i < 2){index[0][0] = i;index[0][1] = j;}if (Integer.parseInt(temp[i][j]) == 1 && i > 2){index[1][0] = i;index[1][1] = j;}}}return index;}public int getYe() {return ye;}public void setYe(int ye) {this.ye = ye;}public int getMo() {return mo;}public void setMo(int mo) {this.mo = mo;}public int getDa() {return da;}public void setDa(int da) {this.da = da;}private String calendarString = null;private int ye ;private int mo;private int da;};文件二:package net.cqwu.control;import java.awt.Toolkit;/*** 定义一个接口,获得显示器的大小* @version 2011-04-26* @author yelin*/public interface ScreenSize{public static final int DEFAULT_WIDTH = Toolkit.getDefaultToolkit().getScreenSize().width;public static final int DEFAULT_HEIGHT = Toolkit.getDefaultToolkit().getScreenSize().height;};文件三:package net.cqwu.model;import java.awt.Color;import java.awt.Cursor;import java.awt.EventQueue;import java.awt.Font;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.KeyEvent;import java.awt.event.KeyListener;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import java.awt.event.MouseMotionListener;import java.awt.event.MouseWheelEvent;import java.awt.event.MouseWheelListener;import java.awt.event.WindowEvent;import java.awt.event.WindowListener;import java.awt.font.FontRenderContext;import java.awt.font.LineMetrics;import java.awt.geom.Rectangle2D;import java.util.Calendar;import java.util.GregorianCalendar;import javax.swing.JFrame;import javax.swing.JMenuItem;import javax.swing.JPanel;import javax.swing.JPopupMenu;import javax.swing.event.MouseInputListener;import net.cqwu.control.ScreenSize;import net.cqwu.control.StandardCalendar;/*** 设计一个日历控件,可以在任何地方使用.* 使用说明:若作为控件使用请转至691行作用,在MainCalendar构造时注册* 你自己的类,进行对象之间的通讯,可以在691行处获取日历。
java万年历_java实现万年历
java万年历_java实现万年历敲了⼀下午,代码⽐较乱,思路也⽐较乱,第⼀次敲这么长的java代码,总结起来就是⽋练!!package homework;import java.io.*;import ng.*;import java.util.Scanner;import java.util.*;class year{year_month_day m=new year_month_day();void set(int y){m.year=y; m.day=1;}void year_method(){int i=1;for(i=1;i<=12;i++){System.out.println(+m.year+"年" +i+"⽉");m.month=i; m.print();}}}class year_month_day{int itag=0;int year,month,day;void set(int y,int m,int d) {year=y; month=m; day=d; }public int isLeepyear(int year) {int m;if((this.year % 4 == 0 && this.year % 100 != 0) || this.year % 400 == 0)m=1;else m=0;return m; }void print(){itag=isLeepyear(year);Calendar rili=Calendar.getInstance();rili.set(year, month-1, 1);System.out.println("⽇\t⼀\t ⼆\t 三\t 四\t 五\t 六");int week=rili.get(Calendar.DAY_OF_WEEK)-1;//System.out.println("week="+week);String a[]=new String[week+31];for(int i=0;i {a[i]="**"; }int num=0;if(itag==1&&month==2)num=29;else if(itag==0&&month==2)num=28;else if(month==1||month==3||month==5||month==7||month==8||month==10||month==12) num=31;else num=30;for(int i=week,n=1;i ++){if(n<9) a[i]=String.valueOf(n)+" ";else a[i]=String.valueOf(n); n++;}for(int i=0;i ++)if(i%7==0){System.out.println(""); }if(a[i]==null)a[i]=" ";System.out.print(a[i]+"\t"); }System.out.print("\n\n"); } }public class year_calendar {public static void main(String[] args)System.out.println("**************************");System.out.println("* 中华万年历 *");System.out.println("* 请选择查询⽅法 *");System.out.println("*1.按年份检索 2.按年⽉⽇检索 *");System.out.println("*3.退出系统 *");System.out.println("**************************"); int n; int year,month,day;Scanner s = new Scanner(System.in);n=s.nextInt();switch(n){case 1: {System.out.println("请输⼊要检索的年份:"); year=s.nextInt();year d=new year();d.set(year);d.year_method(); break; }case 2: {System.out.println("请输⼊要检索的年⽉⽇:"); year=s.nextInt();month=s.nextInt();day=s.nextInt();year_month_day t=new year_month_day(); t.set(year, month, day);t.print(); break; }case 3:break;}}}。
java万年历的编写
作者:胡楠启java万年历的编写,以1年1月1日为星期一为标记。
在命令行窗口编译,运行代码:import java.util.Scanner;public class Text4{static int age,mouth;public static void main(String[] args){Scanner sc=new Scanner(System.in);System.out.println("由于程序员水平不行,请输入大于1年的年份");System.out.println("请输入年");age=sc.nextInt();System.out.println("请输入月");mouth=sc.nextInt();int mouse[]=new int[12];mouse[0]=31;//初始化数组。
默认为平年mouse[1]=28;mouse[2]=31;mouse[3]=30;mouse[4]=31;mouse[5]=30;mouse[6]=31;mouse[7]=31;mouse[8]=30;mouse[9]=31;mouse[10]=30;mouse[11]=31;if(age%4==0&&(age%100!=0||age%400==0)){mouse[1]=29;}System.out.println("星期天"+"\t"+"星期一"+"\t"+"星期二"+"\t"+"星期三"+"\t"+"星期四"+"\t"+"星期五"+"\t"+"星期六");int d=FirstMouth(mouth);//D表示当前月份的第一天是星期几 //下面的switch是为了输出界面包括空格和数字等switch(d){case 1:for(int i=0;i<1;i++){System.out.print(" "+"\t");//先输出每个月前面星期的空格 }for(int j=1;j<=mouse[mouth-1];j++){System.out.print(j+"\t");if((j+1)%7==0)System.out.println();}break;case 2:for(int i=0;i<2;i++){System.out.print(" "+"\t");}for(int j=1;j<=mouse[mouth-1];j++){System.out.print(j+"\t");if((j+2)%7==0)System.out.println();}break;case 3:for(int i=0;i<3;i++){System.out.print(" "+"\t");}for(int j=1;j<=mouse[mouth-1];j++){System.out.print(j+"\t");if((j+3)%7==0)System.out.println();}break;case 4:for(int i=0;i<4;i++){System.out.print(" "+"\t");}for(int j=1;j<=mouse[mouth-1];j++){ System.out.print(j+"\t");if((j+4)%7==0)System.out.println(); }break;case 5:for(int i=0;i<5;i++){System.out.print(" "+"\t");}for(int j=1;j<=mouse[mouth-1];j++){ System.out.print(j+"\t");if((j+5)%7==0)System.out.println(); }break;case 6:for(int i=0;i<6;i++){System.out.print(" "+"\t");}for(int j=1;j<=mouse[mouth-1];j++){ System.out.print(j+"\t");if((j+6)%7==0)System.out.println(); }break;case 0:for(int j=1;j<=mouse[mouth-1];j++){ System.out.print(j+"\t");if((j+0)%7==0)System.out.println(); }break;}}//计算每年的第一天是星期几,传入的参数是年份,1年1月1日是星期天把输入年份月份之之前到1年1月1日static int FirstDay(int x){int j=0;int sum=(x-1)*365;//sum表示输入的年之前总共有多少天默认全是平年for(int i=1;i<x;i++){if(i%4==0 && (i%100!=0 || i%400==0)){sum+=1;}}return sum;//返回总天数}//返回当前月份第一天是星期几static int FirstMouth(int y){int x=FirstDay(age);int day=0;int mouse[]=new int[12];mouse[0]=31;//初始化数组。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
import java.awt.*; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.util.*; import java.util.Timer;
import javax.swing.*; import javax.swing.event.*; import javax.swing.table.*;
//这是一个用JList和JTable完成的简单日历 public class calender { public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { JFrame frame = new CalendarFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } }); } }
class CalendarFrame extends JFrame { private static final long serialVersionUID = 8067844586793608064L; JPanel listPanel; // 显示月份的列表面板 JPanel tablePanel; // 显示日期的表格面板 JPanel textPanel; // 文本面板 JMenuBar menuBar; // JMenuBar,JMenu定义的变量都没有实现功能 JMenu fileMenu; JMenu editMenu; JMenu formatMenu; JMenu lookMenu;
JMenu helpMenu; JEditorPane text; // 自带复制,剪切和删除快捷键功能的面板 JScrollPane textscrollpane; JScrollPane tablescrollpane; JList list; // 显示月份的列表 JTable table; // 显示日期的表格 JPanel yearPanel; // 显示年份的面板 JSpinner spinner; // JSpinner空间 JLabel label = new JLabel(); public static boolean flag = true;
public CalendarFrame() { table = new JTable(new MyTableModel()); tablescrollpane = new JScrollPane(table); for (int i = 0; i < 7; i++) { TableColumn column = table.getColumnModel().getColumn(i);// 获取表格每一列 column.setResizable(false);// 不允许改变列的大小 }
table.setBackground(Color.GREEN); table.setRowHeight(72); // 设定每列的大小 table.setRowSelectionAllowed(false);// 设定行的选择模式 table.setDefaultRenderer(String.class, new MyTableRenderer());
list = new JList(new AbstractListModel() // 匿名的list模型类,提供list显示的月份数据 { private static final long serialVersionUID = -3703164069291737586L;
public Object getElementAt(int index) { String obj = null; switch (index) { case 0: obj = "Jan"; break; case 1: obj = "Feb"; break; case 2: obj = "Mar"; break; case 3: obj = "Apr"; break; case 4: obj = "May"; break; case 5: obj = "Jun"; break; case 6: obj = "Jul"; break; case 7: obj = "Aug"; break; case 8: obj = "Sep"; break; case 9: obj = "Oct"; break; case 10: obj = "Nov"; break; case 11: obj = "Dec"; break; } return obj; }
@Override public int getSize() { return 12; }
}); list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); // 设定列表的选择模式 list.setCellRenderer(new MyListCellRenderer()); // 列表元素的绘制类MyListCellRenderer list.setSelectedIndex(Calendar.getInstance().get(Calendar.MONTH));// JList默认的月份为现实的月份 list.addListSelectionListener(new ListSelectionListener()// 当某个列表被选中时,更新日期table控件 { public void valueChanged(ListSelectionEvent e) { flag = true; table.updateUI(); }
}); list.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent evt) { if (evt.getClickCount() == 2) { String s = (String) list.getSelectedValue(); JOptionPane.showMessageDialog(list, s); } } }); listPanel = new JPanel(); listPanel.setLayout(new BorderLayout()); listPanel.add(list);
tablePanel = new JPanel(); tablePanel.setBackground(Color.white); tablePanel.setLayout(new BorderLayout()); tablePanel.add(tablescrollpane); // table.setBackground(Color.green);
yearPanel = new JPanel();// 将label控件和JSpinner控件加入年份面板上 yearPanel.setLayout(new GridLayout(0, 4)); JLabel gongyuan = new JLabel("公元", JLabel.RIGHT); JLabel year = new JLabel("年"); spinner = new JSpinner(new SpinnerNumberModel(Calendar.getInstance() .get(Calendar.YEAR), null, null, 1)); spinner.addChangeListener(new ChangeListener() // 为JSpinner空间添加事件监听器 {
@Override public void stateChanged(ChangeEvent e) { flag = true; table.updateUI(); } }); yearPanel.add(gongyuan); yearPanel.add(spinner); yearPanel.add(year); yearPanel.add(label); showTime(); new Timer().schedule(new TimerTask() { @Override public void run() { while (true) { showTime(); } }
}, 1000); tablePanel.add(yearPanel, BorderLayout.NORTH);// 将年份面板加入到表格面板的北部
textPanel = new JPanel();
textPanel.setLayout(new BorderLayout()); text = new JEditorPane(); textscrollpane = new JScrollPane(text); textPanel.add(textscrollpane); text.setFont(new Font("SansSerif", Font.PLAIN, 40)); tablePanel.add(textPanel, BorderLayout.SOUTH); menuBar = new JMenuBar();// JMenu定义的空间都没实现功能 fileMenu = new JMenu("文件"); editMenu = new JMenu("编辑"); formatMenu = new JMenu("格式"); lookMenu = new JMenu("查看");
helpMenu = new JMenu("帮助"); menuBar.add(fileMenu); menuBar.add(editMenu); menuBar.add(formatMenu); menuBar.add(lookMenu); menuBar.add(helpMenu);