[英]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.