免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1267 | 回复: 0
打印 上一主题 下一主题

java&swing写的计算器,支持键盘输入 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-04-27 21:29 |只看该作者 |倒序浏览
写的还有欠缺.

import java.awt.*;
import java.io.*;
import java.lang.*;
import javax.swing.*;
import javax.swing.event.*;
import java.awt.event.*;
import java.text.DecimalFormat;
public class Caculator implements ActionListener,KeyListener{
   public static void main(String args[]) {
    new Caculator();
  }
  JFrame frame;
  JTextField textAnswer;
  JTextArea help;
  JPanel panel,panel1,panel2,panel3,panel4;
  JButton button[];
  JButton buttonAdd,buttonEqual,buttonDot,buttonSub,buttonDiv,buttonMul;
  JButton buttonBk, buttonCe, buttonC;
  double num1,num2;
  double answer;
  boolean intflag=true;
  boolean operatorflag=true;
  boolean equalflag=true;
  int key;
  DecimalFormat df;

  public Caculator() {
    df = new DecimalFormat("0.##############"); //设置数据输出精度(对于double型值)
    frame = new JFrame("建四狼的计算器");
    frame.setResizable(false);
    Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
    int x = (dim.width)/2-150;
    int y = (dim.height)/2-250;
    frame.setLocation(x,y); //设置窗口位置
    panel=new JPanel();
    textAnswer=new JTextField(15);
    textAnswer.setText("");
    textAnswer.setHorizontalAlignment(SwingConstants.RIGHT);
    textAnswer.setEditable(false);
    textAnswer.setBackground(new Color(255,255,255));
    textAnswer.addKeyListener(this);
    help=new JTextArea(8,10);
    help.setEditable(false);
    help.append("本程序由建四狼编写\n");
    help.append("只实现简单的计算功能\n");
    help.append("怎么用这就不介绍了,呵呵\n");
    help.append("有错误的地方再所难免\n");
    help.append("可以通过键盘输入\n");
    help.append("QQ:274839490\n");
    help.append("---------------------------------\n");
    help.append("                2007年4月重邮\n");
    frame.getContentPane().add(panel);
    panel.setLayout(new BorderLayout());
    panel2=new JPanel();
    panel2.add(help,BorderLayout.CENTER);
    panel4=new JPanel();
    panel.add(panel4,BorderLayout.CENTER);
    panel4.setLayout(new BorderLayout());
    panel3=new JPanel();
    panel4.add(panel3,BorderLayout.CENTER);
    buttonBk=new JButton("BackSpace");
    panel3.add(buttonBk);
    buttonBk.addActionListener(this);
    buttonBk.addKeyListener(this);
    buttonCe=new JButton("CE");
    panel3.add(buttonCe);
    buttonCe.addActionListener(this);
    buttonCe.addKeyListener(this);
    buttonC=new JButton("C");
    panel3.add(buttonC);
    buttonC.addActionListener(this);
    buttonC.addKeyListener(this);
    panel.add(textAnswer,BorderLayout.NORTH);
    panel.add(panel2,BorderLayout.WEST);
    panel1=new JPanel();
    panel4.add(panel1,BorderLayout.SOUTH);
    button = new JButton[10];
    for (int i = 0; i
    public void keyPressed(KeyEvent e){
          int i=e.getKeyCode();
          char c=e.getKeyChar();
          if(i==KeyEvent.VK_ADD){
                Add();
          }
          else if(i==KeyEvent.VK_SUBTRACT){
                 Sub();
          }
          else if(i==KeyEvent.VK_DIVIDE){
                 Div();
          }
          else if(i==KeyEvent.VK_MULTIPLY){
                 Mul();
          }
          else if(i==KeyEvent.VK_ENTER){
                  Enter();
          }
          else if(c=='.'){
                  Dot();
          }
          else if(i==KeyEvent.VK_BACK_SPACE){
                  Backspace();
          }
          else if(i==KeyEvent.VK_Q){
                  clear();
          }
          Input(c);
    }
   public void keyReleased(KeyEvent e) {
  // TODO 自动生成方法存根
}
public void keyTyped(KeyEvent e) {
  // TODO 自动生成方法存根
}

  //设置各个按钮行为
  public void actionPerformed(ActionEvent event) {
    Object temp = event.getSource();
    //boolean operatorflag=true;
    if(temp==KeyStroke.getKeyStroke('f')){
          temp=button[1];
    }
    try{
       for(int i=0;i
       }
       if(temp==buttonEqual){
          Enter();
       }
       if(temp==buttonC){
          clear();
       }
       if(temp==buttonBk){
          Backspace();
       }
       if(temp==buttonDot){
          Dot();
       }
    }
    catch(Exception e){
       textAnswer.setText("非法操作");
    }
  }
  public void culcator(Exception e){
  }
  public void Input(char c){
     int i=c-48;
     if(i9)
         return;
     if(operatorflag&&equalflag){
              textAnswer.setText(textAnswer.getText()+Integer.toString(i));
              frame.setTitle(frame.getTitle()+Integer.toString(i));
          }
          else if(operatorflag==false&&!equalflag){
              textAnswer.setText("");
              textAnswer.setText(textAnswer.getText()+Integer.toString(i));
              frame.setTitle("建四狼的计算器"+Integer.toString(i));
              operatorflag=true;
              equalflag=true;
          }
          else if(operatorflag&&!equalflag){
              textAnswer.setText("");
              equalflag=true;
              textAnswer.setText(textAnswer.getText()+Integer.toString(i));
              frame.setTitle(frame.getTitle()+Integer.toString(i));
              }
  }
  public void Input(Object temp,int i){
       if(temp==button&&operatorflag&&equalflag){
              textAnswer.setText(textAnswer.getText()+Integer.toString(i));
              frame.setTitle(frame.getTitle()+Integer.toString(i));
          }
          else if(temp==button&&operatorflag==false&&!equalflag){
              textAnswer.setText("");
              textAnswer.setText(textAnswer.getText()+Integer.toString(i));
              frame.setTitle("建四狼的计算器"+Integer.toString(i));
              operatorflag=true;
              equalflag=true;
          }
          else if(temp==button&&operatorflag&&!equalflag){
              textAnswer.setText("");
              equalflag=true;
              textAnswer.setText(textAnswer.getText()+Integer.toString(i));
              frame.setTitle(frame.getTitle()+Integer.toString(i));
              }
     }
   public void Add(){
      if(intflag==true){
                 num1=Double.parseDouble(textAnswer.getText());
             }
             textAnswer.setText("+");
             operatorflag=true;
             equalflag=false;
             key=1;
      if(answer==0)
          frame.setTitle("建四狼的计算器"+df.format(num1)+"+");
   }
   public void Sub(){
      if(intflag==true){
                 num1=Double.parseDouble(textAnswer.getText());
      }
      textAnswer.setText("-");
      operatorflag=true;
      equalflag=false;
      key=2;
      if(answer==0)
          frame.setTitle("建四狼的计算器"+df.format(num1)+"-");
   }
   public void Div(){
      if(intflag==true){
                 num1=Double.parseDouble(textAnswer.getText());
              }
             textAnswer.setText("/");
             operatorflag=true;
             equalflag=false;
             key=4;
      if(answer==0)
          frame.setTitle("建四狼的计算器"+df.format(num1)+"/");
  }
  public void Mul(){
      if(intflag==true){
                 num1=Double.parseDouble(textAnswer.getText());
              }
             textAnswer.setText("*");
             operatorflag=true;
             equalflag=false;
             key=3;
      if(answer==0)
          frame.setTitle("建四狼的计算器"+df.format(num1)+"*");
  }
  public void Enter(){
     num2=Double.parseDouble(textAnswer.getText());
     char c='+';
          switch(key){
             case 1:
               answer=num1+num2;
               textAnswer.setText(df.format(answer));
               operatorflag=false;
               equalflag=false;
               c='+';
               break;
             case 2:
               answer=num1-num2;
               textAnswer.setText(df.format(answer));
               operatorflag=false;
               equalflag=false;
               c='-';
               break;
             case 3:
               answer=num1*num2;
               textAnswer.setText(df.format(answer));
               operatorflag=false;
               equalflag=false;
               c='*';
               break;
             case 4:
               answer=num1/num2;
               textAnswer.setText(df.format(answer));
               operatorflag=false;
               equalflag=false;
               c='/';
               break;
          }
          double n1=num1;
          double n2=num2;
          num2=0;
          num1=answer;
          answer=0;
          frame.setTitle("建四狼的计算器"+df.format(n1)+c+df.format(n2)+"="+df.format(num1));
  }
  public void Dot(){
       boolean isDot=false;
          for(int i=0;i
  public void Backspace(){
          String s = textAnswer.getText();
          String t=frame.getTitle();
          frame.setTitle("");
          textAnswer.setText("");
          for (int i = 0; i 7){
              for(int i=0;i
  public void clear(){
          textAnswer.setText("0");
          num1=0;
          num2=0;
          answer=0;
          operatorflag=true;
          equalflag=false;
          frame.setTitle("建四狼的计算器");
  }
  }

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/37017/showart_287691.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP