Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java Swing中更改按钮文本时出现问题_Java_Swing - Fatal编程技术网

在Java Swing中更改按钮文本时出现问题

在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

我试图测试通过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" -> {
    ...
}

因为您将文本更改为
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()
更新该命令