java - 无法更新 Java Swing 中的 JButton

标签 java swing jbutton repaint actionevent

我正在尝试使用 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/

相关文章:

java - 无法使用附加库/jar 文件、javac 类路径进行编译

java - 如何从 PHP 服务器上的 android 获取值

java - Eclipse:显示类文件的代码源?

java - 在 Eclipse 中我使用 JFrame 但没有出现窗口

java - 通过 JButton 访问存储的变量

java - JButton 位于单独的类文件中

Java Swing - 按钮不改变宽度大小

java - 如何为 JBCO(Java ByteCode Obfuscator)指定入口点类和 jar 存档?

java - 如何使用箭头键在屏幕上移动图形?

java - 避免在对 JButton 执行操作后卡住