我正在尝试用Java构建一个TicTacToe游戏,并将Swing用于GUI。因为我不太了解Swing,所以我正在使用JButton创建图块。最初,所有磁贴都是空白的。
现在,当用户单击空白图块(即空白按钮)时,我想在该按钮上放置一个“ 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();
             }

10-06 13:01
查看更多