【分享】【计算器程序--java编写】

 

效果图:

----------------------------------------------------------------------》》

图形界面类:(主类)

package caculator;

import java.awt.*;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;

import javax.swing.*;

public class myWindow extends JFrame{
 static String url = "D:/eclipseSpace/javaProject/src/caculator/image/icon.gif";//图标路径
 static JTextField area;
 static JButton [] button ;
 static JButton [] functionButton ;
 static JPanel leftLabel , numLabel ,rightLabel,bigLabel;
 //leftLabel来添加左边的+-*/功能,numLabel添加数字键,rightLabel添加下面的三个按钮
 static JButton time,AC,result,delete;
 static JMenuBar jmb ;
 static JMenu editMenu,help,m3;
 static JMenuItem copy,paste,about;
 public myWindow(){
  //设置整体窗口
  //设置菜单栏 。
  jmb = new JMenuBar(); 
  editMenu=new JMenu("编辑");
  
  help=new JMenu("帮助");
  copy = new JMenuItem("复制");
  //设置快捷键Ctrl+C
  copy.setAccelerator(
                    KeyStroke.getKeyStroke(KeyEvent.VK_C,
                            InputEvent.CTRL_MASK));
  paste = new JMenuItem("粘贴");
  //设置快捷键Ctrl+V
        paste.setAccelerator(
                    KeyStroke.getKeyStroke(KeyEvent.VK_V,
                            InputEvent.CTRL_MASK));
  
  about = new JMenuItem("关于");
  //设置快捷键Ctrl+A
  about.setAccelerator(
                KeyStroke.getKeyStroke(KeyEvent.VK_A,
                        InputEvent.CTRL_MASK));
  //事件侦听
  copy.addActionListener(new doAction());
  paste.addActionListener(new doAction());
  about.addActionListener(new doAction());
  
  editMenu.add(copy);
  editMenu.add(paste);
  help.add(about);
  
  jmb.add(editMenu);
  jmb.add(help);
  this.setJMenuBar(jmb);//设置菜单烂 end
  this.setLayout(new BorderLayout());
  this.setTitle("caculator");
  Container con = getContentPane();
  //实例化jlabel
  bigLabel= new JPanel();
  leftLabel = new JPanel();
  numLabel = new JPanel();
  rightLabel = new JPanel();
  
  
  //设置显示区域
  area=new JTextField(15);
  area.setFocusable(false);
  area.setBackground(Color.white);
  area.setFont(new Font(Font.DIALOG,Font.BOLD,20));
  //生成数字键
  button = new JButton[12];
  for(int i=0;i<12;i++){
   button[i]=new JButton(i+1+"");
   if(i==9)
    button[i]=new JButton("00");
   if(i==10)
    button[i]=new JButton("0");
   if(i==11)
    button[i]=new JButton(".");
   button[i].addActionListener(new doAction());
  }
  numLabel.setLayout(new GridLayout(4,3,2,2));
  for(int i=0;i<button.length;i++){
   numLabel.add(button[i]);
  }
  
  //生成最右面三个按键
  time=new JButton("时间");
  time.addActionListener(new doAction());
  AC=new JButton("清零");
  AC.addActionListener(new doAction());
  result=new JButton("=");
  result.addActionListener(new doAction());
  delete=new JButton("删除");
  delete.addActionListener(new doAction());

  rightLabel.setLayout(new GridLayout(4,1,2,2));
  rightLabel.add(time);
  rightLabel.add(AC);
  rightLabel.add(delete);
  rightLabel.add(result);
  
  //最左边功能键+-*/
  functionButton = new JButton[4];
  String [] function = {"+","-","*","/"};
  for(int i=0;i<4;i++){
   functionButton[i]=new JButton (function[i]);
   leftLabel.add(functionButton[i]);
   functionButton[i].setForeground(Color.red);
   //事件侦听注册
   functionButton[i].addActionListener(new doAction());
  }
  leftLabel.setLayout(new GridLayout(4,1,2,2));
  
  //添加到frame中
  bigLabel.add(leftLabel);
  bigLabel.add(numLabel);
  bigLabel.add(rightLabel);
  
  con.add(area,BorderLayout.NORTH);
  con.add(bigLabel,BorderLayout.CENTER);
  
  setSize(300,250);
  setVisible(true);
  this.setLocation(450,200);
  setLayout(new FlowLayout());
  //frame的关闭操作
  this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  //调用设置图标的方法
  this.setTitleIcon();
 }
 
