2016-10-08 4 views
1

Ich habe ein Problem über Änderungsknopfhintergrund. Ich benutze Netbeans Gui Builder für Build-Formular. Ich versuche, den Hintergrund der Schaltfläche zu ändern, wenn der zweite Rahmen geöffnet ist, und ihn zurückzuschalten, wenn der zweite Rahmen geschlossen wird.Kann Schaltflächenhintergrund nicht von einer anderen Methode ändern/ändern - 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"); 
    } 
} 

dies ist meine Update-Methode von der ersten Klasse.

Ich habe Fenster-Listener zum zweiten Frame hinzugefügt.

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"); 
} 

Ich habe 2 Testoutput aber die Farbe der Schaltfläche hat sich nicht geändert.

Was kann ich tun, um dieses Problem zu beheben?

Antwort

1

Sie erstellen ein neues Hausaufgabenobjekt in Ihrer formWindowOpened(...)-Methode, eines, das völlig unabhängig von dem angezeigten Hausaufgabenobjekt ist, und das Ändern des Status des neuen Objekts hat keine Auswirkungen auf das angezeigte Objekt.

Ein einfaches und WRONG Lösung ist, statische Felder oder Methoden zu verwenden.

Statt eine einfache Lösung ist es, die calss mit Ihrer formWindowOpened(...) Methode eine gültige Referenz auf das angezeigte Objekt Hausaufgaben zu geben, etwas, das mit einem Konstruktor Parameter oder einer setHomework(...) Methode durchgeführt werden kann.

Eine viel bessere und noch einfachere Lösung:

  • Machen Sie das zweite Fenster einen modaler JDialog, keine JFrame
  • Auf diese Weise Hausaufgaben wissen, wenn das Fenster geöffnet ist und kann seine eigene Schaltfläche Farben. Wenn sich das 2. Fenster öffnet, wird der Programmablauf in der aufrufenden Klasse gehalten und erst wieder beim Schließen des 2. Fensters wieder aufgenommen - genau wie mit einem JOptionPane.

Weitere Informationen hierzu finden Sie in The Use of Multiple JFrames, Good/Bad Practice?

Als Nebenwirkung werden wollen Sie und Java naming conventions nutzen lernen. Variablennamen sollten alle mit einem niedrigeren Buchstaben beginnen, während Klassennamen mit einem Großbuchstaben beginnen. Wenn wir dies lernen und diesem Beispiel folgen, können wir Ihren Code besser verstehen und den Code anderer besser verstehen.

Verwandte Themen