一、引言
在前一篇文章我i已经提到了,转到研发部门以后,经理让我做一个万年历和时钟。
时钟文章的链接在这里:http://175.178.240.130:70/?p=5
下面将给大家分享,万年历的程序代码
二、正文
项目结构如图所示:
package Calendar;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.util.Calendar;
public class PerCalendar {
public static void menu(JFrame jf,String ss,int year,int month,int day){
if(month>=1&&month<=12){
}else{
month=12;
}
//获取当前的窗口主体
Container ctainer=jf.getContentPane();
//采用流式布局
ctainer.setLayout(new FlowLayout());
//设置‘年’字
JLabel field_year=new JLabel("年");
//设置与之对应的输入框
JTextField field1=new JTextField();
//限制输入的位数
field1.setColumns(4);
//设置‘月’字
JLabel field_month=new JLabel("月");
//设置与之对应的输入框
JTextField field2=new JTextField();
//限制输入的位数
field2.setColumns(2);
//设置‘日’字
JLabel field_day=new JLabel("日");
//设置与之对应的输入框
JTextField field3=new JTextField();
//限制输入的位数
field3.setColumns(2);
//设置一个跳转按钮
JButton button=new JButton("跳转");
//将以上组件装进窗口中
ctainer.add(field1);
ctainer.add(field_year);
ctainer.add(field2);
ctainer.add(field_month);
ctainer.add(field3);
ctainer.add(field_day);
ctainer.add(button);
//创建一个文本域
JTextArea list=new JTextArea();
//设置文本标题
list.setBorder(BorderFactory.createTitledBorder(year+"年"+month+"月"+day+"日"));
//将文本域添加进窗口
jf.add(list);
//设置文本域大小
list.setBounds(10,10,550,300);
//设置文本域内容
list.setText(ss);
list.setEditable(false);
//以下三个addKeyListener分别对年月日的三个输入框进行了限制,限制其只能输入数字。
field1.addKeyListener(new KeyAdapter() {
@Override
public void keyTyped(KeyEvent e) {
super.keyTyped(e);
int keychar=e.getKeyChar();
if(keychar>=KeyEvent.VK_0&&keychar<=KeyEvent.VK_9){
}else{
e.consume();
}
}
});
field2.addKeyListener(new KeyAdapter() {
@Override
public void keyTyped(KeyEvent e) {
super.keyTyped(e);
int keychar=e.getKeyChar();
if(keychar>=KeyEvent.VK_0&&keychar<=KeyEvent.VK_9){
}else{
e.consume();
}
}
});
field3.addKeyListener(new KeyAdapter() {
@Override
public void keyTyped(KeyEvent e) {
super.keyTyped(e);
int keychar=e.getKeyChar();
if(keychar>=KeyEvent.VK_0&&keychar<=KeyEvent.VK_9){
}else{
e.consume();
}
}
});
//为提交按钮绑定刷新事件
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Calendar calendar=Calendar.getInstance();
//给年月日一个初始化数值
int year=calendar.get(Calendar.YEAR);
int month=calendar.get(Calendar.MONTH)+1;
int day=calendar.get(Calendar.DATE);
if(field1.getText().isEmpty()){
}else{
//获得输入框输入的年份
year= Integer.parseInt(field1.getText());
}
if(field2.getText().isEmpty()){
}else{
//获得输入框输入的月份
month= Integer.parseInt(field2.getText());
}
if(field3.getText().isEmpty()){
}else{
//获得输入框输入的天
day= Integer.parseInt(field3.getText());
}
String S=date(year,month,day);
jf.getContentPane().removeAll();
menu(jf, ss, year, month, day);
}
});
}
public static String date(int year,int month,int day){
//判断输入的日是否合法
if(day>=1&&day<=31){
}else{
//如果不合法,则看其月份,如果为2月,则修改其日为28号,其他月份则修改日为30,避免后台发生错误.
if(month==2){
day=28;
}else {
day=30;
}
}
Calendar calendar=Calendar.getInstance();
calendar.set(year,month-1,1);
//获取第一天的星期
int firstDay=calendar.get(Calendar.DAY_OF_WEEK);
//将月份设置改为输入月份的下个月
calendar.set(year,month,1);
//将天数减一,就跳转到了输入月份的最后一天
calendar.add(Calendar.DAY_OF_MONTH,-1);
//获取这个月的总天数
int days=calendar.get(Calendar.DAY_OF_MONTH);
//创建一个StringBuilder,来对文本进行存储
StringBuilder ss= new StringBuilder();
//打印日历的表头
ss.append("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六\t");
//文本换行
ss.append("\n");
//输入日期
int count=0;
for(int i = 1;i<firstday-1;i++){ ss.append("\t");="" count++;="" }="" for(int="" i="1;i<=days;i++){" 为了使得日期能够对其,当天数大于9以后,则变成2位数,将其进行对齐="" if(i<10){="" if(i="=day){" 将跳转日期进行特殊‘*’标记,方便辨别="" ss.append("="" "="" +="" "*").append(i).append("\t");="" }else="" {="" ").append(i).append("\t");="" ss.append("*").append(i).append("\t");="" ss.append(+i).append("\t");="" 如果够一个星期,进行换行="" if(count%7="=0){" ss.append("\n");="" return="" ss.tostring();="" public="" static="" void="" main(string[]="" args){="" calendar="" 获取当前日期的年月日="" int="" year="calendar.get(Calendar.YEAR);" 因为获取到的月份比实际少一,每年的一月对应数字为0,则进行+1处理="" month="calendar.get(Calendar.MONTH)+1;" day="calendar.get(Calendar.DATE);" string="" s="date(year,month,day);" jframe="" jf="new" jframe();="" jf.setlayout(null);="" 设置大小为700*300="" jf.setsize(700,300);="" jf.setvisible(true);="" 为关闭窗口的关闭绑定事件="" jf.setdefaultcloseoperation(jframe.exit_on_close);="" menu(jf,s,year,month,day);="" }<="" code=""></firstday-1;i++){>
附上实现效果图:
Github项目地址:https://github.com/ZhuMengMeng666/ClockAndCalendar
三、提醒
平时不努力,加班徒伤悲😭
我只是一只擅长搬运的猪萌萌🤔