package CalcTest;import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.ScrollPane;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.text.StyleConstants;
import javax.swing.text.StyleContext;import org.w3c.dom.Text;import com.sun.org.apache.bcel.internal.generic.JsrInstruction;public class Calc extends JFrame implements ActionListener{
public final int temp = 8;//定义文本框最多输入字符
String copy;
boolean enter;
double d1,d2;
JPanel ButtonPanel,okPanel;
JButton jb[];
JTextField jtf;
JScrollPane jsp;
JButton jia,jian,cheng,chu,dian,dengyu;
JMenuBar jmb;
JMenu bjM,ckM,bzM;
JTextArea jta;
JMenuItem copyM,pasteM,closeM,helpM,gyM;
JButton b1;
boolean start;
public Calc(){
enter = true;
start =true;


Container c = getContentPane();
//**以下为菜单之类的
jmb = new JMenuBar();
bjM = new JMenu("编辑(E)");
ckM = new JMenu("查看(V)");
bzM = new JMenu("帮助(H)");

copyM = new JMenuItem("复制(C)");
pasteM = new JMenuItem("粘贴(V)");
closeM = new JMenuItem("关闭(E)");
helpM = new JMenuItem("帮助主题");
gyM = new JMenuItem("关于计算器");

jmb.add(bjM);
jmb.add(ckM);
jmb.add(bzM);

bjM.add(copyM);
bjM.add(pasteM);
ckM.add(closeM);
bzM.add(helpM);
bzM.add(gyM);
setJMenuBar(jmb);//显示菜单条
//**以上为菜单类的


//**以下注册菜单监听器
copyM.addActionListener(this);
pasteM.addActionListener(this);
closeM.addActionListener(this);
helpM.addActionListener(this);
gyM.addActionListener(this);
//**以上注册菜单监听器



jtf = new JTextField(35);
jtf.setText("0.");
jtf.setEditable(false);
jtf.setComponentOrientation(java.awt.ComponentOrientation.RIGHT_TO_LEFT);//设置文本框从右往左

//**以下为按钮设置
jb = new JButton[10];

jia = new JButton("+");
jian = new JButton("-");
cheng = new JButton("*");
chu = new JButton("\\");
dian = new JButton(".");
dengyu = new JButton("=");

jia.addActionListener(this);
jian.addActionListener(this);
cheng.addActionListener(this);
chu.addActionListener(this);
dian.addActionListener(this);
dengyu.addActionListener(this);

ButtonPanel = new JPanel();
for(int i=0;i<jb.length;i++){
jb[i] = new JButton(Integer.toString(i));//实现将整形转字符串
jb[i].setForeground(new Color(99,00,00));
jb[i].addActionListener(Calc.this);//为每个按钮注册监听器
}
ButtonPanel.setLayout(new GridLayout(4,4));//设置格子布局4行4列
ButtonPanel.add(jb[1]);
ButtonPanel.add(jb[2]);
ButtonPanel.add(jb[3]);
ButtonPanel.add(jia);
ButtonPanel.add(jb[4]);
ButtonPanel.add(jb[5]);
ButtonPanel.add(jb[6]);
ButtonPanel.add(jian);
ButtonPanel.add(jb[7]);
ButtonPanel.add(jb[8]);
ButtonPanel.add(jb[9]);
ButtonPanel.add(cheng);
ButtonPanel.add(jb[0]);
ButtonPanel.add(dian);
ButtonPanel.add(dengyu);
ButtonPanel.add(chu);
//**以上为按钮设置

//**以下为帮助主题
jta = new JTextArea(5,10);
jsp = new JScrollPane(jta);
jta.setEditable(false);
jta.setFont(new Font("楷体",Font.BOLD,20));
jta.append("执行简单计算\n");
jta.append("1.  键入计算的第一个数字。\n");
jta.append("2.  单击“+”执行加、“-”执行减、“*”执行乘或“/”执行除。\n");
jta.append("3.  键入计算的下一个数字。\n");
jta.append("4.  输入所有剩余的运算符和数字。\n");
jta.append("5.  单击“=”。\n");

//**以上为帮助主题

//**以下为清零
okPanel = new JPanel();
b1 = new JButton("C");
okPanel.add(b1);
//**以上为清零
b1.addActionListener(this);//注册监听器
c.add(jtf,BorderLayout.NORTH);
c.add(ButtonPanel,BorderLayout.CENTER);
c.add(okPanel,BorderLayout.SOUTH);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


}
public void actionPerformed(ActionEvent e) {
Object temp = e.getSource();
String input = e.getActionCommand();
System.out.println(input);

if(start){
jtf.setText("");//按下按钮的一瞬间清空
start = false;
}
jtf.setText(jtf.getText());




//将按钮挨个转换为字符串
for(int i=0;i<jb.length;i++){
if(temp==jb[i] && enter==true){
jtf.setText(jtf.getText() + Integer.toString(i));
}
}

//**以下为MemuItem进行事件
if(temp==copyM){
copy = jtf.getText();
}
if(temp==pasteM){
jtf.setText(copy);
}

if(temp==closeM){
dispose();
System.exit(0);
}
if(temp==gyM){
//JOptionPane.showMessageDialog(gyM,jsp);
JOptionPane.showMessageDialog(gyM, jsp);
}
if(temp == helpM){
JOptionPane.showMessageDialog(helpM,"使用“计算器”可以完成任意的通常借助手持计算器来完成的标准运算。 \n “计算器”可用于基本的算术运算,比如加减运算等。 \n  同时它还具有科学计算器的功能,比如对数运算和阶乘运算等。");
}
//**以上为MemuItem进行事件
}
public static void main(String[] args) {
Calc cc = new Calc();
cc.setTitle("计算器 v1.0");
cc.setSize(400, 400);
cc.setBounds(300, 300, 300, 300);
cc.setVisible(true);
} }麻烦大家帮我写下加法和等于

解决方案 »

  1.   

    参考一下import javax.swing.JFrame;
    import javax.swing.JButton;
    import javax.swing.JPanel;
    import javax.swing.JTextField;
    import java.awt.GridLayout;
    import java.awt.BorderLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    public class TestJiSuanQi implements ActionListener{
    private String op1 = "0";//运算数
    private String operator = "+";//运算符
    private boolean append = false;
    JTextField jtf = new JTextField("",10);
    public void actionPerformed(ActionEvent ae) {
    String comm = ae.getActionCommand();
    if("0123456789".indexOf(comm)!=-1){
    if(append){
    String temp = jtf.getText();
    jtf.setText(temp+comm);
    }else{
    jtf.setText(comm);
    append =  true;
    }
    }else if(("+-*/".indexOf(comm)!=-1)){
    //保存第一个数和运算符,状态转换
    op1 = jtf.getText();//op1第一个数 
    operator = comm;
    append = false;
    }else if("=".equals(comm)){
    String op2 = jtf.getText();//op2第二个数
    double d1 = Double.parseDouble(op1);
    double d2 = Double.parseDouble(op2);
    if(operator.equals("+")){
    d1 = d1 + d2 ;
    }else if(operator.equals("-")){
    d1 = d1 - d2;
    }else if(operator.equals("*")){
    d1 = d1 * d2;
    }else {
    d1 = d1 / d2;
    }
    jtf.setText(d1+"");
    append = false;
    }else if(".".equals(comm)){
    String temp = jtf.getText();
    if(temp.indexOf(".")==-1){
    jtf.setText(temp+".");
    append = true;
    }
    }
    else if("+/-".equals(comm)){
    String temp = jtf.getText();
    if(temp.startsWith("-")){
    jtf.setText(temp.substring(1));
    }else{
    jtf.setText("-"+temp);
    }
    append = true;
    }
    else if("C".equals(comm) || "CE".equals(comm)){
    jtf.setText("0");
    append = false;
    }else if("Back".equals(comm)){
    String temp = jtf.getText();
    if(temp.length()>0){
    temp = temp.substring(0,temp.length()-1);
    jtf.setText(temp);
    }
    }
    }
    public TestJiSuanQi(){
    JFrame jf = new JFrame("计算器");
    JPanel jp = new JPanel();
    jp.setLayout(new GridLayout(5,4));
    String[] label = {"Back","CE","C","+","7","8","9","-","4","5","6","*","1","2","3","/","0","+/-",".","="};
    JButton[] jb = new JButton[label.length];
    for(int i=0;i<jb.length;i++){
    jb[i] = new JButton(label[i]);
    jb[i].addActionListener(this);
    jp.add(jb[i]);
    }
    jf.add(jp);
    jf.add(jtf,BorderLayout.NORTH);
    jf.setLocation(300,200);//设计出现的位置
    jf.setSize(300,200);
    jf.setVisible(true);
    jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
    public static void main(String[] args) {
    new TestJiSuanQi();
    }}
      

  2.   

    无聊中~~
    package calc;import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Container;
    import java.awt.FlowLayout;
    import java.awt.Font;
    import java.awt.GridLayout;
    import java.awt.ScrollPane;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JMenu;
    import javax.swing.JMenuBar;
    import javax.swing.JMenuItem;
    import javax.swing.JOptionPane;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JTextArea;
    import javax.swing.JTextField;
    import javax.swing.text.StyleConstants;
    import javax.swing.text.StyleContext;import org.w3c.dom.Text;import com.sun.org.apache.bcel.internal.generic.JsrInstruction;public class Calc extends JFrame implements ActionListener{
        public final int temp = 8;//定义文本框最多输入字符
        String copy;
        boolean enter;
        double d1,d2;
        JPanel ButtonPanel,okPanel;
        JButton jb[];
        JTextField jtf;
        JScrollPane jsp;
        JButton jia,jian,cheng,chu,dian,dengyu;
        JMenuBar jmb;
        JMenu bjM,ckM,bzM;
        JTextArea jta;
        JMenuItem copyM,pasteM,closeM,helpM,gyM;
        JButton b1;
        String curData = "";
        double opate1 = 0.0;
        double opate2 = 0.0;
        String calcType = null;
        boolean appand = false;
        boolean start;
        public Calc(){
            enter = true;
            start =true;
            
            
            Container c = getContentPane();
            //**以下为菜单之类的
            jmb = new JMenuBar();
            bjM = new JMenu("编辑(E)");
            ckM = new JMenu("查看(V)");
            bzM = new JMenu("帮助(H)");
            
            copyM = new JMenuItem("复制(C)");
            pasteM = new JMenuItem("粘贴(V)");
            closeM = new JMenuItem("关闭(E)");
            helpM = new JMenuItem("帮助主题");
            gyM = new JMenuItem("关于计算器");
            
            jmb.add(bjM);
            jmb.add(ckM);
            jmb.add(bzM);
            
            bjM.add(copyM);
            bjM.add(pasteM);
            ckM.add(closeM);
            bzM.add(helpM);
            bzM.add(gyM);
            setJMenuBar(jmb);//显示菜单条
            //**以上为菜单类的
            
            
            //**以下注册菜单监听器
            copyM.addActionListener(this);
            pasteM.addActionListener(this);
            closeM.addActionListener(this);
            helpM.addActionListener(this);
            gyM.addActionListener(this);
            //**以上注册菜单监听器
            
            
            
            jtf = new JTextField(35);
            jtf.setText("0.");
            jtf.setEditable(false);
            jtf.setComponentOrientation(java.awt.ComponentOrientation.RIGHT_TO_LEFT);//设置文本框从右往左
            
            //**以下为按钮设置
            jb = new JButton[10];
            
            jia = new JButton("+");
            jian = new JButton("-");
            cheng = new JButton("*");
            chu = new JButton("/");
            dian = new JButton(".");
            dengyu = new JButton("=");
            
            jia.addActionListener(this);
            jian.addActionListener(this);
            cheng.addActionListener(this);
            chu.addActionListener(this);
            dian.addActionListener(this);
            dengyu.addActionListener(this);
            
            ButtonPanel = new JPanel();
            for(int i=0;i<jb.length;i++){
                jb[i] = new JButton(Integer.toString(i));//实现将整形转字符串
                jb[i].setForeground(new Color(99,00,00));
                jb[i].addActionListener(Calc.this);//为每个按钮注册监听器
            }
            ButtonPanel.setLayout(new GridLayout(4,4));//设置格子布局4行4列
            ButtonPanel.add(jb[1]);
            ButtonPanel.add(jb[2]);
            ButtonPanel.add(jb[3]);
            ButtonPanel.add(jia);
            ButtonPanel.add(jb[4]);
            ButtonPanel.add(jb[5]);
            ButtonPanel.add(jb[6]);
            ButtonPanel.add(jian);
            ButtonPanel.add(jb[7]);
            ButtonPanel.add(jb[8]);
            ButtonPanel.add(jb[9]);
            ButtonPanel.add(cheng);
            ButtonPanel.add(jb[0]);
            ButtonPanel.add(dian);
            ButtonPanel.add(dengyu);
            ButtonPanel.add(chu);
            //**以上为按钮设置
            
            //**以下为帮助主题
            jta = new JTextArea(5,10);
            jsp = new JScrollPane(jta);
            jta.setEditable(false);
            jta.setFont(new Font("楷体",Font.BOLD,20));
            jta.append("执行简单计算\n");
            jta.append("1.  键入计算的第一个数字。\n");
            jta.append("2.  单击“+”执行加、“-”执行减、“*”执行乘或“/”执行除。\n");
            jta.append("3.  键入计算的下一个数字。\n");
            jta.append("4.  输入所有剩余的运算符和数字。\n");
            jta.append("5.  单击“=”。\n");
            
            //**以上为帮助主题
            
            //**以下为清零
            okPanel = new JPanel();
            b1 = new JButton("C");
            okPanel.add(b1);
            //**以上为清零
            b1.addActionListener(this);//注册监听器
            c.add(jtf,BorderLayout.NORTH);
            c.add(ButtonPanel,BorderLayout.CENTER);
            c.add(okPanel,BorderLayout.SOUTH);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            
            
        }
        public void actionPerformed(ActionEvent e) {
            Object temp = e.getSource();
            String input = e.getActionCommand();
            System.out.println(input);
            
            if(start){
                jtf.setText("");//按下按钮的一瞬间清空
                start = false;
            }
            
            
            JButton bt = (JButton)temp;
            String text = bt.getText(); 
            
            
            
            //将按钮挨个转换为字符串
            for(int i=0;i<jb.length;i++){
                if(temp==jb[i] && enter==true){
                    //jtf.setText(jtf.getText() + Integer.toString(i));
                 jtf.setText(Integer.toString(i));
                }
            }
            
            //**以下为MemuItem进行事件
            if(temp==copyM){
                copy = jtf.getText();
            }
            if(temp==pasteM){
                jtf.setText(copy);
            }
            
            if(temp==closeM){
                dispose();
                System.exit(0);
            }
            if(temp==gyM){
                //JOptionPane.showMessageDialog(gyM,jsp);
                JOptionPane.showMessageDialog(gyM, jsp);
            }
            if(temp == helpM){
                JOptionPane.showMessageDialog(helpM,"使用“计算器”可以完成任意的通常借助手持计算器来完成的标准运算。 \n “计算器”可用于基本的算术运算,比如加减运算等。 \n  同时它还具有科学计算器的功能,比如对数运算和阶乘运算等。");
            }
            // **以上为MemuItem进行事件
    // **以下为运算事件
            if("1234567890".indexOf(text) != -1){
             setCurrentDate(text);
            }else if("+-*/".indexOf(text) != -1){
             claculate(calcType);
             calcType = text;
             appand = false;
            } else if ("=".indexOf(text) != -1) {
             claculate(calcType);
             calcType = null;
             curData = String.valueOf(opate1);
             appand = false;
            }else if(".".indexOf(text) != -1){
             if(!curData.equals("") && curData.indexOf(".") == -1){
             curData = curData + ".";
             }
            }else if("C".indexOf(text) != -1){
             calcType = null;
             curData = "";
             opate1 = 0.0;
            }
            jtf.setText(curData);
    } // 保存当前数据值
        public void setCurrentDate(String _pValue){
            if(_pValue != null && !_pValue.equals("")){
             if(appand){
             curData = curData + jtf.getText();
             }else{
             curData = jtf.getText();
             }
             appand = true;
            }else{
             curData = "";
            }
        }
        public void claculate(String _pType){
         if(_pType == null){
         opate1 = Double.parseDouble(curData);
    } else if (calcType.equals("+")) {
    opate1 = opate1 + Double.parseDouble(curData);
    } else if (calcType.equals("-")) {
    opate1 = opate1 - Double.parseDouble(curData);
    } else if (calcType.equals("*")) {
    opate1 = opate1 * Double.parseDouble(curData);
    } else if (calcType.equals("/")) {
    opate1 = opate1 / Double.parseDouble(curData);

    }
         //curData = String.valueOf(opate1);
        
        }
        public static void main(String[] args) {
            Calc cc = new Calc();
            cc.setTitle("计算器 v1.0");
            cc.setSize(400, 400);
            cc.setBounds(300, 300, 300, 300);
            cc.setVisible(true);
        }    }
      

  3.   

    我写的一个小型的开源的计算器 abacus 1.0,在这里
    http://www.oschina.net/code/snippet_736932_13725