 //设置标题栏图标的大小
 public  void setTitleIcon(){
  
  Toolkit tk = Toolkit.getDefaultToolkit();
  Image i = tk.getImage(url);
  this.setIconImage(i);
 }

 public static void main(String[] args) {
  
  new myWindow();
  
 }

}

----------------------------------------------------------------------------------------------------------------------------------》》

处理类

package caculator;

import java.awt.Component;
import java.awt.Image;
import java.awt.Menu;
import java.awt.Toolkit;
import java.awt.event.*;

import javax.swing.ImageIcon;
import javax.swing.JOptionPane;
import javax.swing.Popup;

public class doAction implements ActionListener {
 final int MaxNumberLength=14;
 public void actionPerformed(ActionEvent e) {

  String event = e.getActionCommand();
  
   // 处理显示时间的问题
   if (event.equals("时间")) {
    saveNum.num="";
    saveNum.second="";
    // 判断,线程已经启用,即saveNum.threadState为真时,不再从新启用
    if (saveNum.threadState == false) {
     saveNum.time = new Time();
     saveNum.th = new Thread(saveNum.time);
     saveNum.threadState = true;
     saveNum.th.start();
    }
   }//结束时间处理问题
   // 处理数字按钮
   if (event.matches("[0-9]*") || event.equals(".")) {
    // 判断,如果线程Time已经启动,那么结束线程
    if (saveNum.threadState) {
     saveNum.stopTimeRun();
    }
    //限制最大数字长度
    if(saveNum.num.length()>MaxNumberLength-1){
     saveNum.num=saveNum.num.substring(0, MaxNumberLength);
     myWindow.area.setText(saveNum.num);
     JOptionPane.showMessageDialog((Component) e.getSource(),
       "可运行的数字长度不能超过 "+MaxNumberLength+" 位!!", "Wanning", JOptionPane.WARNING_MESSAGE);
     
     return;
    }
    saveNum.num += event;
    myWindow.area.setText(saveNum.num);
   }
   // 按等号时输出结果
   if (event.equals("=")) {
    // 判断,如果线程Time已经启动,那么结束线程
    if (saveNum.threadState) {
     saveNum.stopTimeRun();
    }
    //判断,如果没有输入第二个运算字就安等号,出现提示框
    if (saveNum.second.equals("")|| !saveNum.second.matches("[0-9]*[.]?[0-9]*[eE]?[0-9]*")||saveNum.num.equals("")) {
     JOptionPane.showMessageDialog((Component) e.getSource(),
       "无效的操作", "Wanning", JOptionPane.WARNING_MESSAGE);
     //saveNum.num="";
     saveNum.second="";
     return;
    }

    Double first = Double.parseDouble(saveNum.second.trim());
    //判断,如果除数不能为小数点
    if(saveNum.num.trim().matches("[.]*")){
     JOptionPane.showMessageDialog((Component) e.getSource(),
       "不能输入小数点", "Wanning", JOptionPane.WARNING_MESSAGE);
     return;
    }
    Double second = Double.parseDouble(saveNum.num.trim());
    // 四则运算
    if (saveNum.type.equals("+")) {
     saveNum.num = (first + second) + "";
    }
    if (saveNum.type.equals("-")) {
     saveNum.num = (first - second) + "";
    }
    if (saveNum.type.equals("*")) {
     saveNum.num = (first * second) + "";
    }
    if (saveNum.type.equals("/")) {
     //判断,如果除数为0,提示除数不能为0
     if(saveNum.num.trim().equals("0")||saveNum.num.trim().equals("00")){
      JOptionPane.showMessageDialog((Component) e.getSource(),
        "除数不能为0", "Wanning", JOptionPane.WARNING_MESSAGE);
      return;
     }
      saveNum.num = (first / second) + "";
     
    }
    // 输出运算结果:
    myWindow.area.setText(saveNum.num);
   }
   // 输入框清0
   if (event.equals("清零")) {
    // 判断,如果线程Time已经启动,那么结束线程
    if (saveNum.threadState) {
     saveNum.stopTimeRun();
    }
    myWindow.area.setText("");
    saveNum.num = "";// 同时将记录的数据清0
   }
   // 四则运算
   if (event.equals("+") || event.equals("-") || event.equals("*")
     || event.equals("/")) {
    // 判断,如果线程Time已经启动,那么结束线程
    if (saveNum.threadState) {
     saveNum.stopTimeRun();
    }
    saveNum.second = saveNum.num;// 将第一次输入的数保存出来
    saveNum.type = event;// 保存操作类型
    saveNum.num = "";// 同时将记录的数据清0
    myWindow.area.setText("");
   }
   
   //按下删除键时
   if(event.equals("删除")){
    //删除时如果时间正在运行,不做任何处理。删除只是对运算过程的数据有效
    if (saveNum.threadState) {
     return;
    }
    int length = saveNum.num.length();
    //当至少有一个数字时才能删除
    if(length>0)
    saveNum.num = saveNum.num.substring(0, length-1);
    myWindow.area.setText(saveNum.num);
   }
   //处理菜单栏中的事件
   if(event.equals("复制")){
    myWindow.area.selectAll();
    myWindow.area.copy();
   }
   if(event.equals("粘贴")){
    myWindow.area.paste();
    if(!myWindow.area.getText().trim().matches("[0-9]*[.]?[0-9]*[eE]?[0-9]*")){
     JOptionPane.showMessageDialog(null,"只能输入有效的运算数字","Warning",JOptionPane.WARNING_MESSAGE);
     myWindow.area.setText("");
     return;
    }
    else if(!saveNum.type.equals("")&& !saveNum.second.equals("")){
     saveNum.num=myWindow.area.getText();
     JOptionPane.showMessageDialog(null,"1","Warning",JOptionPane.WARNING_MESSAGE);
    }else {
     saveNum.num=myWindow.area.getText(); // 将第粘贴的数保存出来
     JOptionPane.showMessageDialog(null,"2","Warning",JOptionPane.WARNING_MESSAGE);
    }
   }
   if(event.equals("关于")){
    String text="欢迎使用此计算器,本计算器的使用权归您所\n有,声明,本计算器版本为 1.0";
    JOptionPane.showMessageDialog(null,
      text, "关于计算器", JOptionPane.PLAIN_MESSAGE);
   }
  }
}

---------------------------------------------------------------------------------------------------------------------------------------》》

中间类:

package caculator;

 

public class saveNum  {

 static String num="";
 static String second=""; //用来存放中间数
 static String type="";//保存运算类型
 static Thread th=null;
 static Time time=null;
 static boolean threadState=false;
 //结束time线程
 @SuppressWarnings("deprecation")
 public static void stopTimeRun(){
  if(th.isAlive()){
   th.stop();
   threadState=false;
  }
 }
 
}

--------------------------------------------------------------------------------------》》

时间类:

package caculator;

import java.util.*;

public class Time implements Runnable{
 @SuppressWarnings("deprecation")
 @Override
 public synchronized void run() {
  while(saveNum.threadState==true){
   Date date =new Date();
   int hour , minute ,second ;
   String time ;
   hour = date.getHours();
   minute=date.getMinutes();
   second = date.getSeconds();

   time=hour+":"+minute+":"+second;
   if(hour>=0 && hour < 12){
    myWindow.area.setText("AM "+time);
   }
   else{
    myWindow.area.setText("PM "+time);
   }
   try {
    Thread.sleep(1000);
   }catch(Exception e){
    
   }
   }
  }

}

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值