基于JAVA的日期计算器

这是一个基于JAVA的图形界面日期计算器,能够处理日期加减运算,同时支持键盘和鼠标操作。用户可以输入日期,然后进行加天数、减天数或日期的计算,但存在全局键盘监听和公元前日期处理的问题。
摘要由CSDN通过智能技术生成

实验要求和目的:

1.理解掌握图形界面的设计

2.理解整体算法的思路,即actionPerformed()的算法

3.输入日期,完成星期几的计算,并输出星期值(注意日期输入的合法性)

4.输入日期加天数,完成日期加天数的计算,并输出新日期(注意日期的合法

输入,以及注意日期不能加日期,即第二次输入的只能是天数)

5.输入日期以及天数或日期,如果为天数,计算日期减天数,否则计算如

期减日期,将得到新日期或者相应天数差值,并输出。

6.进一步学习java的编程思想。

 

思路分析:
1.为使程序美观,使用了多个JPanel和不同的LayoutManager(比如FlowLayout、

BorderLayout、GridLayout)进行布局设计,同时限定了窗口字体的大小;

2.封装了一个创建数字按钮的方法getNumberButton(int n),可以快速地进行增加数字按钮的操作;

3.为将文本框中的字符串转换为日期编写了toDate()方法,其中包括日期输入错误的异常处理,此方法在保存当前日期、获取

减法操作的日期时被复用;

4.因为要实现键盘和鼠标的双重操作,将操作时使用的几个方法(pressButton\pressEqualButton\pressOPButton等)封装起来,

使其可供多个监听器调用;

5.为能通过键盘操作,对所有按钮注册了监听器;

6.为判断当前是否处于输入状态(否则处于程序提示状态),使用布尔型属性inputing标记当前状态,当其为false时,向文本

框中输入字符会清空文本框;

7.为实现+-操作、使用了plus和minus两个布尔型属性来标记当前状态,同时使用了一个Calendar属性

保存当前日期,在每步操作时都对其进行改变,最后=时是输出。

8.考虑到可能存在多次连续+-操作,设计了更完善的算法。

 

存在问题

如:1.由于不知道如何进行全局的键盘监听,目前只是对所有按钮注册了监听器;

2.如果经过减操作的日期是公元前的日期,结果依然会显示为公元年份。

 

package cn.lanan.com;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

import javax.sound.midi.Synthesizer;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class Calculator_8 extends JFrame {
    JTextField textFile;
    Date date;
    String fullString;// 全局
    String beforeSymbol,afterSymbol;
    Calendar calendar,calendar1;// 全局变量用来保存时间
    long timeInMillis,timeInMillis1;
    //bolean:确保第一次都是将日期转换成yyyy年MM月dd日是 E形式
    //isNumber:判断输入的字符是否是数字还是非数字
    //isSymbol:判断符号是+还是-,true表示+
    //键盘监听事件keyLitener
    boolean bolean=true, isSymbol=true;
    
    int mmmm;
    public Calculator_8() {
        JFrame jf = new JFrame("日期计算机");
        jf.setLayout(new FlowLayout());
        jf.setBounds(500, 150, 756, 350);
        textFile = new JTextField(50);
        Dimension preferredSize = new Dimension(30, 40);
        textFile.setPreferredSize(preferredSize);
        JButton anm = new JButton("测试");
        textFile.requestFocus();
        Jtl jtl = new Jtl();
        anm.addActionListener(jtl);
        textFile.addKeyListener(jtl);
        JPanel jpanel = new JPanel();
        jpanel.setLayout(new BorderLayout());
        JPanel jpanel_center = new JPanel();
        jpanel_center.setLayout(new GridLayout(4, 3, 10, 10));
        JPanel jpanel_north = new JPanel();
        JPanel jpanel_east = new JPanel();
        jpanel_east.setLayout(new GridLayout(4, 1, 10, 10));
        jpanel_north.add(textFile);
        jpanel_north.add(anm);
        jpanel.add(jpanel_north, BorderLayout.NORTH);
        for (int i = 1; i < 10; i++) {
            jpanel_center.add(getNumberButton(i));
            
        }
        jpanel_center.add(getNumberButton("CE"));
        jpanel_center.add(getNumberButton(0));

        jpanel_east.add(getNumberButton("+"));
        jpanel_east.add(getNumberButton("-"));
        jpanel_east.add(getNumberButton("/"));
        jpanel_east.add(getNumberButton("="));

        jpanel.add(jpanel_east, BorderLayout.EAST);
        jpanel.add(jpanel_center, BorderLayout.CENTER);
        
        jf.add(jpanel);
        // ===========设置容器的可见性及可关闭性
        jf.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent arg0) {
                System.exit(0);
            }
        });
        // jf.pack();
        
        jf.setResizable(false);
        jf.setVisible(true);
    }

    // ====================方法区===================================
    private JButton getNumberButton(int n) {
        // 设置按钮的大小
        // Dimension preferredSize = new Dimension(10,10);
        JButton an = new JButton("" + n);
        // an.setPreferredSize(preferredSize);
        Jtl jtz = new Jtl();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值