java万年历

这篇博客分享了一段Java代码,用于创建一个显示万年历的小程序。程序默认展示系统当前时间,并具备异常输入处理功能。作者提到在界面布局上遇到挑战,但赞赏了Java日期类的易用性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

直接上代码~实现万年历的小程序,打开默认为系统时间,添加了输入异常。

代码:

package java实验十;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

import javax.swing.*;
public class calendar extends JFrame implements ActionListener{
	private JButton wen,fort,next,queding;//按钮
	private JLabel rili;
	private JLabel zhong;
	private JTextField nian,yue1;
	private JLabel date[]=new JLabel[42];
	private int dates[]=null;
	SimpleDateFormat df = new SimpleDateFormat("yyyy");  //获得系统当前时间
	SimpleDateFormat df1 = new SimpleDateFormat("MM");
	SimpleDateFormat df2 = new SimpleDateFormat("dd");
	int year = Integer.parseInt(df.format(new Date())); 
	int month = Integer.parseInt(df1.format(new Date()));
	int day = Integer.parseInt(df2.format(new Date()));

	
	Calendar now = Calendar.getInstance();
	public calendar() {
		System.err.println("当前月份"+month);
		setTitle("05林-万年历");
		setSize(400,350);         //jframe设置基本属性
		dates=new int [42];		
		now.clear();
		now.set(year,month-1,1);
			    
		for(int i1=now.get(Calendar.DAY_OF_WEEK)-1,d=1;d<=now.getActualMaximum(Calendar.DAY_OF_MONTH);d++,i1++)       //获取日期数组
		{
		dates[i1]=d;
	
		}

		
		JPanel j1=new JPanel();//新建中间容器
		JPanel j2=new JPanel();
		JPanel j3=new JPanel();
		j2.setLayout(new GridLayout(7, 7));  //设置中间流式布局
				
		j1.add(fort=new JButton("上月"));
		j1.add(rili=new JLabel("当前年月:"+year+"年"+month+"月"));
		j1.add(next=new JButton("下月"));
		fort.addActionListener(this);               //注册监听器
		next.addActionListener(this);               //注册监听器
		add(j1,BorderLayout.PAGE_START);	
		
		j2.add(wen=new JButton("日"));
		j2.add(wen=new JButton("一"));
		j2.add(wen=new JButton("二"));
		j2.add(wen=new JButton("三"));
		j2.add(wen=new JButton("四"));
		j2.add(wen=new JButton("五"));
		j2.add(wen=new JButton("六"));
		for(int i=0;i<42;i++) {
			String n=String.valueOf(String.valueOf(dates[i]));     //添加日历显示框
			if(dates[i]==0) {
				j2.add(date[i]=new JLabel("",JLabel.CENTER));continue;
				}
			j2.add(date[i]=new JLabel(n,JLabel.CENTER));		
		}
		add(j2,BorderLayout.CENTER);
		
		//////////////////查询功能
		j3.add(zhong=new JLabel("查询:"));
		j3.add(nian=new JTextField(6));		
		j3.add(zhong=new JLabel("年"));
		j3.add(yue1=new JTextField(6));
		j3.add(zhong=new JLabel("月"));
		j3.add(queding=new JButton("确定"));
		queding.addActionListener(this);
		//////////////
		add(j3,BorderLayout.PAGE_END);
		setLocationRelativeTo(null);		
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setVisible(true);
	}
	
	
	
	public void actionPerformed(ActionEvent e) {            //设置执行事件
		if(e.getSource()==fort) {
			shang();		
		}
		if(e.getSource()==next) {
			xia();		
		}
		if(e.getSource()==queding) {
			caxun();		
		}
	}
	
	
	private void caxun() {              //查询功能
		String y=nian.getText();			
		try{year = Integer.parseInt(y);}
		catch(NumberFormatException e) {JOptionPane.showConfirmDialog(null, "输入年份不正确 " ,"查找结果",JOptionPane.CANCEL_OPTION); }
		//year = Integer.parseInt(y);                 //用户输入异常判断
		String m=yue1.getText();
		try{ month = Integer.parseInt(m);}
		catch(NumberFormatException e) {JOptionPane.showConfirmDialog(null, "输入月份不正确 " ,"查找结果",JOptionPane.CANCEL_OPTION); }		
		//month = Integer.parseInt(m);
		
		
		// year = Integer.parseInt(y);          //设置选定的日期
		// month = Integer.parseInt(m);
		 
		if (month>12||month<1) {
			JOptionPane.showConfirmDialog(null, "输入月份不正确 " ,"查找结果",JOptionPane.CANCEL_OPTION);						
		}
		else{		
		now.clear();
		now.set(year,month-1,1);              
		System.err.println("当前月份"+month);
		for(int a=0;a<42;a++)                 //更改日期数组
		date[a].setText("");			
		for(int i1=now.get(Calendar.DAY_OF_WEEK)-1,d=1;d<=now.getActualMaximum(Calendar.DAY_OF_MONTH);d++,i1++)                                  //处理代码
		{				
		dates[i1]=d;		
		String n;				
		date[i1].setText(n=String.valueOf(String.valueOf(dates[i1])));//数组写进显示框
		};
		rili.setText("当前年月:"+year+"年"+month+"月");
		
		}
	}



	private void shang() {
		month--;
		if(month==0) {month=12;year--;}
		now.clear();
		now.set(year,month-1,1);
		System.err.println("当前年月月份"+month);
		for(int a=0;a<42;a++)
		date[a].setText("");	
		
		for(int i1=now.get(Calendar.DAY_OF_WEEK)-1,d=1;d<=now.getActualMaximum(Calendar.DAY_OF_MONTH);d++,i1++)                                  //下个月处理代码
		{				
		dates[i1]=d;		
		String n;				
		date[i1].setText(n=String.valueOf(String.valueOf(dates[i1])));
		};
		rili.setText("当前年月:"+year+"年"+month+"月");
	}
	private void xia() {
		month++;
		if(month==13) {month=1;year++;}
		now.clear();
		now.set(year,month-1,1);
		System.err.println("当前月份"+month);
		for(int a=0;a<42;a++)
		date[a].setText("");	
		
		for(int i1=now.get(Calendar.DAY_OF_WEEK)-1,d=1;d<=now.getActualMaximum(Calendar.DAY_OF_MONTH);d++,i1++)                                  //上个月处理代码
		{				
		dates[i1]=d;		
		String n;				
		date[i1].setText(n=String.valueOf(String.valueOf(dates[i1])));
		};
		rili.setText("当前年月:"+year+"年"+month+"月");
	}



	public static void main(String[] args) {
		try {
			UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());		
		}	catch(Exception e) {}
			SwingUtilities.invokeLater(new Runnable() {
				public void run() {
					new calendar();
				}
				});
		}
}

运行:



总结;界面布局比较麻烦,日期类真好用。。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值