1

我有一个关于我的程序的问题,该程序包含一个类Calculator,它应该实现一个能够使用+*使用 type操作的计算器double

我也为那个计算器写了一个 GUI,它已经很好用了,但是按钮不起作用,虽然我已经实现了这个功能

public void actionPerformed(ActionEvent e)

我猜这个错误一定是在这个函数的某个地方。我只是不知道为什么按钮的功能不起作用。这是代码。

public class Calculator extends JFrame implements ActionListener {

    Calculator () {}

    JTextField parameter1;
    JTextField parameter2;
    JTextField ergebnis;
    JFrame window;
    Container cont;
    /* this function works fine */
    public void calculator_GUI() {     
       builds the GUI of the calculator,     
       this.window = new JFrame("Calculator");
       window.setSize(300,300);
       this.parameter1 = new JTextField("Parameter1...", 10);
       parameter1.addActionListener(this);
       this.parameter2 = new JTextField("Parameter1...", 10);
       parameter2.addActionListener(this);
       this.ergebnis = new JTextField("Ergebnis...", 5);
       ergebnis.addActionListener(this);
       JButton multiplizieren = new JButton("*");
       parameter1.addActionListener(this);
       JButton addieren = new JButton("+");
       parameter1.addActionListener(this);
       JButton clear = new JButton("clear");
       parameter1.addActionListener(this);
       this.cont = window.getContentPane();

       FlowLayout flowLayout = new FlowLayout(FlowLayout.RIGHT);
       cont.setLayout(flowLayout);

       cont.add(parameter1);
       cont.add(parameter2);
       cont.add(ergebnis);
       cont.add(multiplizieren);
       cont.add(addieren);
       cont.add(clear);
       window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       window.pack();
       window.setVisible(true);;
   }

   public void actionPerformed(ActionEvent e) {  
       String label = e.getActionCommand();
       if (label.equals("*")) {
           String a = parameter1.getText();
           String b = parameter2.getText();
           double zahl1=Double.parseDouble(a);
           double zahl2=Double.parseDouble(b);
           double result = zahl1*zahl2;
           String c = String.valueOf(result);
           ergebnis.setText(c);
       }
       else if (label.equals("+")) {
           String a = parameter1.getText();
           String b = parameter2.getText();
           double zahl1=Double.parseDouble(a);
           double zahl2=Double.parseDouble(b);
           double result = zahl1+zahl2;
           String c = String.valueOf(result);
           ergebnis.setText(c);
      }

      else if (label.equals("clear")) {
           String z = "";
           ergebnis.setText(z);
      }
      else { 
           window.dispose(); 
      }
}


  public static void main (String[] args) {   
      Calculator MyCalculator = new Calculator();
      MyCalculator.calculator_GUI();
  }
}
4

3 回答 3

2

问题是@kuporific 所说的,但implements ActionListener您可以:

  1. 创建私人课程,或
  2. 使用匿名类

Swing Action使用(匿名类)的示例

JButton multiplizieren = new JButton("*");
multiplizieren.addActionListener(new ActionListener(){
         @Override
         public void actionPerformed(ActionEvent evt){
                String a = parameter1.getText();
                String b = parameter2.getText();
                double zahl1=Double.parseDouble(a); // this can cause NumberFormatException
                double zahl2=Double.parseDouble(b); // this can cause NumberFormatException
                double result = zahl1*zahl2;
                String c = String.valueOf(result);
                ergebnis.setText(c);
         }
});
JButton addieren = new JButton("+");
addieren.addActionListener((new ActionListener(){
         @Override
         public void actionPerformed(ActionEvent evt){
            String a = parameter1.getText();
            String b = parameter2.getText();
            double zahl1=Double.parseDouble(a);
            double zahl2=Double.parseDouble(b);
            double result = zahl1+zahl2;
            String c = String.valueOf(result);
            ergebnis.setText(c);
         }
});

因此,ìf-else您可以隔离每个按钮的关联操作,而不是到处使用。

此外,您可以在文本字段中添加仅接受数字的 documentFilter,或使用JFormattedTextField

于 2013-06-27T16:37:06.230 回答
2

看起来你有一个复制粘贴错误:

这个:

    JButton multiplizieren = new JButton("*");
    parameter1.addActionListener(this);
    JButton addieren = new JButton("+");
    parameter1.addActionListener(this);
    JButton clear = new JButton("clear");
    parameter1.addActionListener(this);

应该:

    JButton multiplizieren = new JButton("*");
    multiplizieren.addActionListener(this);
    JButton addieren = new JButton("+");
    addieren.addActionListener(this);
    JButton clear = new JButton("clear");
    clear.addActionListener(this);
于 2013-06-27T16:29:11.043 回答
1

将 actionListener 添加到按钮而不是文本字段

于 2013-06-27T16:34:52.753 回答