⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wannianli.java

📁 这是一个万年历可以查询农历和新历的对照还有节气的对照
💻 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 + -