public class Calculate extends JFrame { /**
 * @param args
 */

JFrame f=new JFrame();
JTextField t1=new JTextField(4);
JComboBox c=new JComboBox();
JTextField t2=new JTextField(4);
JLabel l=new JLabel("=");
JTextField t4=new JTextField(4);
public void frame(){
f.setLayout(new GridLayout(6,1));
        c.addItem("+");
c.addItem("-");
c.addItem("*");
c.addItem("/");
JButton b=new JButton("计算");
b.addActionListener(new js()); 
JPanel panel=new JPanel();
JPanel panel1=new JPanel();
JPanel panel2=new JPanel();
JPanel panel3=new JPanel();
JPanel p1=new JPanel();
JPanel p2=new JPanel(); 
f.add(p1);
f.add(panel);
f.add(panel1);
f.add(panel2);
f.add(panel3);
f.add(p2);
p1.add(t1);
p1.add(c);
p1.add(t2);
p1.add(l);
p1.add(t4);

p2.add(b);
f.setSize(300,300);
f.setVisible(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
Calculate a=new Calculate();
a.frame();



// TODO 自动生成方法存根 }
class js implements ActionListener{
public void actionPerformed(ActionEvent arg0) { String s1=t1.getText();
String s2=t2.getText();
int op=c.getSelectedIndex();
    
    try{
     Double a=Double.parseDouble(s1);
     Double b=Double.parseDouble(s2);
     Double c=null;
     switch(op){
     case 0: c=a+b; t4.setText(c.toString());break;
     case 1: c=a-b; t4.setText(c.toString());break;
     case 2: c=a*b; t4.setText(c.toString());break;
     case 3: c=a/b; t4.setText(c.toString());break;
    
     }       
    
    
    }catch(Exception e1){
     e1.printStackTrace();
     JOptionPane.showMessageDialog(null,"请输入数字");
    }
}

}

}
最近刚学完GUI和事件,写了个简单计算器。但是我想改改,用按钮方式点那数字,那是不是说我要设置9个按钮,然后添加9个兼听器,然后再建九个
这样的类 class js implements ActionListener{
public void actionPerformed(ActionEvent arg0) {}
反正我想法是这样的,觉得很有时间,所以就想尝试下。但后来发觉当我用jButton new 一个新的按钮 b0, 设置第二个兼听器的时候,也nwe 了个类名ling()(个类似上面 js()),但发觉似乎不可用,大家有什么办法吗?  只是想实现通过鼠标点0-9 数字 计算加减乘除 

解决方案 »

  1.   

    只要一个监听器就好了
    public void actionPerformed(ActionEvent e)
    有这个参数e传进来  
    你就可以判断点的是那个按钮
    if(e.getSource() == xxx ) {
      /do coding
    }就是你每个按钮都要添加这个监听器
      

  2.   

    0-9这10个按钮都要加兼听器,10个这样的类?  class js implements ActionListener{ 
    public void actionPerformed(ActionEvent arg0) {} 
      

  3.   

    一个监听器就行了,我刚学j2se的时候也做了个计算器,一个监听器,可是现在忘记怎么实现了,,但看了一楼的又知道怎么回事了,3q,,
      

  4.   

    一个监听器就可以了,,,用参数来判断。。 
    当然10个监听器也可以。。
    import java.awt.*; 
    import java.awt.event.*; 
    import javax.swing.*; public class Calculator extends JFrame { private Container container; 
    private GridBagLayout layout; 
    private GridBagConstraints constraints; 
    private JTextField displayField;//计算结果显示区 
    private String lastCommand;//保存+,-,*,/,=命令 
    private double result;//保存计算结果 
    private boolean start;//判断是否为数字的开始 public Calculator() { super("Calculator"); 
    container=getContentPane(); 
    layout=new GridBagLayout(); 
    container.setLayout(layout); 
    constraints=new GridBagConstraints(); 
    start=true; 
    result=0; 
    lastCommand = "="; 
    displayField=new JTextField(20); 
    displayField.setHorizontalAlignment(JTextField.RIGHT); 
    constraints.gridx=0; 
    constraints.gridy=0; 
    constraints.gridwidth=4; 
    constraints.gridheight=1; 
    constraints.fill=GridBagConstraints.BOTH; 
    constraints.weightx=100; 
    constraints.weighty=100; 
    layout.setConstraints(displayField,constraints); 
    container.add(displayField); 
    ActionListener insert = new InsertAction(); 
    ActionListener command = new CommandAction(); 
    addButton("Backspace",0,1,2,1,insert); 
    addButton("CE",2,1,1,1,insert); 
    addButton("C",3,1,1,1,insert); 
    addButton("7",0,2,1,1,insert); 
    addButton("8",1,2,1,1,insert); 
    addButton("9",2,2,1,1,insert); 
    addButton("/",3,2,1,1,command); 
    addButton("4",0,3,1,1,insert); 
    addButton("5",1,3,1,1,insert); 
    addButton("6",2,3,1,1,insert); 
    addButton("*",3,3,1,1,command); 
    addButton("1",0,4,1,1,insert); 
    addButton("2",1,4,1,1,insert); 
    addButton("3",2,4,1,1,insert); 
    addButton("-",3,4,1,1,command); 
    addButton("0",0,5,1,1,insert); 
    addButton("+/-",1,5,1,1,insert);//只显示"-"号,"+"没有实用价值 
    addButton(".",2,5,1,1,insert); 
    addButton("+",3,5,1,1,command); 
    addButton("=",0,6,4,1,command); 
    setSize(300,300); 
    setVisible(true); } 
    private void addButton(String label,int row,int column,int with,int height,ActionListener listener) { JButton button=new JButton(label); 
    constraints.gridx=row; 
    constraints.gridy=column; 
    constraints.gridwidth=with; 
    constraints.gridheight=height; 
    constraints.fill=GridBagConstraints.BOTH; 
    button.addActionListener(listener); 
    layout.setConstraints(button,constraints); 
    container.add(button); 

    private class InsertAction implements ActionListener { public void actionPerformed(ActionEvent event) { String input=event.getActionCommand(); 
    if (start) { 
    displayField.setText(""); 
    start=false; 
    if(input.equals("+/-")) 
    displayField.setText(displayField.getText()+"-"); 
    } if(!input.equals("+/-")) { 
    if(input.equals("Backspace")) { 
    String str=displayField.getText(); 
    if(str.length()>0) 
    displayField.setText(str.substring(0,str.length()-1)); 
    }else if(input.equals("CE")||input.equals("C")) { 
    displayField.setText("0"); 
    start=true; 
    }else 
    displayField.setText(displayField.getText()+input); 



    private class CommandAction implements ActionListener { public void actionPerformed(ActionEvent evt) { 
    String command=evt.getActionCommand(); 
    if(start) { 
    lastCommand=command; 
    }else { 
    calculate(Double.parseDouble(displayField.getText())); 
    lastCommand=command; 
    start=true; 


    } public void calculate(double x) { 
    if (lastCommand.equals("+")) result+= x; 
    else if (lastCommand.equals("-")) result-=x; 
    else if (lastCommand.equals("*")) result*=x; 
    else if (lastCommand.equals("/")) result/=x; 
    else if (lastCommand.equals("=")) result=x; 
    displayField.setText(""+ result); 
    } public static void main(String []args) { 
    Calculator calculator=new Calculator(); 
    calculator.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    } }