1、windows日历时钟综 合 考 查题目: Windows日历时钟软件 姓名: 学号: 成绩: 日期: 2011-01-5 源代码文件名:Main0.javaimport java.awt.*;import javax.swing.*;public class main0 extends JFrame private static final long serialVersionUID = 1L; public main0() super(时间 日期); /时间和日期 JPanel dt=new JPanel(); /创建面板 dt.setLayout(new GridLayout(); /网
2、格布局管理器 rili x=new rili(); x.init(); dt.add(x); dt.add(new Clock(); /时区 JPanel timeArea=new JPanel(); /Internet时间 JPanel internetTime=new JPanel(); /创建属性页tabbedPane JTabbedPane tabbedPane=new JTabbedPane(); tabbedPane.addTab(时间和日期, dt); tabbedPane.addTab(时区, timeArea); tabbedPane.addTab(Internet时间, i
3、nternetTime); tabbedPane.setSelectedIndex(0); /设置默认版位第一版 getContentPane().add(tabbedPane,BorderLayout.CENTER); /把属性页加到frame中去 public static void main(String args) JFrame.setDefaultLookAndFeelDecorated(true); JFrame frame=new main0(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.pack()
4、; frame.setVisible(true); frame.setSize(400,250); 文件名:Rili.javaimport java.awt.*;import java.awt.event.*;import java.util.*;import javax.swing.*;import javax.swing.event.*;import javax.swing.table.*;public class rili extends JApplet /*定义全局变量*/ public static final Color background = Color.white;/背景色
5、public static final Color foreground = Color.black;/前景色 public static final Color headerBackground = Color.DARK_GRAY;/星期 public static final Color headerForeground = Color.white;/星期前景色 public static final Color selectedBackground = Color.blue;/选中背景色 public static final Color selectedForeground = Col
6、or.white;/选中前景色 public static final String WeekSun = 日; /星期标签名称 public static final String WeekMon = 一; public static final String WeekTue = 二; public static final String WeekWed = 三; public static final String WeekThu = 四; public static final String WeekFri = 五; public static final String WeekSat =
7、 六; private JPanel MainPanel;/日历面板 private JLabel yearsLabel;/“年份” 标签 private JSpinner yearsSpinner;/年份组合框 private JLabel monthsLabel;/“月份” 标签 private JComboBox monthsComboBox; /12月份下拉框 private JLabel InfoLabel;/信息显示标签 private JTable daysTable; /日表格 private AbstractTableModel daysModel;/天单元表格private
8、 Calendar calendar;/日历对象/*函数定义*/ public rili() /构造函数 MainPanel = (JPanel) getContentPane(); public void init() /初始化面板界面函数 MainPanel.setLayout(new BorderLayout(); calendar = Calendar.getInstance(); /默认方式,以本地的时区和地区来构造Calendar yearsLabel = new JLabel(年 ); /设置年份标签显示 yearsSpinner = new JSpinner();/构造年份sp
9、inner组合框 yearsSpinner.setEditor(new JSpinner.NumberEditor(yearsSpinner, 0000); yearsSpinner.setValue(new Integer(calendar.get(Calendar.YEAR); yearsSpinner.addChangeListener(new ChangeListener() /注册该组合框的事件监听器 public void stateChanged(ChangeEvent changeEvent) int day = calendar.get(Calendar.DAY_OF_MON
10、TH); calendar.set(Calendar.DAY_OF_MONTH, 1); calendar.set(Calendar.YEAR, (Integer) yearsSpinner.getValue().intValue(); int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); calendar.set(Calendar.DAY_OF_MONTH, day maxDay ? maxDay : day); updateView(); /更新显示 ); /- monthsComboBox = new JComboB
11、ox(); /月份下拉框 monthsLabel = new JLabel(月 ); /设置月份标签显示 for (int i = 1; i maxDay ? maxDay : day); updateView();/更新面板显示 ); /- InfoLabel=new JLabel(当前时区:中国标准时间); JPanel yearMonthPanel = new JPanel(); /定义年月面板 MainPanel.add(yearMonthPanel, BorderLayout.NORTH);/添加年月面板到日历面板的南面(最上方) MainPanel.add(InfoLabel, B
12、orderLayout.SOUTH); yearMonthPanel.setLayout(new BorderLayout();/边布局模式 JPanel yearPanel = new JPanel(); /构建年份面板 yearMonthPanel.add(yearPanel, BorderLayout.WEST);/年份面板添加到年月面板西部(左边) yearPanel.setLayout(new BorderLayout();/设置年份面板为边布局并添加年份标签和组合框 yearPanel.add(yearsLabel, BorderLayout.EAST); yearPanel.ad
13、d(yearsSpinner, BorderLayout.CENTER); /- JPanel monthPanel = new JPanel();/定义月份面板 yearMonthPanel.add(monthPanel, BorderLayout.EAST);/添加月份面板到年月面板的东面(右边) monthPanel.setLayout(new BorderLayout();/月份面板设为边布局方式 monthPanel.add(monthsLabel, BorderLayout.EAST);/添加月份名称标签到月份面板西面(左边) monthPanel.add(monthsComboB
14、ox, BorderLayout.CENTER);/添加月份下拉框到月份面板中间 /- JPanel txetPanel = new JPanel();/定义标题文本显示面板 yearMonthPanel.add(txetPanel,BorderLayout.CENTER);/添加标题文本显示面板到年月面板中间 daysModel = new AbstractTableModel() /设置7行7列 public int getRowCount() return 7; public int getColumnCount() return 7; public Object getValueAt(
15、int row, int column) if (row = 0) /第一行显示星期 return getHeader(column); row-; Calendar calendar = (Calendar) rili.this.calendar.clone(); calendar.set(Calendar.DAY_OF_MONTH, 1); int dayCount = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); int moreDayCount = calendar.get(Calendar.DAY_OF_WEEK) - 1; in
16、t index = row * 7 + column; int dayIndex = index - moreDayCount + 1; if (index dayCount) return null; else return new Integer(dayIndex); ; daysTable = new CalendarTable(daysModel, calendar); /构造日表格 daysTable.setCellSelectionEnabled(true);/设置表格单元格可选择 daysTable.setSelectionMode(ListSelectionModel.SING
17、LE_SELECTION); daysTable.setDefaultRenderer(daysTable.getColumnClass(0), new TableCellRenderer() public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) String text = (value = null) ? : value.toString(); JLabel cell = new
18、JLabel(text); cell.setOpaque(true); /绘制边界内的所有像素 if (row = 0) /第一行显示星期,设置为星期的前景色和背景色 cell.setForeground(headerForeground); cell.setBackground(headerBackground); else if (isSelected) /日期单元格如果选中,则设置为日期选中的前、背景色 cell.setForeground(selectedForeground); cell.setBackground(selectedBackground); else /设置日期单元格
19、的普通前、背景色 cell.setForeground(foreground); cell.setBackground(background); return cell; ); updateView(); MainPanel.add(daysTable, BorderLayout.CENTER);/添加日面板到日历面板中间 /- public static String getHeader(int index) /设置第一行星期的显示 switch (index) case 0: return WeekSun; case 1: return WeekMon; case 2: return We
20、ekTue; case 3: return WeekWed; case 4: return WeekThu; case 5: return WeekFri; case 6: return WeekSat; default: return null; public void updateView() /更新面板显示方法 daysModel.fireTableDataChanged();daysTable.setRowSelectionInterval(calendar.get(Calendar.WEEK_OF_MONTH), calendar.get(Calendar.WEEK_OF_MONTH
21、);daysTable.setColumnSelectionInterval(calendar.get(Calendar.DAY_OF_WEEK) - 1,calendar.get(Calendar.DAY_OF_WEEK) - 1); public static class CalendarTable extends JTable /表格类 private Calendar calendar; public CalendarTable(TableModel model, Calendar calendar) /构造方法 super(model); this.calendar = calend
22、ar; public void changeSelection(int row, int column, boolean toggle, boolean extend) /选择表格单元格时 super.changeSelection(row, column, toggle, extend); if (row = 0) /选择为第一行(星期)时不改变单元格 return; Object obj = getValueAt(row, column); if (obj != null) calendar.set(Calendar.DAY_OF_MONTH, (Integer)obj).intValue
23、(); 文件名:Clock.javaimport java.awt.*; import javax.swing.*; import java.util.*; import java.text.*; public class Clock extends JPanel implements Runnable private JLabel jl; private DateFormat df; public Clock() jl=new JLabel(); jl.setHorizontalAlignment(JLabel.CENTER); df=DateFormat.getDateTimeInstan
24、ce(); new Thread(this).start(); this.setLayout(new BorderLayout(); this.add(jl,BorderLayout.SOUTH); public void run() while(true) try Thread.sleep(1000); catch(InterruptedException ie) ie.printStackTrace(); jl.setText(df.format(new Date(); repaint(); public void paintComponent(Graphics g) super.pain
25、tComponent(g); Calendar cal=Calendar.getInstance(); /得到当前的时间信息 int hour=cal.get(Calendar.HOUR); int minute=cal.get(Calendar.MINUTE); int second=cal.get(Calendar.SECOND); /得到当前的面板的大小信息 int width=this.getWidth(); int height=this.getHeight(); /钟的那个圆盘取两个之中小的那个 int small=widthheight?width:height; int dia
26、meter=(int)(small*0.8); int radius=diameter/2; /确定中心点 Point center=new Point(width/2,height/2); /确定时针,分钟,秒针的长度 int secondLength=(int)(radius*0.8); int minuteLength=(int)(secondLength*0.8); int hourLength=(int)(minuteLength*0.8); /确定时针,分针,秒针的另一端坐标 int secondX=center.x+(int)(secondLength*Math.sin(seco
27、nd*2*Math.PI/60.0); int secondY=center.y-(int)(secondLength*Math.cos(second*2*Math.PI/60.0); int minuteX=center.x+(int)(minuteLength*Math.sin(minute*2*Math.PI/60.0); int minuteY=center.y-(int)(minuteLength*Math.cos(minute*2*Math.PI/60.0); int hourX=center.x+(int)(hourLength*Math.sin(minute/60.0+hour)*Math.PI/6.0); int hourY=center.y-(int)(hourLength*Math.cos(minute/60.0+hour)*Math.PI/6.0); Graphics2D g2d=(Graphics2D)g; /画表盘和刻度 g.drawOval(center.x-radius,center.y-radius,dia
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1