好吧,我正在創建一個Tic Tac Toe GUI。我目前有一個3x3按鈕的工作框架,將更改爲X或O.我的問題是實現按鈕頂部的JLabel。該標籤會跟蹤是誰轉身,並會從「O's turn」或「X's turn」中改變,但我似乎無法讓JLabel更新(只會噴出錯誤)。這裏是我的代碼的一部分,展示瞭如何實現這一點。程序運行良好,但一旦我添加(turn.setText(「O's turn」);)我得到錯誤。在ActionEvent中更改JLabel的文本
任何反饋,爲什麼這可能不工作,將不勝感激。
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class TicTacToe extends JFrame {
XOButton[] xob = new XOButton[9];
private JLabel turn;
public static int state;
public TicTacToe() {
super("TicTacToe");
//add XOButtons to panel
JPanel center = new JPanel();
state = 0;
JLabel turn = new JLabel("X's turn");
center.setLayout(new GridLayout(3, 3, 2, 2));
//action listener
ButtonListener bl = new ButtonListener();
for (int i = 0; i < 9; i++) {
xob[i] = new XOButton();
xob[i].addActionListener(bl);
center.add(xob[i]);
}
//add panel to frame
setLayout(new BorderLayout());
add(center, BorderLayout.CENTER);
add(turn, BorderLayout.NORTH);
}
//inner action listener class
private class ButtonListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent ae) {
for (int i = 0; i < 9; i++) {
if(ae.getSource() == xob[i] && xob[i].getState() == XOButton.NONE && state == 0) {
xob[i].setState(XOButton.X);
state = 1;
//turn.setText("O's turn");
} else if(ae.getSource() == xob[i] && xob[i].getState() == XOButton.NONE && state == 1) {
xob[i].setState(XOButton.O);
state = 0;
}
}
}
}
}
'「...我得到錯誤」' - 你會想告訴我們這些錯誤以及指出哪一行導致它。否則,我們很難理解你的問題可能是什麼。 –
請參閱編輯以回答。你正在遮蔽'turn'變量,解決方案不是這樣做的。 –