[英]Having issues changing button text in Java Swing
我正在尝试测试通过 actionlistener 更改按钮文本的方法。 这是我的代码:
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class TCTBack implements ActionListener {
JFrame frame;
JPanel panel;
JLabel label1;
JButton button1;
String turn;
public TCTBack() {
turn = "-";
panel = new JPanel();
panel.setSize(500, 500);
frame = new JFrame();
frame.setSize(500,500);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(panel);
panel.setLayout(null);
label1 = new JLabel("Interactive Button Test");
label1.setBounds(10,20,80,25);
panel.add(label1);
button1 = new JButton("Button");
button1.setBounds(10,80,80,25);
button1.addActionListener(this);
panel.add(button1);
frame.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
switch (turn) {
case "-" -> {
turn = "X";
button1.setText("X");
}
case "x" -> {
turn = "O";
button1.setText("O");
}
case "O" -> {
turn = "-";
button1.setText("-");
}
}
}
public static void main(String[] args) {
new TCTBack();
}
}
它会更改按钮的文本一次,但在我再次单击该按钮后不会更改它。 我的目标是能够将按钮的文本从默认值(“-”)更改为 X,然后更改为 O,然后返回到 -。 任何帮助将不胜感激,谢谢。 另外,我是提问的新手,所以如果我遗漏了任何信息,请告诉我。
因为您将文本更改为X
但您检查它是否等于x
case "X" -> {
...
}
turn = "X"
case "x"
一个是大写的 X,一个不是。
提示:如果您认为 switch 是“详尽的”(应始终匹配 case 语句),请使用throw new IllegalStateException();
添加default
throw new IllegalStateException();
或一些这样的。 或者使用 switch 作为表达式,在这种情况下,java 将免费为您提供。
定义常量。 使用常量可以防止像您这样的错误。
以下是我建议您根据提议的更改进行更改的代码部分。 代码后的说明。
public class TCTBack implements ActionListener {
private static final String NONE = "-";
private static final String O = "O";
private static final String X = "X";
public TCTBack() {
button1 = new JButton(NONE);
}
public void actionPerformed(ActionEvent e) {
String actionCommand = e.getActionCommand();
String newVal;
switch (actionCommand) {
case NONE:
newVal = X;
break;
case O:
newVal = NONE;
break;
case X:
newVal = O;
break;
default:
newVal = null;
JOPtionPane.showMessageDialog(frame,
actionCommand,
"Unhandled",
JOptionPane.WARNING_MESSAGE);
}
if (newVal != null) {
button1.setActionCommand(newVal);
button1.setText(newVal);
}
}
}
当您使用接受单个String
参数的构造函数创建JButton
,您设置了按钮的文本及其操作 command 。 传递给方法actionPerformed()
的ActionEvent
对象包含此操作命令字符串。
但是,调用JButton
类的setText()
方法不会更改action command ,因此您还需要通过方法setActionCommand()
更新它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.