JButton soll durch anklicken die Farbe wechseln

Hallo,
könnt Ihr mir bei folgender Sache helfen:

ich habe vier JButtons 2015,2016,2017,2018 und möchte das durch anklicken des jeweiligen Buttons sich die Hintergrundfarbe vom JButton ändert.

Jedoch soll die Farbe vom Button 2015 wieder die alte werden, wenn ich auf 2016 klicke!
Ich weiss das man mit variable.setBackground(Color bg) den Hintergrund des Buttons ändern kann, aber was muss ich machen um das zu erreichen was ich vorhabe?
 
Also ich habe in Netbeans mit JFrame eine komplette GUI erstellt und möchte jetzt gerne das folgende Buttons die Farbe wechseln (siehe Anlage).

Für jeden Button wurde ein Objekt erzeugt und es gibt für jedes Jahr eine Methode die so aufgebaut ist:
private void year_2015ActionPerformed(java.awt.event.ActionEvent evt) {


}
ich weiss wie man durch anklicken die Farbe eines Buttons ändert, aber ich verstehe nicht wie ich es darstellen kann das wenn ich auf 2016 klicke und 2015 wieder grau werden soll. Bitte helf mir
 

Anhänge

  • buttons.PNG
    buttons.PNG
    2,5 KB · Aufrufe: 31
Naja ich würde zunächst die Buttons mal in eine Liste oder ein Array packen. Dann kannst du ganz einfach auf alle Buttons zugreifen. Ansonsten must du tausende von if abfragen machen.
 
Na mit der If-else Abfrage solltest du das doch packen oder?
Klickst du auf diesen Button, so setze den Button so, den so und den anderen so. - Und das ganze für alle Buttons.
Das ganze geht mit einem Array natürlich kompakter.
 
Moin,
Für jeden Button wurde ein Objekt erzeugt und es gibt für jedes Jahr eine Methode die so aufgebaut ist:
private void year_2015ActionPerformed(java.awt.event.ActionEvent evt) {


}
ich weiss wie man durch anklicken die Farbe eines Buttons ändert, aber ich verstehe nicht wie ich es darstellen kann das wenn ich auf 2016 klicke und 2015 wieder grau werden soll
Da steht doch hoffentlich noch mehr in der Methode, oder ?? 😕
Zudem hoffe ich, dass es dazu auch passende ActionListender gibt ... 😱

Dann: wenn Du in "year_2016ActionPerformed" die Farbe für den Button 2016 änderst, dann setzt Du sie halt für den Button 2015 zurück ...

Poste mal Deinen gesamten Code ... hier will doch keiner rumraten !

Gruß Klaus
 
@VfL_Freak

Zudem hoffe ich, dass es dazu auch passende ActionListender gibt ... 😱

Die Methode:
private void year_2015ActionPerformed(java.awt.event.ActionEvent ){}
sieht mir sehr nach dem GUI Builder von Netbeans aus. Wenn ich mich recht entsinne, dann erzeugt der Builder im QC einen Listener und ruft in dem Listener eifnach nur die o.g. Methode auf. Somit muss sich der user damit nicht "rumschlagen". D.h. das wird schon alles seinen Rechten weg gehen, solange der TE nicht am Code rumgefummelt hat.

Off-Topic: mMn ist der GUI Builder für den Anfang nicht gut, da man das alles mal selbst programmiert haben muss um zu verstehen was da eig. passiert.

Gruß
Robert
 
Der GUI Builder ist schon ok, er erstellt halt je nach Einstellung relativ viele anonyme Klassen und eben für jeden Button eine eigene Mehode anstatt einen Handler für alle Buttons.

Tip an den Thread-Ersteller.
Das Ganze klingt stark nach einer Hausaufgabe, deswegen wird man sich hier hüten, dir vollständigen Code zu liefern. Was du kriegst, sind Tips, wie du deinen Code verbessern kannst. Dazu musst du aber erst mal Code HABEN und keine leeren Methoden.

1. Die Methode zum Ändern des Hintergrunds nennt sich setBackGround.
2. Beispiel für ein Array von Buttons: JButton[] allButtons = new JButton[] {button1, button2, button3}
3. Du sparst dir eine Menge Arbeit, indem du nur EINEN Handler schreibst und den an alle Buttons zuweist (oder von deinen vielen Handlern aus jeweils die gleiche Methode aufrufst). Under der Annahme, dass du mit Java 8 arbeitest, empfehle ich dir einen funktionalen Handler, also:
Methodenname: private void handleButtonAction(ActionEvent evt)
Zuweisung mit: aButton.addActionListener(this::handleButton)
In der Methode holst du dir dann den Button mit ((JButton)evt.getSource())


Dann mach genau das, was du in deinem Text geschrieben hast. Du musst die Worte nur noch in Befehle umwandeln: Setze die Hintergrundfarbe aller Buttons auf "nicht gewählt". Dann setze die Farbe des angeklickten Buttons auf "gewählt".


Für das Ganze gibt es auch noch einen Automatismus, setzt sich zusammen aus setSelected() und ButtonGroup (viel Spaß beim Googeln, lies ein paar Tutorials durch). JToggleButtons haben bereits 2 verschiedene Darstellungen für gewählt und nicht gewählt. Vielleicht kommt dir das entgegen.
Falls du aber mit ToggleButtons arbeiten willst, verwende keinen ActionListener, sondern einen ItemListener.
 

Zurück
Oben