学java第二学期  在使用jbuilder 但书上的代码断断续续  看不太懂 所以来论坛里求助

解决方案 »

  1.   

    我赞成你自己写,错了可以改不是问题,不会写可以边学边写也不是问题
    很惭愧,我这学期才接触Java(也就是刚好两个月),但是我觉得真要把一种语言学好的话始终是要自己动手的,否则即使你看再多的代码,找再多的人帮你也于事无补
    一起加油吧
      

  2.   

    刚学Java才2个星期,这个计算器的代码边学边写,总是不会怎么样把键盘操作给实现了。惭愧
      

  3.   

    csdn的兄弟们就是专业,这里是解决疑难杂症的地方,大家不会主张帮你完成,都希望你能自己提高,很喜欢csdn这种风格。
      

  4.   


    public void this_keyPressed(KeyEvent e) {
            if(e.getKeyCode()==KeyEvent.VK_NUMPAD0)
                JOptionPane.showMessageDialog(this,"你按下了键盘上的数字0");
             else  if(e.getKeyCode()==KeyEvent.VK_NUMPAD1)
              JOptionPane.showMessageDialog(this,"你按下了键盘上的数字1");
            // else if(.......)
        }
      

  5.   

    这也是别人的代码,仅供参考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 Calculator implements ActionListener,KeyListener{
       public static void main(String args[]) {
        new Calculator();
      }
      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 Calculator() {
        df = new DecimalFormat("0.##############"); //设置数据输出精度(对于double型值)
        frame = new JFrame("LT.的计算器");
        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);
        frame.getContentPane().add(panel);
        panel.setLayout(new BorderLayout());
        panel2=new JPanel();
       
        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 < button.length; i++) {
          button[i] = new JButton(Integer.toString(i));
          button[i].setForeground(new Color(0, 0, 255));
        }
        buttonAdd=new JButton("+");
        buttonSub=new JButton("-");
        buttonDiv=new JButton("/");
        buttonMul=new JButton("*");
        buttonDot=new JButton(".");
        buttonEqual=new JButton("=");
        panel1.setLayout(new GridLayout(4,4));
        panel1.add(button[7]);
        button[7].addActionListener(this);
        button[7].addKeyListener(this);
        panel1.add(button[8]);
        button[8].addActionListener(this);
        button[8].addKeyListener(this);
        panel1.add(button[9]);
        button[9].addActionListener(this);
        button[9].addKeyListener(this);
        panel1.add(buttonAdd);
        buttonAdd.addActionListener(this);
        buttonAdd.addKeyListener(this);
        panel1.add(button[4]);
        button[4].addActionListener(this);
        button[4].addKeyListener(this);
        panel1.add(button[5]);
        button[5].addActionListener(this);
        button[5].addKeyListener(this);
        panel1.add(button[6]);
        button[6].addActionListener(this);
        button[6].addKeyListener(this);
        panel1.add(buttonSub);
        buttonSub.addActionListener(this);
        panel1.add(button[1]);
        button[1].addActionListener(this);
        button[1].addKeyListener(this);
        panel1.add(button[2]);
        button[2].addActionListener(this);
        button[2].addKeyListener(this);
        panel1.add(button[3]);
        button[3].addActionListener(this);
        button[3].addKeyListener(this);
        panel1.add(buttonMul);
        buttonMul.addActionListener(this);
        buttonMul.addKeyListener(this);
        panel1.add(button[0]);
        button[0].addActionListener(this);
        button[0].addKeyListener(this);
        panel1.add(buttonDot);
        buttonDot.addActionListener(this);
        buttonDot.addKeyListener(this);
        panel1.add(buttonEqual);
        buttonEqual.addActionListener(this);
        buttonEqual.addKeyListener(this);
        panel1.add(buttonDiv);
        buttonDiv.addActionListener(this);
        buttonDiv.addKeyListener(this);
        //buttonAdd.setFocusable(true);
        frame.addKeyListener(this);
        frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
        frame.pack();
        frame.show();
      }
        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<10;i++)
              Input(temp,i);
           if(temp==buttonAdd||temp==buttonMul||temp==buttonDiv||temp==buttonSub){
              if(temp==buttonAdd){
                  Add();
              }
              if(temp==buttonSub){
                 Sub();
              }
              if(temp==buttonMul){
                 Mul();
               }
               if(temp==buttonDiv){
                  Div();
               }
           }
           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){
      }
      
     
      

  6.   


    public void Input(char c){
         int i=c-48;
         if(i<0||i>9)
             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("LT.的计算器"+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[i]&&operatorflag&&equalflag){
                  textAnswer.setText(textAnswer.getText()+Integer.toString(i));
                  frame.setTitle(frame.getTitle()+Integer.toString(i));
              }
              else if(temp==button[i]&&operatorflag==false&&!equalflag){
                  textAnswer.setText("");
                  textAnswer.setText(textAnswer.getText()+Integer.toString(i));
                  frame.setTitle("LT.的计算器"+Integer.toString(i));
                  operatorflag=true;
                  equalflag=true;
              }
              else if(temp==button[i]&&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("LT.的计算器"+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("LT.的计算器"+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("LT.的计算器"+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("LT.的计算器"+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("LT.的计算器"+df.format(n1)+c+df.format(n2)+"="+df.format(num1));
      }
      public void Dot(){
           boolean isDot=false;
              for(int i=0;i<textAnswer.getText().length();i++){
                  if('.'==textAnswer.getText().charAt(i)){
                      isDot=true;
                      break;
                  }
              }
              if(isDot==false){
                  textAnswer.setText(textAnswer.getText()+".");
                  frame.setTitle(frame.getTitle()+".");
              }
      }
     public void Backspace(){
              String s = textAnswer.getText();
              String t=frame.getTitle();
              frame.setTitle("");
              textAnswer.setText("");
              for (int i = 0; i < s.length() - 1; i++) {
                  char a = s.charAt(i);
                  textAnswer.setText(textAnswer.getText() + a);
              }
              if(t.length()>7){
                  for(int i=0;i<t.length()-1;i++){
                      char b=t.charAt(i);
                      frame.setTitle(frame.getTitle()+b);
                  }
               }
               else{
                  frame.setTitle("LT.的计算器");
               }
      }
      public void clear(){
              textAnswer.setText("0");
              num1=0;
              num2=0;
              answer=0;
              operatorflag=true;
              equalflag=false;
              frame.setTitle("LT.的计算器");
      }  }
      

  7.   

    package com.ibm;import java.awt.BorderLayout;
    import java.awt.GridLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.KeyEvent;
    import java.awt.event.KeyListener;import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JTextField;public class Calculator extends JFrame implements ActionListener, KeyListener {
    private JTextField display = new JTextField("0");
    // 按钮上的文字
    private String buttonText = "789/456*123-0.=+";
    // 用来存放按钮对象
    private JButton[] btns = new JButton[16]; private double result = 0; private String operator = "="; private boolean calculating = true; public Calculator() {
    setLayout(new BorderLayout()); display.setEditable(false);
    add(display, "North"); JPanel p = new JPanel();
    p.setLayout(new GridLayout(4, 4));
    p.setLayout(new GridLayout(4, 4));
    for (int i = 0; i < buttonText.length(); i++) {
    JButton b = new JButton(buttonText.substring(i, i + 1));
    p.add(b);
    b.addActionListener(this);
    b.addKeyListener(this);
    btns[i] = b;
    }
    add(p, "Center");
    this.setFocusable(true);
    this.addKeyListener(this); } public void actionPerformed(ActionEvent evt) {
    String cmd = evt.getActionCommand();
    if ('0' <= cmd.charAt(0) && cmd.charAt(0) <= '9' || cmd.equals(".")) {
    if (calculating)
    display.setText(cmd);
    else
    display.setText(display.getText() + cmd);
    calculating = false;
    } else {
    if (calculating) {
    if (cmd.equals("-")) {
    display.setText(cmd);
    calculating = false;
    } else
    operator = cmd;
    } else {
    double x = Double.parseDouble(display.getText());
    calculate(x);
    operator = cmd;
    calculating = true;
    }
    }
    } private void calculate(double n) {
    if (operator.equals("+"))
    result += n;
    else if (operator.equals("-"))
    result -= n;
    else if (operator.equals("*"))
    result *= n;
    else if (operator.equals("/"))
    result /= n;
    else if (operator.equals("="))
    result = n;
    display.setText("" + result);
    } // 当小键盘按键按下时
    public void keyPressed(KeyEvent e) {
    for (JButton btn : btns) {
    // 当按下小键盘的回车时,执行”=“
    if (e.getKeyCode() == KeyEvent.VK_ENTER) {
    btns[14].doClick();
    return;
    }
    if (btn.getText().equals(String.valueOf(e.getKeyChar()))) {
    btn.doClick();
    }
    }
    } public void keyReleased(KeyEvent e) {
    } public void keyTyped(KeyEvent e) {
    } public static void main(String[] args) {
    Calculator frame = new Calculator();
    frame.setTitle("Calculator");
    frame.setSize(200, 200);
    frame.setVisible(true);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
    }
      

  8.   

    http://woshigaohan.blog.163.com/blog/static/11158338200752355835951/
    我以前写的一个计算器,可以参考下,O(∩_∩)O~
      

  9.   

    我也学JAVA不久,这么多志同道合的朋友一起奋斗着,加油!!!
      

  10.   

    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.border.*;
    import java.util.LinkedList;
    import java.io.*;
    public class CalculatorWindow extends JFrame implements ActionListener{
        NumberButton numberButton[];                  
        OperationButton operationButton[];             
        JButton 小数点操作,正负号操作,退格操作,等号操作,清零操作,sin;
        JTextField resultShow;          //显示计算结果
        JTextField showComputerProcess; //显示当前计算过程
        JTextArea  saveComputerProcess; //显示计算步骤
        JButton saveButton,copyButton,clearButton;
        LinkedList<String> list;   //链表用来存放第一个运算数、运算符号和第二个运算数
        HandleDigit handleDigit;  //负责处理ActionEvent事件
        HandleOperation handleOperation ;
        HandleBack handleBack;
        HandleClear handleClear;
        HandleEquality handleEquality;
        HandleDot handleDot;
        HandlePOrN handlePOrN;
        HandleSin handleSin;
        public CalculatorWindow(){
            setTitle("计算器");
            JPanel panelLeft,panelRight; 
            list=new LinkedList<String>();
            resultShow=new JTextField(10);
            resultShow.setHorizontalAlignment(JTextField.RIGHT);
            resultShow.setForeground(Color.blue);
            resultShow.setFont(new Font("TimesRoman",Font.BOLD,16));
            resultShow.setBorder(new SoftBevelBorder(BevelBorder.LOWERED));
            resultShow.setEditable(false);
            resultShow.setBackground(Color.white);
            showComputerProcess=new JTextField();
            showComputerProcess.setHorizontalAlignment(JTextField.CENTER);
            showComputerProcess.setFont(new Font("Arial",Font.BOLD,16));
            showComputerProcess.setBackground(Color.cyan);
            showComputerProcess.setEditable(false);
            saveComputerProcess=new JTextArea();
            saveComputerProcess.setEditable(false);
            saveComputerProcess.setFont(new Font("宋体",Font.PLAIN,16));
            numberButton=new NumberButton[10];
            handleDigit=new HandleDigit(list,resultShow,showComputerProcess);
            for(int i=0;i<=9;i++){
                numberButton[i]=new NumberButton(i);
                numberButton[i].setFont(new Font("Arial",Font.BOLD,20));
                numberButton[i].addActionListener(handleDigit);
            }
            operationButton=new OperationButton[4];
            handleOperation=new HandleOperation(list,resultShow,
                             showComputerProcess,saveComputerProcess);
            String 运算符号[]={"+","-","*","/"}; 
            for(int i=0;i<4;i++){
               operationButton[i]=new OperationButton(运算符号[i]);
               operationButton[i].setFont(new Font("Arial",Font.BOLD,20));
               operationButton[i].addActionListener(handleOperation);
            }
           小数点操作=new JButton(".");
           handleDot=new HandleDot(list,resultShow,showComputerProcess);
           小数点操作.addActionListener(handleDot);
           正负号操作=new JButton("+/-"); 
           handlePOrN=new HandlePOrN(list,resultShow,showComputerProcess);
           正负号操作.addActionListener(handlePOrN);
           等号操作=new JButton("=");
           handleEquality=new HandleEquality(list,resultShow,
                                             showComputerProcess,saveComputerProcess);
           等号操作.addActionListener(handleEquality); 
           sin=new JButton("sin");
           handleSin=new HandleSin(list,resultShow,
                                   showComputerProcess,saveComputerProcess);
           sin.addActionListener(handleSin);
           退格操作=new JButton("退格");
           handleBack=new HandleBack(list,resultShow,showComputerProcess);
           退格操作.addActionListener(handleBack);
           清零操作=new JButton("C");
           handleClear=new HandleClear(list,resultShow,showComputerProcess);
           清零操作.addActionListener(handleClear); 
           清零操作.setForeground(Color.red);
           退格操作.setForeground(Color.red);
           等号操作.setForeground(Color.red);
           sin.setForeground(Color.blue);
           正负号操作.setForeground(Color.blue);
           小数点操作.setForeground(Color.blue);
           panelLeft=new JPanel(); 
           panelRight=new JPanel();
           panelLeft.setLayout(new BorderLayout()); 
           JPanel centerInLeft=new JPanel();
           panelLeft.add(resultShow,BorderLayout.NORTH);
           panelLeft.add(centerInLeft,BorderLayout.CENTER);
           centerInLeft.setLayout(new GridLayout(4,5)); 
           centerInLeft.add(numberButton[1]);
           centerInLeft.add(numberButton[2]);
           centerInLeft.add(numberButton[3]);
           centerInLeft.add(operationButton[0]);
           centerInLeft.add(清零操作);
           centerInLeft.add(numberButton[4]);
           centerInLeft.add(numberButton[5]);
           centerInLeft.add(numberButton[6]);
           centerInLeft.add(operationButton[1]);
           centerInLeft.add(退格操作);
           centerInLeft.add(numberButton[7]);
           centerInLeft.add(numberButton[8]);
           centerInLeft.add(numberButton[9]);
           centerInLeft.add(operationButton[2]);
           centerInLeft.add(sin);
           centerInLeft.add(numberButton[0]);
           centerInLeft.add(正负号操作);
           centerInLeft.add(小数点操作);
           centerInLeft.add(operationButton[3]);
           centerInLeft.add(等号操作);
           panelRight.setLayout(new BorderLayout());
           panelRight.add(showComputerProcess,BorderLayout.NORTH);
           saveButton=new JButton("保存");
           copyButton=new JButton("复制");
           clearButton=new JButton("清除");
           saveButton.setToolTipText("保存计算过程到文件");
           copyButton.setToolTipText("复制选中的计算过程");
           clearButton.setToolTipText("清除计算过程");
           saveButton.addActionListener(this);
           copyButton.addActionListener(this);
           clearButton.addActionListener(this); 
           panelRight.add(new JScrollPane(saveComputerProcess),BorderLayout.CENTER);
           JPanel southInPanelRight=new JPanel();
           southInPanelRight.add(saveButton);
           southInPanelRight.add(copyButton);
           southInPanelRight.add(clearButton);
           panelRight.add(southInPanelRight,BorderLayout.SOUTH);
           JSplitPane split=new JSplitPane
                    (JSplitPane.HORIZONTAL_SPLIT,panelLeft,panelRight);
           add(split,BorderLayout.CENTER);
           setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
           setVisible(true);
           setBounds(100,50,528,258);
           validate();
       }
       public void actionPerformed(ActionEvent e){
           if(e.getSource()==copyButton)
              saveComputerProcess.copy();
           if(e.getSource()==clearButton)
              saveComputerProcess.setText(null);
           if(e.getSource()==saveButton){
               JFileChooser chooser=new JFileChooser();
               int state=chooser.showSaveDialog(null);
               File file=chooser.getSelectedFile();
               if(file!=null&&state==JFileChooser.APPROVE_OPTION){
                 try{  String content=saveComputerProcess.getText();
                       StringReader read=new StringReader(content);
                       BufferedReader in= new BufferedReader(read);
                       FileWriter outOne=new FileWriter(file);
                       BufferedWriter out= new BufferedWriter(outOne);
                       String str=null;
                       while((str=in.readLine())!=null){
                          out.write(str);
                          out.newLine();
                       }
                      in.close();
                      out.close();
                 } 
                 catch(IOException e1){}
               }
           }
       }
       public static void main(String args[]){
           new CalculatorWindow();
       }  
    }
      

  11.   

    import java.util.LinkedList;
    import javax.swing.*;
    import java.awt.event.*;
    public class HandleBack implements ActionListener{
        LinkedList<String> list;
        JTextField resultShow,showComputerProcess;          
        HandleBack(LinkedList<String> list,JTextField t1,JTextField t2){
            this.list=list;
            resultShow=t1;
            showComputerProcess=t2; 
        }
        public void actionPerformed(ActionEvent e){
            if(list.size()==1){                               
               String num=(String)list.getFirst();
               if(num.length()>=1){
                     num=num.substring(0,num.length()-1);
                     list.set(0,num);                  
                     resultShow.setText(num);
                     showComputerProcess.setText(""+num);
               }
               else{
                     list.removeLast();                  
                     resultShow.setText("0");
                     showComputerProcess.setText("0");
               }
            }
            else if(list.size()==3){
               String num=(String)list.getLast();
               if(num.length()>=1){
                     num=num.substring(0,num.length()-1);
                     list.set(2,num);                  
                     resultShow.setText(num);
                     showComputerProcess.setText(num);
               }
               else{
                     list.removeLast();                  
                     resultShow.setText("0");
                     showComputerProcess.setText("0");
               }
           }
        }
    }
      

  12.   

    import java.awt.*;
    import java.awt.event.*;
    import java.math.BigDecimal;
    import javax.swing.*;//创建计算器Calculator类,实现ActionListener接口
    public class Calculater implements ActionListener
    {
    //定义变量和按钮数组
    private String[] names = {"Backspace","CE","C","+","7","8","9","-",
    "4","5","6","*","1","2","3","/","0","+/-",".","="};
    private JButton[] buttonArray = new JButton[names.length];
    private boolean append = false;//默认追加为false
    private String operator = "+";//默认运算符为“+”
    private String s1 = "0";//默认字符为0
    private String ss = "0";//默认字符为0
    //创建可以显示20个字符的文本框
    JTextField jtf = new JTextField(20);

    //构造方法
    public Calculater() {}
    public Calculater(String title)
    {
    //创建窗口、面板,并设置面板布局为网格布局
    JFrame jf = new JFrame(title);
    JPanel jp = new JPanel();
    jp.setLayout(new GridLayout(5,4));
    //依次添加按钮到面板中,并为按钮注册监听器
    for (int i = 0; i < buttonArray.length; i++)
    {
    buttonArray[i] = new JButton(names[i]);
    buttonArray[i].addActionListener(this);
    jp.add(buttonArray[i]);
    }
    //添加文本框到窗体中
    jf.add(jtf,BorderLayout.NORTH);
    jf.add(jp);//添加面板到窗体中
    jtf.setHorizontalAlignment(JTextField.RIGHT);//设置文本框的水平方向为右
    jtf.setText("0");//设置初始文本为0
    jtf.setEditable(false);//设置文本框为不可编辑状态
    //设置窗体属性
    jf.pack();//系统自动设置大小和位置
    jf.setVisible(true);
    jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    //实现监听接口的actionPerformed方法
    public void actionPerformed(ActionEvent e)
    {
    String comm = e.getActionCommand();
    if(comm.matches("\\d")) //用正则表达式判断输出的是否是0~9
    {
    if(append)//如果是,追加显示
    {
    String temp = jtf.getText();
    jtf.setText(temp + comm);
    }else  //如果不是,显示该字符并将追加设置为true
    {
    jtf.setText(comm);
    append = true;
    }
    }
    else if(comm.equals("."))//输入小数点时
    {
    String temp = jtf.getText();
    if(temp.indexOf(".")== -1 && append){//当输入的文本中没有小数点时
    jtf.setText(temp+comm);
    append = true; //输入小数点后继续追加
    }else if(!append){ //当字符串开始时候先输入 " . " 则直接输出" 0. "
    jtf.setText("0"+comm);
    append = true;
    }
    }else if("+-*/".indexOf(comm)!= -1)//输入加减乘除符号时,
    {//以下运算应该注意数据类型,尤其是大数字和浮点数及int数在运算中的区别
    operator = comm;
    s1 = jtf.getText();
    double d3 = Double.parseDouble(s1);
    double d4 = Double.parseDouble(ss);
    BigDecimal bd3 = new BigDecimal(d3+"");
    BigDecimal bd4 = new BigDecimal(d4+"");
    if(operator.equals("+"))//加法时
    {
    d3 = bd3.add(bd4).doubleValue();
    ss = d3+"";
    jtf.setText(ss);
    }else if(operator.equals("-"))//减法时
    {
    if(d4 == 0.0){
    ss = s1;
    jtf.setText(ss);
    }else{
    d3 = bd4.subtract(bd3).doubleValue();
    ss = d3+"";
    jtf.setText(ss);
    }
    }else if(operator.equals("*"))//乘法时
    {
    if(d4 == 0.0){
    ss = s1;
    jtf.setText(ss);
    }else
    {
    d3 = bd3.multiply(bd4).doubleValue();
    ss = d3+"";
    jtf.setText(ss);
    }
    }else if(operator.equals("/"))//除法时
    {
    if(d4 == 0.0)
    {
    ss = s1;
    jtf.setText(s1);
    }else
    {
    d3 = bd4.divide(bd3,15,BigDecimal.ROUND_HALF_UP).doubleValue();
    }
    ss = d3+"";
    jtf.setText(ss);
    }
    append = false; //不继续追加
    }else if(comm.equals("="))//输入等号时,计算加减乘除的结果
    {
    String s2 = jtf.getText();
    double d1 = Double.parseDouble(ss);
    double d2 = Double.parseDouble(s2);
    BigDecimal bd1 = new BigDecimal(d1+"");
    BigDecimal bd2 = new BigDecimal(d2+"");
    if(operator.equals("+"))
    {
    d1 = bd1.add(bd2).doubleValue();
    }else if(operator.equals("-"))
    {
    d1 = bd1.subtract(bd2).doubleValue();
    }else if(operator.equals("*"))
    {
    d1 = bd1.multiply(bd2).doubleValue();
    }else if(operator.equals("/"))//精确计算浮点除法
    {
    if(d2!=0.0)
    {
    d1 = bd1.divide(bd2,15,BigDecimal.ROUND_HALF_UP).doubleValue();
    }
    }
    ss = "0";
    jtf.setText(d1+"");
    append = false; //不继续追加
    }else if(comm.equals("CE")||comm.equals("C"))//输入CE或C时
    {
    jtf.setText("0");
    ss = "0";
    append = false;
    }else if(comm.equals("+/-"))//改变数值的正负号
    {
    String temp = jtf.getText();
    if(!append)
    {
    jtf.setText("-");
    append = true;
    }else if(temp.startsWith("-"))//如果字符串以负号开头
    {
    jtf.setText(temp.substring(1));
    }else
    {
    jtf.setText("-" + temp);
    }
    }else if(comm.equals("Backspace"))//输入Backspace时,退回一个字符
    {
    String temp = jtf.getText();
    if(temp.length()>0)
    jtf.setText(temp.substring(0,temp.length()-1));
    }
    }
    //主方法
    public static void main(String[] args)
    {
    //创建名为Calculator的计算器对象
    new Calculater("Calculater");
    }
    }
    import java.awt.*;
    import java.awt.event.*;
    import java.math.BigDecimal;
    import javax.swing.*;//创建计算器Calculator类,实现ActionListener接口
    public class Calculater implements ActionListener
    {
    //定义变量和按钮数组
    private String[] names = {"Backspace","CE","C","+","7","8","9","-",
    "4","5","6","*","1","2","3","/","0","+/-",".","="};
    private JButton[] buttonArray = new JButton[names.length];
    private boolean append = false;//默认追加为false
    private String operator = "+";//默认运算符为“+”
    private String s1 = "0";//默认字符为0
    private String ss = "0";//默认字符为0
    //创建可以显示20个字符的文本框
    JTextField jtf = new JTextField(20);

    //构造方法
    public Calculater() {}
    public Calculater(String title)
    {
    //创建窗口、面板,并设置面板布局为网格布局
    JFrame jf = new JFrame(title);
    JPanel jp = new JPanel();
    jp.setLayout(new GridLayout(5,4));
    //依次添加按钮到面板中,并为按钮注册监听器
    for (int i = 0; i < buttonArray.length; i++)
    {
    buttonArray[i] = new JButton(names[i]);
    buttonArray[i].addActionListener(this);
    jp.add(buttonArray[i]);
    }
    //添加文本框到窗体中
    jf.add(jtf,BorderLayout.NORTH);
    jf.add(jp);//添加面板到窗体中
    jtf.setHorizontalAlignment(JTextField.RIGHT);//设置文本框的水平方向为右
    jtf.setText("0");//设置初始文本为0
    jtf.setEditable(false);//设置文本框为不可编辑状态
    //设置窗体属性
    jf.pack();//系统自动设置大小和位置
    jf.setVisible(true);
    jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    //实现监听接口的actionPerformed方法
    public void actionPerformed(ActionEvent e)
    {
    String comm = e.getActionCommand();
    if(comm.matches("\\d")) //用正则表达式判断输出的是否是0~9
    {
    if(append)//如果是,追加显示
    {
    String temp = jtf.getText();
    jtf.setText(temp + comm);
    }else  //如果不是,显示该字符并将追加设置为true
    {
    jtf.setText(comm);
    append = true;
    }
    }
    else if(comm.equals("."))//输入小数点时
    {
    String temp = jtf.getText();
    if(temp.indexOf(".")== -1 && append){//当输入的文本中没有小数点时
    jtf.setText(temp+comm);
    append = true; //输入小数点后继续追加
    }else if(!append){ //当字符串开始时候先输入 " . " 则直接输出" 0. "
    jtf.setText("0"+comm);
    append = true;
    }
    }else if("+-*/".indexOf(comm)!= -1)//输入加减乘除符号时,
    {//以下运算应该注意数据类型,尤其是大数字和浮点数及int数在运算中的区别
    operator = comm;
    s1 = jtf.getText();
    double d3 = Double.parseDouble(s1);
    double d4 = Double.parseDouble(ss);
    BigDecimal bd3 = new BigDecimal(d3+"");
    BigDecimal bd4 = new BigDecimal(d4+"");
    if(operator.equals("+"))//加法时
    {
    d3 = bd3.add(bd4).doubleValue();
    ss = d3+"";
    jtf.setText(ss);
    }else if(operator.equals("-"))//减法时
    {
    if(d4 == 0.0){
    ss = s1;
    jtf.setText(ss);
    }else{
    d3 = bd4.subtract(bd3).doubleValue();
    ss = d3+"";
    jtf.setText(ss);
    }
    }else if(operator.equals("*"))//乘法时
    {
    if(d4 == 0.0){
    ss = s1;
    jtf.setText(ss);
    }else
    {
    d3 = bd3.multiply(bd4).doubleValue();
    ss = d3+"";
    jtf.setText(ss);
    }
    }else if(operator.equals("/"))//除法时
    {
    if(d4 == 0.0)
    {
    ss = s1;
    jtf.setText(s1);
    }else
    {
    d3 = bd4.divide(bd3,15,BigDecimal.ROUND_HALF_UP).doubleValue();
    }
    ss = d3+"";
    jtf.setText(ss);
    }
    append = false; //不继续追加
    }else if(comm.equals("="))//输入等号时,计算加减乘除的结果
    {
    String s2 = jtf.getText();
    double d1 = Double.parseDouble(ss);
    double d2 = Double.parseDouble(s2);
    BigDecimal bd1 = new BigDecimal(d1+"");
    BigDecimal bd2 = new BigDecimal(d2+"");
    if(operator.equals("+"))
    {
    d1 = bd1.add(bd2).doubleValue();
    }else if(operator.equals("-"))
    {
    d1 = bd1.subtract(bd2).doubleValue();
    }else if(operator.equals("*"))
    {
    d1 = bd1.multiply(bd2).doubleValue();
    }else if(operator.equals("/"))//精确计算浮点除法
    {
    if(d2!=0.0)
    {
    d1 = bd1.divide(bd2,15,BigDecimal.ROUND_HALF_UP).doubleValue();
    }
    }
    ss = "0";
    jtf.setText(d1+"");
    append = false; //不继续追加
    }else if(comm.equals("CE")||comm.equals("C"))//输入CE或C时
    {
    jtf.setText("0");
    ss = "0";
    append = false;
    }else if(comm.equals("+/-"))//改变数值的正负号
    {
    String temp = jtf.getText();
    if(!append)
    {
    jtf.setText("-");
    append = true;
    }else if(temp.startsWith("-"))//如果字符串以负号开头
    {
    jtf.setText(temp.substring(1));
    }else
    {
    jtf.setText("-" + temp);
    }
    }else if(comm.equals("Backspace"))//输入Backspace时,退回一个字符
    {
    String temp = jtf.getText();
    if(temp.length()>0)
    jtf.setText(temp.substring(0,temp.length()-1));
    }
    }
    //主方法
    public static void main(String[] args)
    {
    //创建名为Calculator的计算器对象
    new Calculater("Calculater");
    }
    }
      

  13.   

    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    public class OperationButton extends JButton{
       String operateSign;
       public OperationButton(String s){
          super(s);
          operateSign=s;
          setForeground(Color.red);
       }
       public String getOperateSign(){
          return operateSign;
       }
    }