📄 wannianli.java
字号:
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.util.*;
import java.lang.*;
import java.text.SimpleDateFormat;
public class WanNianLi
{
public static void main(String ag[])
{
JFrame frame = new WNLframe();
}
}
class WNLframe extends JFrame
{
JMenuBar menuBar ;
JMenu FileMenu,
HelpMenu;
JMenuItem FindItem,
TimeItem,
ExitItem,
UseItem,
AuthorItem;
JPanel panel1 = new JPanel(),
panel2 = new JPanel(),
panel3 = new JPanel();
JLabel YearLabel = new JLabel("年份 :",JLabel.CENTER),
MonthLabel = new JLabel("月份 :",JLabel.CENTER),
DayLabel = new JLabel("日 :",JLabel.CENTER),
TimeLabel = new JLabel();
JTextField YearText = new JTextField(),
MonthText = new JTextField(),
DayText = new JTextField();
JLabel []WeekLabel = new JLabel[7] ;
JLabel []TianLabel = new JLabel[37];
Calendar calendar1 = Calendar.getInstance();
private int Year,
Month,
Day1, // 1 号
Day2, //新得到的要查的号
Start, //每个月的第一天是周几
End; //一个月的天数
javax.swing.Timer NowTime;
public WNLframe() //构造函数
{
super("万年历");
int width,
height;
this.setSize(350,400);
this.setResizable(false);
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
width = this.getWidth();
height = this.getHeight();
this.setLocation((d.width-width)/2,(d.height-height)/2);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
calendar1.setTime(calendar1.getTime());
Year = calendar1.get(calendar1.YEAR) ; //2007; //变量初始化
Month = calendar1.get(calendar1.MONDAY)+1;// 5;
Day1 = 1;
Start = 2;
YearText.setText(String.valueOf(Year)); //时刻为 当前的日期
MonthText.setText(String.valueOf(Month));
DayText.setText(String.valueOf(calendar1.get(calendar1.DAY_OF_MONTH)));
ActionListener ItemClick = new Click();
NowTime = new javax.swing.Timer(1000,ItemClick);
TimeLabel.setVisible(false);
menuBar = new JMenuBar(); //菜单栏
FileMenu = new JMenu("文件");
HelpMenu = new JMenu("帮助");
FindItem = new JMenuItem("查找");
FindItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F3,0));
TimeItem = new JCheckBoxMenuItem("时间");
TimeItem.setAccelerator(KeyStroke.getKeyStroke('T',Event.CTRL_MASK,false));
ExitItem = new JMenuItem("退出");
ExitItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE,0));
UseItem = new JMenuItem("使用");
UseItem.setAccelerator(KeyStroke.getKeyStroke('U',Event.CTRL_MASK,false));
AuthorItem = new JMenuItem("介绍");
AuthorItem.setAccelerator(KeyStroke.getKeyStroke('W',Event.CTRL_MASK,false));
menuBar.add(FileMenu);
menuBar.add(HelpMenu);
FileMenu.add(FindItem);
FileMenu.add(TimeItem);
FileMenu.addSeparator();
FileMenu.add(ExitItem);
HelpMenu.add(UseItem);
HelpMenu.add(AuthorItem);
panel1.setLayout(new GridLayout(1,6)); //面板一
panel1.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
panel1.add(YearLabel);
panel1.add(YearText);
panel1.add(MonthLabel);
panel1.add(MonthText);
panel1.add(DayLabel);
panel1.add(DayText);
panel2.setLayout(new GridLayout(7,7,1,1)); //面板二
panel2.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
for(int i=0;i<WeekLabel.length;i++)
{
int m;
m = (int)(Math.random()*225);
if(m>195)
m=193;
WeekLabel[i] = new JLabel("",JLabel.CENTER);
WeekLabel[i].setForeground(new Color(m+13,m+5,m+29)); //设置自动选色
panel2.add(WeekLabel[i]);
}
WeekLabel[0].setText("周日");
WeekLabel[1].setText("周一");
WeekLabel[2].setText("周二");
WeekLabel[3].setText("周三");
WeekLabel[4].setText("周四");
WeekLabel[5].setText("周五");
WeekLabel[6].setText("周六");
for(int i=0;i<TianLabel.length;i++)
{
TianLabel[i] = new JLabel("",JLabel.CENTER);
panel2.add(TianLabel[i]);
}
TimeLabel.setBorder(BorderFactory.createBevelBorder(0)); //设定边框
panel3.add(TimeLabel);
TimeLabel.setText("shijian");
this.setJMenuBar(menuBar);
this.getContentPane().add(panel1,BorderLayout.NORTH);
this.getContentPane().add(panel2,BorderLayout.CENTER);
this.getContentPane().add(panel3,BorderLayout.SOUTH);
//注册
FindItem.addActionListener(ItemClick);
TimeItem.addActionListener(ItemClick);
ExitItem.addActionListener(ItemClick);
UseItem.addActionListener(ItemClick);
AuthorItem.addActionListener(ItemClick);
getTime() ; // 显示当天
this.setVisible(true);
}
class Click implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
Date now = new Date();
SimpleDateFormat format = new SimpleDateFormat("'Time :'HH : mm : ss");
TimeLabel.setForeground(new Color((int)(Math.random()*255),(int)(Math.random()*255),(int)(Math.random()*255)));
TimeLabel.setText(String.valueOf(format.format(now)));
Object Source = e.getSource();
if(Source == FindItem)
{
getTime();
}
if( TimeItem.isSelected())
{
NowTime.start();
TimeLabel.setVisible(true);
}
else
{
NowTime.stop();
TimeLabel.setVisible(false);
}
if(Source == ExitItem)
{
dispose();
}
if(Source == AuthorItem)
{
JDialog haha = new AuthorDialog(WNLframe.this,"作者简介",true);
}
if(Source == UseItem)
{
final String msg ;
msg = " 可以查询上下一千年的日历\n"+
" 请根据菜单提供的热键使用\n"+
" 两边的号码颜色各异\n"+
" 要查询的号用黄色指示\n";
JOptionPane.showMessageDialog(WNLframe.this,msg,"System",JOptionPane.INFORMATION_MESSAGE);
}
}
}
public void getTime() //获取要查的年月日
{
boolean Sucess = false ;
try
{
Year = Integer.parseInt(YearText.getText());
Month = Integer.parseInt(MonthText.getText());
Day2 = Integer.parseInt(DayText.getText());
Sucess = true;
}catch( NumberFormatException e)
{
JOptionPane.showMessageDialog(null,"请输入数字","System",JOptionPane.ERROR_MESSAGE);
YearText.setText("");
MonthText.setText("");
DayText.setText("");
}
if(Month<=0 || Month >12)
Sucess = false ;
if(Sucess)
setStartAndEnd();
}
public void setStartAndEnd() //设定显示 TianLabel的开始及结束标志
{
switch(Month) //设置月的天数
{
case 1 :
case 3 :
case 5 :
case 7 :
case 8 :
case 10:
case 12:End = 31;break;
case 2 : { //闰年的判断 :year1%4==0&&year1%100!=0||year1%400==0
if(Year%4==0&&Year%100!=0||Year%400==0)
End = 29; //闰年
else
End = 28;
break;
}
default:End = 30;
}
Calendar calendar = Calendar.getInstance();
calendar.set(Year,Month-1,1);
Start = calendar.get(calendar.DAY_OF_WEEK);
if(Day2>End)
JOptionPane.showMessageDialog(null,"本月无此号","System",JOptionPane.INFORMATION_MESSAGE);
else
display();
}
public void display() //显示TianLabel的内容
{
for(int i=0;i<37;i++) //此循环为查看n次而设置
{
TianLabel[i].setText("") ;
TianLabel[i].setForeground(Color.BLACK);
TianLabel[i].setToolTipText("");
}
TianLabel[0].setText("*");
for(int i=0;i<End;i++)
{
TianLabel[i+Start-1].setText(String.valueOf(i+1)) ;
if((i+1)%7==0)
TianLabel[i].setForeground(Color.BLUE);
else if((i+1)%7==1)
TianLabel[i].setForeground(Color.RED);
}
for(int i=0;i<End;i++) //此循环中的内容若放到上面循环中时,当号为两侧的时不为黄色
{
if(TianLabel[i+Start-1].getText().equals(String.valueOf(Day2)))
{
TianLabel[i+Start-1].setForeground(Color.yellow);
TianLabel[i+Start-1].setBackground(Color.WHITE); //不起作用
TianLabel[i+Start-1].setToolTipText("^_^");
}
}
}
}
/*1 ,设置热键的核心代码
*
*Delete:
* setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE,0));
*Ctr + X:
* setAccelerator(KeyStroke.getKeyStroke('X',Event.CTRL_MASK,false));
*Alt + O:
* setMnemonic('O');
*
*
*2 ,Month.random()
* 返回的是double型的数值
*
*3 ,calendar1.MONTH 必须配合着get()方法使用;
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -