Java模仿实现Windows时钟日历
来源:互联网 发布:java项目视频教程 编辑:程序博客网 时间:2024/06/02 00:27
Java课程设计要求实现windows日历,所以简单做了下
完整复制可以直接运行,但可能有bug,懒得搞了,直接上截图和代码。
时钟画的有点丑,不要在意这些嘛。
win7下的时钟日历:
实现的界面:
完整代码:
package design;import java.awt.Button;import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.GridLayout;import java.awt.Label;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.JSplitPane;public class MyCalendar extends JFrame{ Thread timer=null;//更新UI的线程,每一秒钟重绘一次时钟 public MyCalendar() { setTitle("简易时钟日历"); setSize(400,250); setLocationRelativeTo(null); setDefaultCloseOperation(EXIT_ON_CLOSE); setResizable(false); JSplitPane splitPane=new JSplitPane();//将Jframe分割成左右两部分,左边实现日历,右边实现时钟 splitPane.setBackground(Color.orange); splitPane.setDividerLocation(250); splitPane.setDividerSize(-1); ClockPanel clockPanel=new ClockPanel();//右侧面板的时钟 CalendarPanel calendarPanel=new CalendarPanel(this);//左侧面板的日历 splitPane.setRightComponent(clockPanel); splitPane.setLeftComponent(calendarPanel); add(splitPane); setVisible(true); new Thread(clockPanel).start(); } public static void main(String[] args) { new MyCalendar(); }}/** * JFrame左侧面板实现日历功能 * 基本实现了与win7下日历相同的功能 * @author Baratta */class CalendarPanel extends JPanel implements ActionListener{ JPanel selectPanel;//主面板上方三个按钮,分别为月份减少按钮,选择月份、年份按钮,月份增加按钮 JPanel showPanel;//该面板有三种显示状态,一种即显示日历,一种显示选择月份,一种显示选择年份 JPanel weekdayPanel;//该面板被添加打showPanel,显示静态文本周一到周日 JPanel calshowPanel;//该面板被添加到shouPannel,显示一个月中的每天 JPanel selectmonth;//该面板被添加到showPanel,显示选择月份的按钮 JPanel selectyear;//该面板被添加到shouPanel,显示选择年份的按钮 JButton btleft; JButton btright; JButton btmid; Button btday[]=new Button[42]; Button btmonth[]=new Button[12]; Button btyear[]=new Button[12]; Calendar curcalendar;//记录当前日历上显示的日期 JFrame jFrame;//存储Parent的JFrame,用于调用其setVisible更新界面(由于未实现paint函数,所以用此函数可以更新) public CalendarPanel(JFrame jFrame) { this.jFrame=jFrame; setLayout(null); setBackground(new Color(186, 231, 241)); selectPanel =new JPanel(null); selectPanel.setBackground(Color.darkGray); selectPanel.setBounds(0, 0, 250, 35); btleft=new JButton("<"); btleft.setBounds(20, 5, 45, 25); btleft.addActionListener(this); selectPanel.add(btleft); btmid=new JButton(" "); btmid.setBounds(70,5,120,25); btmid.addActionListener(this); selectPanel.add(btmid); btright=new JButton(">"); btright.setBounds(195, 5, 45, 25); btright.addActionListener(this); selectPanel.add(btright); add(selectPanel); weekdayPanel=new JPanel(); weekdayPanel.setBounds(0, 35, 250, 30); weekdayPanel.setBackground(Color.gray); weekdayPanel.setLayout(new GridLayout(1,7)); weekdayPanel.add(new Label("日")); weekdayPanel.add(new Label("一")); weekdayPanel.add(new Label("二")); weekdayPanel.add(new Label("三")); weekdayPanel.add(new Label("四")); weekdayPanel.add(new Label("五")); weekdayPanel.add(new Label("六")); calshowPanel=new JPanel(); calshowPanel.setBounds(0, 65, 250, 155); calshowPanel.setLayout(new GridLayout(6, 7)); for(int i=0;i<42;i++){ btday[i]=new Button(""); btday[i].addActionListener(this); } curcalendar=Calendar.getInstance(); int monthday=curcalendar.get(Calendar.DAY_OF_MONTH); int weekday=curcalendar.get(Calendar.DAY_OF_WEEK); int startcol=7-(monthday-weekday)%7; if(startcol==0) startcol=7; Calendar lastcalendar=(Calendar) curcalendar.clone(); lastcalendar.set(Calendar.DAY_OF_MONTH, 1); lastcalendar.add(Calendar.DAY_OF_MONTH, -startcol); int tablestart=lastcalendar.get(Calendar.DAY_OF_MONTH); String midbt_lab=curcalendar.get(Calendar.YEAR)+"年"+(curcalendar.get(Calendar.MONTH)+1)+"月"; btmid.setText(midbt_lab); int k=0; for(int i=0;i<startcol;i++){ btday[k].setForeground(Color.gray); btday[k].setLabel((tablestart++)+""); calshowPanel.add(btday[k++]); } for(int i=1;i<=curcalendar.getActualMaximum(Calendar.DAY_OF_MONTH);i++){ btday[k].setForeground(Color.black); btday[k].setLabel(i+""); calshowPanel.add(btday[k++]); } for(int i=1;i<=42-startcol-curcalendar.getActualMaximum(Calendar.DAY_OF_MONTH);i++){ btday[k].setForeground(Color.gray); btday[k].setLabel(i+""); calshowPanel.add(btday[k++]); } showPanel=new JPanel(null); showPanel.setBounds(0,0,250,220); showPanel.add(weekdayPanel); showPanel.add(calshowPanel); add(showPanel); selectmonth=new JPanel(new GridLayout(3, 4)); selectmonth.setBounds(0, 35, 250, 185); for(int i=0;i<12;i++){ btmonth[i]=new Button((i+1)+"月"); btmonth[i].addActionListener(this); selectmonth.add(btmonth[i] ); } selectyear=new JPanel(new GridLayout(3, 4)); selectyear.setBounds(0,35,250,185); for(int i=0;i<12;i++){ btyear[i]=new Button((curcalendar.get(Calendar.YEAR)-6+i)+""); btyear[i].addActionListener(this); selectyear.add(btyear[i] ); } } public void updatebtday(){ int monthday=curcalendar.get(Calendar.DAY_OF_MONTH); int weekday=curcalendar.get(Calendar.DAY_OF_WEEK); int startcol=7-(monthday-weekday)%7; if(startcol==0) startcol=7; Calendar lastcalendar=(Calendar) curcalendar.clone(); lastcalendar.set(Calendar.DAY_OF_MONTH, 1); lastcalendar.add(Calendar.DAY_OF_MONTH, -startcol); int tablestart=lastcalendar.get(Calendar.DAY_OF_MONTH); String midbt_lab=curcalendar.get(Calendar.YEAR)+"年"+(curcalendar.get(Calendar.MONTH)+1)+"月"; btmid.setText(midbt_lab); int k=0; for(int i=0;i<startcol;i++){ btday[k].setForeground(Color.gray); btday[k++].setLabel((tablestart++)+""); } for(int i=1;i<=curcalendar.getActualMaximum(Calendar.DAY_OF_MONTH);i++){ btday[k].setForeground(Color.black); btday[k++].setLabel(i+""); } for(int i=1;i<=42-startcol-curcalendar.getActualMaximum(Calendar.DAY_OF_MONTH);i++){ btday[k].setForeground(Color.gray); btday[k++].setLabel(i+""); } } @Override public void actionPerformed(ActionEvent e) { if(e.getSource()==btmid){ JPanel getpanel=(JPanel) showPanel.getComponent(0); if(getpanel==weekdayPanel){ btmid.setText(curcalendar.get(Calendar.YEAR)+""); showPanel.removeAll(); showPanel.add(selectmonth); }else if(getpanel==selectmonth){ showPanel.removeAll(); showPanel.add(selectyear); btmid.setText((curcalendar.get(Calendar.YEAR)-6)+"-"+(curcalendar.get(Calendar.YEAR)+5)); } jFrame.setVisible(true); }else if(e.getSource()==btleft){ JPanel getpanel=(JPanel) showPanel.getComponent(0); if(getpanel==weekdayPanel){ int month1=curcalendar.get(Calendar.MONTH); curcalendar.set(Calendar.MONTH, month1-1); updatebtday(); }else if(getpanel==selectmonth){ int year=curcalendar.get(Calendar.YEAR); curcalendar.set(Calendar.YEAR, year-1); btmid.setText(curcalendar.get(Calendar.YEAR)+""); }else{ String str=btyear[0].getLabel(); int first=Integer.parseInt(str); for(int i=11;i>=0;i--){ btyear[i].setLabel((--first)+""); } btmid.setText(first+"-"+(first+11)); } }else if(e.getSource()==btright){ JPanel getpanel=(JPanel) showPanel.getComponent(0); if(getpanel==weekdayPanel){ int month1=curcalendar.get(Calendar.MONTH); curcalendar.set(Calendar.MONTH, month1+1); updatebtday(); }else if(getpanel==selectmonth){ int year=curcalendar.get(Calendar.YEAR); curcalendar.set(Calendar.YEAR, year+1); btmid.setText(curcalendar.get(Calendar.YEAR)+""); }else{ String str=btyear[11].getLabel(); int last=Integer.parseInt(str); for(int i=0;i<12;i++){ btyear[i].setLabel((++last)+""); } btmid.setText((last-11)+"-"+last); } }else if(((Button) e.getSource()).getForeground()==Color.gray ){ String command=e.getActionCommand(); int com_int=Integer.parseInt(command); if(com_int>20){ int month3=curcalendar.get(Calendar.MONTH); curcalendar.set(Calendar.MONTH, month3-1); }else if( com_int<20){ int month4=curcalendar.get(Calendar.MONTH); curcalendar.set(Calendar.MONTH, month4+1); } updatebtday(); }else if(((Button)e.getSource()).getForeground()==Color.black){ }else { switch(e.getActionCommand()){ case "1月": curcalendar.set(Calendar.MONTH,0); break; case "2月": curcalendar.set(Calendar.MONTH,1); break; case "3月": curcalendar.set(Calendar.MONTH,2); break; case "4月": curcalendar.set(Calendar.MONTH,3); break; case "5月": curcalendar.set(Calendar.MONTH,4); break; case "6月": curcalendar.set(Calendar.MONTH,5); break; case "7月": curcalendar.set(Calendar.MONTH,6); break; case "8月": curcalendar.set(Calendar.MONTH,7); break; case "9月": curcalendar.set(Calendar.MONTH,8); break; case "10月": curcalendar.set(Calendar.MONTH,9); break; case "11月": curcalendar.set(Calendar.MONTH,10); break; case "12月": curcalendar.set(Calendar.MONTH,11); break; default: String string=e.getActionCommand(); int year=Integer.parseInt(string); curcalendar.set(Calendar.YEAR, year); btmid.setText(curcalendar.get(Calendar.YEAR)+""); showPanel.removeAll(); showPanel.add(selectmonth); return; }//switch showPanel.removeAll(); updatebtday(); showPanel.add(weekdayPanel); showPanel.add(calshowPanel); jFrame.setVisible(true); } }}class ClockPanel extends JPanel implements Runnable{ int lastxs=50, lastys=30, lastxm=50, lastym=30, lastxh=50, lastyh=30; Label cur_day; Label cur_clock; Label cur_week; public ClockPanel() { setLayout(null); setBackground(Color.white); cur_day=new Label(""); cur_day.setBounds(40, 5, 67, 20); cur_day.setBackground(new Color(186, 231, 241)); add(cur_day); cur_clock=new Label(""); cur_clock.setBounds(50, 160, 55, 20); cur_clock.setBackground(new Color(186, 231, 241)); add(cur_clock); cur_week=new Label(""); cur_week.setBounds(56, 180, 40, 20); cur_week.setBackground(new Color(186, 231, 241)); add(cur_week); } @Override public void paint(Graphics g) { g.setColor(new Color(186, 231, 241)); g.fillRect(0, 0, 150, 250); int xh, yh, xm, ym, xs, ys, s, m, h, xcenter, ycenter; Date currenttime = new Date(); //获取当前日期和时间 s = currenttime.getSeconds(); m = currenttime.getMinutes(); h = currenttime.getHours(); SimpleDateFormat formatter_day= new SimpleDateFormat("yyyy-MM-dd"); SimpleDateFormat formatter_clock = new SimpleDateFormat("HH:mm:ss"); SimpleDateFormat formatter_week = new SimpleDateFormat("EEEE"); cur_day.setText(formatter_day.format(currenttime)); cur_clock.setText(formatter_clock.format(currenttime)); cur_week.setText(formatter_week.format(currenttime)); xcenter=75; ycenter=90; //图形钟的原点 //以下计算秒针、分针、时针位置 xs = (int)(Math.cos(s * 3.14f/30 - 3.14f/2) * 45 + xcenter); ys = (int)(Math.sin(s * 3.14f/30 - 3.14f/2) * 45 + ycenter); xm = (int)(Math.cos(m * 3.14f/30 - 3.14f/2) * 40 + xcenter); ym = (int)(Math.sin(m * 3.14f/30 - 3.14f/2) * 40 + ycenter); xh = (int)(Math.cos((h*30+m/2)*3.14f/180-3.14f/2)*30+xcenter); yh = (int)(Math.sin((h*30+m/2)*3.14f/180-3.14f/2)*30+ycenter); g.setFont(new Font("TimesRoman", Font.PLAIN, 14)); g.setColor(Color.lightGray); //设置表盘颜色 g.fillOval(xcenter-60, ycenter-58, 120, 120); g.setColor(Color.darkGray); //设置表盘数字颜色 g.drawString("9",xcenter-53,ycenter+5); //画表盘上的数字 g.drawString("3",xcenter+45,ycenter+5); g.drawString("12",xcenter-8,ycenter-41); g.drawString("6",xcenter-3,ycenter+55); g.setColor(Color.gray); //使用红色画新指针 g.drawLine(xcenter, ycenter, xs, ys); g.drawLine(xcenter, ycenter-2, xm, ym); g.drawLine(xcenter-2, ycenter, xm, ym); g.drawLine(xcenter, ycenter-2, xh, yh); g.drawLine(xcenter-2, ycenter, xh, yh); lastxs=xs; lastys=ys; //保存指针位置 lastxm=xm; lastym=ym; lastxh=xh; lastyh=yh; } @Override public void run() { while (true) { try { Thread.sleep(1000); }catch (InterruptedException e) {} repaint(); } }}
阅读全文
0 0
- Java模仿实现Windows时钟日历
- Java实现模仿登陆
- Java批量重命名模仿windows
- Java模仿Kugou,实现歌词秀
- Java模仿Struts2模型驱动的实现
- javascript 模仿windows拖动
- 模仿android_debug_JNITest实现apk 调用framework java JNI中方法
- java 数组实现迭代方法 iterator,模仿Arraylist
- js模仿java的Map集合,实现功能
- java实现 swing模仿金山打字 案例源码
- js模仿java的Map集合,实现功能
- java Swing模仿百度搜索功能的实现
- java 模仿网络请求 实现手机发送短信
- 使用javascript和java模仿实现事件回调机制
- 桌面时钟日历 程序设计
- 时钟日历的制作
- 模仿windows图片浏览器(续)
- 模仿windows计算器-无菜单
- VMware12下Linux网络配置
- Windows程序运行原理
- dos命令提示符
- Hive On Spark报错:Failed to execute spark task, org.apache.hadoop.hive.ql.metadata.HiveException
- 顺序栈-数组实现
- Java模仿实现Windows时钟日历
- Tensorflow_GPU
- MAC安装配置Tornado
- JavaScript客户端检测
- app:transformClassesWithDexForDebug错误记录
- Android Studio运行或Rebuild的时候报Error:Execution failed for task ':app:compileDebugNdk'.的解决办法
- 对字符编码的一些理解
- 数字签名(代码签名)流程和数字签名的验证
- 目录