我对我的程序有疑问,该程序包含一个单Calculator
个课程,该课程应该实现一个能够与+
和*
一起使用的计算器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();
}
}
答案 0 :(得分: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);
答案 1 :(得分:2)
问题是@kuporific所说的,但你可以在顶层容器中执行implements ActionListener
,而不是:{/ p>
使用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
答案 2 :(得分:1)
将actionListener添加到按钮而不是textfield