我正在尝试使用 Java 构建 TicTacToe 游戏,并使用 Swing 进行 GUI。由于我不太了解 Swing,因此我使用 JButton 来创建图 block 。最初,所有图 block 都是空白的。 现在,当用户单击空图 block (即空按钮)时,我想在该按钮上放置一个“X”或“O”描绘图像。但我无法做到这一点。任何帮助表示赞赏。我已经尝试过了,但没有成功。
这是我的代码:
/* Showing only required code */
public void run(){
/* Creating blank JButtons */
for (int i = 0; i < 3; i++) {
for(int j = 0; j<3; j++){
tile[i][j] = new JButton("");
tile[i][j].setActionCommand("Tile: (" + String.valueOf(i) + "," + String.valueOf(i) + ")");
/* tile[i][j] has setActionCommand as "Tile: (i,j)" */
panel.add(tile[i][j]);
}
}
panel.setBounds(140, 170, 300, 300);
add(panel);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
/* HERE LIES THE MAIN PROBLEM AS BUTTONS ARE NOT UPDATED AS EXPECTED*/
public void actionPerformed(ActionEvent e) {
// when lefttop corner tile is clicked
if("Tile: (0,0)".equals(e.getActionCommand())){
if(tileDone[0][0] == false){ // checking if its still empty
if(currentPlayer.equals("X")){ // checking if current player is "X"
tile[0][0] = new JButton(new ImageIcon("/home/kaustubh/Desktop /java/TicTacToe/X.png"));
panel.add(tile[0][0]);
panel.repaint();
this.repaint();
System.err.println();
}
else{
tile[0][0] = new JButton(new ImageIcon("/home/kaustubh/Desktop/java/TicTacToe/O.png"));
panel.add(tile[0][0]);
panel.repaint();
this.repaint();
System.err.println();
}
tileDone[0][0] = false;
}
}
}
}
最佳答案
目前尚不清楚为什么要在 actionPerformed()
中再次添加该按钮。如果您打算再次添加该按钮,则首先需要删除旧按钮。相反,您可能只想更新图标。
public void actionPerformed(ActionEvent e) {
// when lefttop corner tile is clicked
if("Tile: (0,0)".equals(e.getActionCommand())){
if(tileDone[0][0] == false){ // checking if its still empty
if(currentPlayer.equals("X")){ // checking if current player is "X"
// here...
tile[0][0].setIcon(new ImageIcon("/home/kaustubh/Desktop /java/TicTacToe/X.png"));
//panel.add(tile[0][0]); // remove this
panel.repaint();
this.repaint();
System.err.println();
}
关于java - 无法更新 Java Swing 中的 JButton,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26939749/