直接上代码~实现万年历的小程序,打开默认为系统时间,添加了输入异常。
代码:
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();
}
});
}
}
运行:
总结;界面布局比较麻烦,日期类真好用。。