在Java Swing中更改按钮文本时出现问题
我试图测试通过actionlistener更改按钮文本的方法。这是我的密码:在Java Swing中更改按钮文本时出现问题,java,swing,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; JButto
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" -> {
...
}
因为您将文本更改为
X
,但检查它是否等于X
case "X" -> {
...
}
turn=“X”
案例“x”
一个是大写X,一个不是
提示:如果您认为某个开关是“穷举的”(case语句应该始终匹配),请添加一个default
,并使用抛出新的IllegalStateException()代码>或类似的。或者将开关用作表达式,在这种情况下,java将免费提供该表达式。turn=“X”
案例“x”
一个是大写X,一个不是
提示:如果您认为某个开关是“穷举的”(case语句应该始终匹配),请添加一个default
,并使用抛出新的IllegalStateException()代码>或类似的。或者将开关用作表达式,在这种情况下,java将免费为您提供该开关。定义常量。使用常量可以防止像您这样的错误。
下面是我建议您根据建议的更改更改的代码部分。代码后面的解释
公共类TCTBack实现ActionListener{
私有静态最终字符串NONE=“-”;
私有静态最终字符串O=“O”;
私有静态最终字符串X=“X”;
公共TCTBack(){
button1=新的JButton(无);
}
已执行的公共无效操作(操作事件e){
字符串actionCommand=e.getActionCommand();
字符串newVal;
开关(动作命令){
案例无:
newVal=X;
打破
案例O:
newVal=无;
打破
案例十:
newVal=O;
打破
违约:
newVal=null;
JOPtionPane.showMessageDialog(框架,
行动司令部,
“未处理”,
JOptionPane。警告消息);
}
如果(newVal!=null){
按钮1.setActionCommand(newVal);
按钮1.setText(newVal);
}
}
}
使用接受单个String
参数的构造函数创建JButton
时,可以设置按钮的文本及其操作命令。传递给方法actionPerformed()
的ActionEvent
对象包含此操作命令字符串
但是,调用类JButton
的方法setText()
不会更改操作命令,因此您还需要通过方法setActionCommand()
定义常量来更新该命令。使用常量可以防止像您这样的错误。
下面是我建议您根据建议的更改更改的代码部分。代码后面的解释
公共类TCTBack实现ActionListener{
私有静态最终字符串NONE=“-”;
私有静态最终字符串O=“O”;
私有静态最终字符串X=“X”;
公共TCTBack(){
button1=新的JButton(无);
}
已执行的公共无效操作(操作事件e){
字符串actionCommand=e.getActionCommand();
字符串newVal;
开关(动作命令){
案例无:
newVal=X;
打破
案例O:
newVal=无;
打破
案例十:
newVal=O;
打破
违约:
newVal=null;
JOPtionPane.showMessageDialog(框架,
行动司令部,
“未处理”,
JOptionPane。警告消息);
}
如果(newVal!=null){
按钮1.setActionCommand(newVal);
按钮1.setText(newVal);
}
}
}
使用接受单个String
参数的构造函数创建JButton
时,可以设置按钮的文本及其操作命令。传递给方法actionPerformed()
的ActionEvent
对象包含此操作命令字符串
但是,调用类JButton
的方法setText()
不会更改操作命令,因此您还需要通过方法setActionCommand()
更新该命令