calendar日历配合正则表达式界面化

这个随笔是在之前的无界面的calendar的基础上开发的,将输入信息以及显示的内容实现了界面化,让监听线程来实现跳转,利用正则表达式来对输入的年份进行判断。时间问题没有使用流式布局,而是使用了框架不可以放大缩小。请看代码,有可能会有多余的代码,请见谅。如有不足之处请大家明示。

  1 import java.awt.Button;
  2 import java.awt.Color;
  3 import java.awt.GridLayout;
  4 import java.awt.event.ActionEvent;
  5 import java.awt.event.ActionListener;
  6 import java.util.Calendar;
  7 import java.util.regex.Matcher;
  8 import java.util.regex.Pattern;
  9 
 10 import javax.swing.JFrame;
 11 import javax.swing.JLabel;
 12 import javax.swing.JOptionPane;
 13 import javax.swing.JPanel;
 14 import javax.swing.JTextField;
 15 @SuppressWarnings("all")
 16 public class boudaryCalendar extends JFrame implements ActionListener{
 17         
 18     
 19      Button back;
 20      Button front;
 21      Button Go=new Button("跳转");
 22      JTextField go=new JTextField("请输入年份");
 23      String[] con;
 24      JTextField destCalendar;
 25      JPanel panel;
 26      static int year;
 27      static int Maxday;
 28      static int month;
 29      static int firstday_of_week;
 30      static int today;
 31      static Calendar calendar;
 32      JPanel top;
 33      Button[] day_of_week=new Button[7];
 34      JLabel[] day=new JLabel[42];
 35      Button[] tab=new Button[6];
 36     public boudaryCalendar(){
 37         super("日历");
 38         panel=new JPanel();
 39         panel.setBackground(Color.pink);
 40         top=new JPanel();
 41         panel.setBounds(10, 50, 370, 400);
 42         panel.setLayout(new GridLayout(7,7));
 43         setPanel();
 44         setCompent();
 45         this.setResizable(false);
 46         this.add(Go);
 47         Go.addActionListener(this);
 48         this.add(go);
 49         go.addActionListener(this);
 50         this.add(destCalendar);
 51         destCalendar.addActionListener(this);
 52         this.add(back);
 53         back.addActionListener(this);
 54         this.add(front);
 55         front.addActionListener(this);
 56         panelAdd();
 57         this.add(panel);
 58         this.setVisible(true);
 59         this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 60     }
 61     private void setPanel() {
 62         JPanel panel2=new JPanel();
 63         panel2.setBounds(10, 50, 370, 400);
 64         panel2.setLayout(new GridLayout(7,7));
 65         String[] str= {"日","一","二","三","四","五","六"};
 66         for(int i=0;i<7;i++) {
 67             day_of_week[i]=new Button(str[i]);
 68             day_of_week[i].setSize(20, 20);
 69             panel.add(day_of_week[i]);
 70 
 71         }
 72         for(int i=0;i<42;i++) {    //初始化面板
 73             day[i]=new JLabel("",JLabel.CENTER);
 74             panel.add(day[i]);
 75 
 76         }
 77     }
 78     public static void main(String[] args){//加载主页
 79         calendar=Calendar.getInstance();
 80         today=calendar.get(Calendar.DATE);
 81         month=calendar.get(Calendar.MONTH);
 82         year=calendar.get(Calendar.YEAR);
 83         System.out.println(year);
 84         boudaryCalendar dc=new boudaryCalendar();
 85         
 86     }
 87     public void setCompent() {//对组件进行设置
 88         this.setLayout(null);
 89         Go.setBounds(140, 10, 40, 30);
 90         go.setBounds(10, 10, 120, 30);
 91         this.setBounds(200, 400, 400, 500);
 92         back =new Button("<");
 93         back.setBounds(186, 10, 40, 30);
 94         front =new Button(">");
 95         front.setBounds(330, 10, 40, 30);
 96         destCalendar=new JTextField();
 97         destCalendar.setBounds(228, 10, 100, 30);
 98         destCalendar.setEditable(false);
 99     }
100     public static String[] calendar(int month) {//初始化获得本月所有的天数在Label数组中返回
101         String[] everyday=new String[42];
102         calendar.set(Calendar.MONTH, month);
103         calendar.set(Calendar.DAY_OF_MONTH, 1);
104         Maxday=calendar.getActualMaximum(Calendar.DATE);//获得本月最大的天数
105         firstday_of_week=calendar.get(Calendar.DAY_OF_WEEK)-1;
106         for(int i=firstday_of_week,n=1;i<Maxday+firstday_of_week;i++) {
107             everyday[i]=String.valueOf(n);
108             n++;
109         }
110         
111         return everyday;
112     }
113     public void panelAdd() {//对获得的Label数组进行界面化刷新日历
114         String[] str=calendar(month);
115         for(int i=0;i<42;i++) {
116             day[i].setText(str[i]);
117             if(i==today+firstday_of_week-1) {
118                 day[i].setText(day[i].getText()+"*");
119             }
120         }
121         destCalendar.setText(year+"年"+(month+1)+"月"+today);
122     }
123 
124     public void buttonBack() {//后退一个月
125         panelAdd();
126     }
127     public void buttonFront() {//前进一个月
128         panelAdd();
129         
130     }
131     @Override
132     public void actionPerformed(ActionEvent e) {
133         // 判断数据源是哪一个事件相应
134         if(e.getSource()==back) {
135             month--;
136             if(month<0) {
137                 year--;
138                 calendar.set(Calendar.YEAR, year);
139                 month=11;
140                 
141             }
142             
143             buttonBack();
144         }
145         if(e.getSource()==front) {
146             month++;
147             if(month>11) {
148                 year++;
149                 calendar.set(Calendar.YEAR,year);
150                 month=0;
151             }
152             buttonFront();
153         }
154         if(e.getSource()==Go){
155             gotoyear();
156         }
157         
158     }
159     private void gotoyear() {//利用正则表达式对输入的年份进行判断,输入不正确弹出警告框
160         Pattern p=Pattern.compile("[1-9]\\d{1,3}");
161         String text=go.getText();
162         Matcher m=p.matcher(text);
163         if(m.matches()){
164             int dest=Integer.parseInt(go.getText());
165             year=dest;
166             calendar.set(Calendar.YEAR,year);
167             panelAdd();
168         }
169         else{
170             JOptionPane.showMessageDialog(null, "无法解析输入的年份,请检查输入格式", "Error", JOptionPane.ERROR_MESSAGE);
171         }
172         
173     }
174      
175 }

 

转载于:https://www.cnblogs.com/Rose-yu/p/10627929.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值