使用 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
。
我正在尝试制作一个程序,允许我在单击不同的按钮时更改标签的文本,但是无论我单击哪个按钮,标签的文本都会更改为 [=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
。