2016-10-08 45 views
1

我有一個關於修改按鈕背景的問題。我正在使用NetBeans GUI構建器來構建表單。我在第二幀打開時嘗試更改按鈕背景,並在第二幀關閉時將其返回。從另一種方法不能更改/修改按鈕背景 - JAVA

public void update(boolean x){ 
    if(x==true){ 
     circleButton.setOpaque(true); 
     circleButton.setBackground(new java.awt.Color(0, 0, 0)); 

     System.out.println("testoutput"); 
    } 
} 

這是我第一堂課的更新方法。

我添加了窗口監聽器到第二幀。

private void formWindowOpened(java.awt.event.WindowEvent evt) {         
    isitopen = true; 
    //this is first class which includes button 
    homework hwork = new homework(); 

    hwork.update(isitopen); 

    System.out.println("testoutput2"); 
} 

我得到了2個testoutput,但按鈕的顏色沒有改變。

我能做些什麼來解決這個問題?

回答

1

您正在formWindowOpened(...)方法中創建一個新的作業對象,其中一個與顯示的作業對象完全無關,並且更改新對象的狀態將不會影響顯示的作業對象。

一個簡單的和錯誤解決方案是使用靜態字段或方法。

而不是一個簡單的解決方案是給CALSS與formWindowOpened(...)方法有效的參考所顯示的作業對象的東西,可以用一個構造函數的參數或setHomework(...)方法來完成。

一個更好的和更簡單的解決方案:

  • 使第二窗口模態的JDialog,沒有一個JFrame
  • 這樣,當窗口打開並且可以設置自己的按鈕顏色的功課就知道了。當第二個窗口打開時,調用類中的程序流將暫停,只有在第二個窗口關閉時纔會恢復 - 就像使用JOptionPane一樣。

更多關於此,請參閱The Use of Multiple JFrames, Good/Bad Practice?

順便說一句,你將要學習和使用Java naming conventions。變量名應該全部以小寫字母開頭,而類名則以大寫字母開頭。瞭解這一點,並遵循這一點將使我們能夠更好地理解您的代碼,並讓您更好地理解其他代碼。