2017-03-16 2 views
0

Wie aktualisiere ich programmatisch die Farbe von N JComponents (Hintergrund und Vordergrund), indem ich eine Color Variable c? Beispiel:Swing: Verweis auf Farbe in Komponenten beibehalten

Ich habe 10 JButton und 5 JCheckbox. Ich habe die Variable:

Color mainColor = Color.RED; 

ich alle Hintergründe gesetzt und foregrounds zu mainColor. Jetzt, wenn ich will, dass alle von ihnen blau sind, mainColor = Color.BLUE wird nicht funktionieren. Normalerweise würde ich etwas tun wie mainColor.setRgb(0,0,255), aber aus welchem ​​Grund auch immer, Color erlaubt dies nicht.

Was kann ich tun? Andere Problemumgehungen werden ebenfalls geschätzt. Die Komponenten sind über viele Panels und Frames verteilt und einige erscheinen dynamisch, so dass ich lieber keine Liste führen möchte. Auch nicht alle von ihnen erfordern sowohl Vordergrund und Hintergrund gemalt werden.

Antwort

0

Sie müssen die Farbe für alle JComponents zurücksetzen. Der Einfachheit halber könnten Sie eine Hilfsmethode erstellen, die dies für Sie erledigt.

void changeMainColor(Color c){ 
    this.mainColor = c; 
    for (JComponents jc : this.myComponentsList){ 
     jc.setForeground(c); 
     jc.setBackground(c); 
    } 
} 

EDIT

Wenn Sie nicht wollen, eine Liste der Komponenten von Hand zu halten, die Beobachter-Muster verwenden:

Für eine noch größere Abstraktion, verwenden Publisher/Subscriber-Muster. Jedes Mal, wenn Sie die Hauptfarbe ändern, wird die Tatsache "veröffentlicht". Alle Komponenten, die als "Abonnenten" für dieses Ereignis registriert sind, können dann die bereitgestellten Informationen (die Farbe) verwenden, um das zu tun, was sie wollen (Hintergrund ändern usw.).

Ich würde vorschlagen zu lesen über sie in der Viererbande Buch (Design Patterns: Elemente wiederverwendbarer Software Object-Oriented), aber einige schnelle Referenzen sind unter:

https://sourcemaking.com/design_patterns/observer und https://abdulapopoola.com/2013/03/12/design-patterns-pub-sub-explained/

+0

Danke, aber bitte lesen Sie die ganze Frage. Ich sagte, ich suche nach einem Workaround. Ich kann in meinem speziellen Fall keine "myComponentsList" behalten. Auch nicht alle von ihnen brauchen setForeground und setBackground –

+0

Entschuldigung wegen dieser Lory, muss ich falsch gelesen haben. lass mich bearbeiten – Edd

0

hässliche Art: Unterklasse java.awt.Color, Delegieren an eine echte Color-Instanz mit einem Mutator für den Delegierten.

Verwandte Themen