2013-11-24 202 views
0

我的程序應該是當點擊一個按鈕時,將其刪除並將其替換爲標籤。在我的程序中,按鈕被點擊時被移除,但標籤不會被添加,直到單擊另一個按鈕,這將刪除帽子按鈕,但那個標籤不會顯示....等等。下面是代碼:Java - 添加標籤/刪除按鈕

//adds buttons to screen if corresponding 
//boolForButtons is true, else it 
//displays label 
public void addButtons() { 
    for (int i = 0; i < 10; i++) { 
     for (int j = 0; j < 10; j++) { 
      if (boolForButtons[i][j]) { 
       add(buttons[i][j]); 
      } else { 
       remove(buttons[i][j]); 
       add(labels[i][j]); 
      } 
     } 
    } 
} 

//refreshs the screen 
public void refreshButtons() { 
    revalidate(); 
    repaint(); 

    addButtons(); 
} 

//if button is clicked 
public class event implements ActionListener { 

    @Override 
    public void actionPerformed(ActionEvent e) { 
     for (int i = 0; i < 10; i++) { 
      for (int j = 0; j < 10; j++) { 
       //set the button clicked to not show on the screen 
       if (e.getSource() == buttons[i][j]) { 
        boolForButtons[i][j] = false; 
       } 
      } 
     } 

     refreshButtons(); 
    } 
} 

感謝 -

+0

1)爲了更好地提供幫助,請發佈[SSCCE](http://sscce.org/)。 2)對於一個空間中的許多組件,請使用['CardLayout'](http://docs.oracle.com/javase/7/docs/api/java/awt/CardLayout.html),如[簡單示例](http://stackoverflow.com/a/5786005/418556)。 –

回答

1

嘗試調用重繪()後取消呼叫addButtons()。在您的代碼中,重新繪製組件後會添加標籤。

public void refreshButtons() { 
     addButtons(); 
     revalidate(); 
     repaint(); 
    } 
1

你應該叫revalidaterepaint後添加按鈕。改變你的方法位置。

//refreshs the screen 
public void refreshButtons() { 
    addButtons(); // Add button here. 
    revalidate(); 
    repaint(); 
}