使用 ActionListener 更改标签文本

Changing label text using ActionListener

我正在尝试制作一个程序,允许我在单击不同的按钮时更改标签的文本,但是无论我单击哪个按钮,标签的文本都会更改为 [=11= 的最后一行].

import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

public class Gui extends JFrame{
private JButton add;
private JButton subtract;
private JButton multiply;
private JButton divide;
private JTextField box1;
private JTextField box2;
private JLabel label;
private JButton ansbutton;
public String operator;


public Gui(){
    super("Luke's Calculator");
    setLayout(new FlowLayout());
    add = new JButton("Add");
    subtract = new JButton("Subtract");
    multiply = new JButton("Multiply");
    divide = new JButton("Divide");
    add(add);
    add(subtract);
    add(multiply);
    add(divide);
    box1 = new JTextField(10);
    label = new JLabel();
    box2 = new JTextField(10);
    ansbutton = new JButton("Answer");
    add(box1);
    add(label);
    add(box2);
    add(ansbutton);

    HandlerClass handler = new HandlerClass();
    add.addActionListener(handler);
    subtract.addActionListener(handler);
    multiply.addActionListener(handler);
    divide.addActionListener(handler);
    ansbutton.addActionListener(handler);
}
public class HandlerClass implements ActionListener{
    public double sum;
    public double fn;
    public double sn;

    public void actionPerformed(ActionEvent e) {
        if(add.isSelected())
            operator = "+";
        label.setText("+");

        if(subtract.isSelected())
            operator = "-";
        label.setText("-");

        if(multiply.isSelected())
            operator = "x";
        label.setText("x");

        if(divide.isSelected())
            operator = "/";
        label.setText("/");

        if(ansbutton.isSelected())
            JOptionPane.showMessageDialog(null, "The answer is " + sum, "Answer", JOptionPane.PLAIN_MESSAGE);
        }       
    }
}

在你的代码中

if(add.isSelected())
        operator = "+";
    label.setText("+");

if 后面没有花括号,所以只有设置运算符是有条件的,标签总是会改变。所以最后一个标签总是赢。

if(add.isSelected()) {
        operator = "+";
    label.setText("+");
}

或者

if(add.isSelected())
        operator = "+";
...
label.setText(operator)

您的问题是您没有在 if 语句中包含 label.setText() 方法。因此,它将执行每个 label.setText() 调用并继续覆盖文本,直到它默认为您方法中的最终调用。最好使用大括号,即使是一行 if 语句,也可以避免这个问题。

 if(e.getSource() == add) {
    operator = "+";
    label.setText("+");
}

此外,由于只有一个条件为真,您可以使用 else if