2014-11-14 2 views
0

Я пытаюсь построить TicTacToe игры в в Java и использование Качели для графического интерфейса пользователя. Поскольку я мало знаю Swing, я использую JButton для создания плиток. Первоначально все плитки пустые. Теперь, когда пользователь нажимает на пустую плитку, то есть пустую кнопку, я хочу поставить «X» или «O» изображением на этой кнопке. Но я не могу этого сделать. Любая помощь приветствуется. Я уже пробовал вещи, но не работал.Невозможно обновить JButton в Java Swing

Вот мой код:

/* 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; 
     } 
    } 

} 

}

ответ

1

Неясно, почему вы добавляете кнопку снова в 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(); 
      } 
+0

спасибо большое .. :). –