2016-10-08 14 views
1

ボタンの背景を変更する際に問題があります。私はビルドフォームのためのnetbeans GUIビルダーを使用しています。私は、2番目のフレームが開いているときにボタンの背景を変更しようとしていて、2番目のフレームが閉じると戻します。他のメソッドからボタンの背景を変更/変更できません - 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"); 
    } 
} 

これはファーストクラスからの私の更新メソッドです。

ウィンドウリスナーを2番目のフレームに追加しました。

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つのテスト出力を得ましたが、ボタンの色は変わりませんでした。

この問題を解決するにはどうすればよいですか?

答えて

1

formWindowOpened(...)の方法で新しい宿題オブジェクトを作成していますが、表示されている宿題オブジェクトとはまったく無関係のものです。新しいオブジェクトの状態を変更しても、表示された宿題オブジェクトには影響しません。

単純なの間違いソリューションは静的なフィールドまたはメソッドを使用することです。

は、代わりに1つの簡単な解決策は、あなたのformWindowOpened(...)方法表示宿題オブジェクトへ有効な参照、コンストラクタのパラメータまたはsetHomework(...)方法で行うことができるものとcalssを与えることです。

はるかに優れ、さらには簡単な解決策:

  • は、第二のウィンドウを作るモーダルJDialogのではなく、JFrameの
  • ウィンドウが開いていると、独自のボタンの色を設定することができたときに宿題が知っているこの方法です。 2番目のウィンドウが開くと、呼び出しクラスのプログラムフローが保留になり、JOptionPaneを使用する場合と同様に、2番目のウィンドウが閉じると再開されます。

これに関する詳細については、あなたが学び、Java naming conventionsを使用したいと思うでしょう、余談としてThe Use of Multiple JFrames, Good/Bad Practice?

を参照してください。変数名はすべて小文字で始まり、クラス名は大文字で始める必要があります。これを学んでこれに従うことで、コードをよりよく理解でき、他者のコードをよりよく理解できるようになります。

関連する問題