Farbe von Buttons mehrmals ändern

javanoob2000

Mitglied
Moin moin,
ich beschäftige mich momentan ausgiebig mit der Erstellung von Buttons.
Ich habe es geschafft Buttons eine Größe, einen Platz und eine Farbe zuzuordnen. Diese Farbe kann mit einem Mausklick durch eine if Schleife verändert werden.
Jedoch möchte ich nun durch einen weiteren Mausklick die vorherige Farbe zurück bekommen. Dies gelingt mir jedoch nicht. Kann mir jemand von euch weiterhelfen ?

Java:
import java.awt.event.*;
import javax.swing.*; 

public class JButtonExample2 extends JFrame implements ActionListener
{
  JButton rotButton;
  JButton gruenButton;
  public static void main(String[] argv)
  {
    JButtonExample2 mainApp = new JButtonExample2();
  }

  public JButtonExample2()
  {
    super("JButton Example");
    setBounds(0, 0, 900, 900);
    getContentPane().setLayout(null);
    setDefaultCloseOperation(EXIT_ON_CLOSE);

    rotButton   = new JButton("");  
    gruenButton = new JButton("");
   
    rotButton.setBackground(new Color(245, 255, 255));
    gruenButton.setBackground(new Color(245, 255, 255));
   
    rotButton.setBounds(50, 50, 170, 150);
    gruenButton.setBounds(250, 50, 170, 150);
   
    rotButton.addActionListener( this );     
    gruenButton.addActionListener( this );
   
    getContentPane().add( rotButton ); 
    getContentPane().add( gruenButton );
   
    setVisible(true);
  }

  public void actionPerformed(ActionEvent e)
  {
    if(e.getSource() == rotButton )
    {
      rotButton.setBackground(new Color(255, 0, 0));
    }
    else if(e.getSource() == gruenButton)
    {
      gruenButton.setBackground(new Color(0, 255, 0));
    }
  }
}
 

Javinner

Top Contributor
@javanoob2000
Du vergibst jedem Button gleich zu Beginn eine (primär) Farbe. Nun musst du in der Methode actionPerformed prüfen, um welchen Erzeuger es sich handelt und weil du schon dabei bist, prüfe doch gleich, ob der Erzeuger primäre Farbe aufweist. Wenn es zutrifft, Farbenwechsel zu der Sekundärfarbe, wenn nicht, zu der Primärfarbe.
Java:
    @Override
    public void actionPerformed(ActionEvent e)
    {

        if (e.getSource() == mButton && mButton.getBackground() == Color.RED)
        {
            mButton.setBackground(Color.GREEN);
        } else
        {
            mButton.setBackground(Color.RED);
        }

    }
 

javanoob2000

Mitglied
Vielen Dank @Javinner , das hat schon sehr geholfen
Jedoch hab ich noch ein kleines Problem...
Wenn ich den rotButton drücke wird er rot und wenn ich ihn noch einmal drücke wird er wieder weiß (so wie es sein soll)
Wenn ich jetzt den rotButton drücke wird er rot und wenn ich danach den gruenButton drücke (der momntan weiß ist) wir dieser grün (wie es sein soll). Jedoch wird dabei gleichzeitig der rotButton wieder weiß, obwohl dieser eigentlich rot bleiben sollte.
Hast du ne Ahnung was ich falsch mache ?
Java:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*; 

public class JButtonExample4 extends JFrame implements ActionListener
{
  JButton rotButton;
  JButton gruenButton;
  public static void main(String[] argv)
  {
    JButtonExample4 mainApp = new JButtonExample4();
  }

  public JButtonExample4()
  {
    super("JButton Example");
    setBounds(0, 0, 900, 900);
    getContentPane().setLayout(null);
    setDefaultCloseOperation(EXIT_ON_CLOSE);

    rotButton   = new JButton("");  
    gruenButton = new JButton("");
   
    rotButton.setBackground(Color.WHITE);
    gruenButton.setBackground(Color.WHITE);
   
    rotButton.setBounds(50, 50, 170, 150);
    gruenButton.setBounds(250, 50, 170, 150);
   
    rotButton.addActionListener( this );     
    gruenButton.addActionListener( this );
   
    getContentPane().add( rotButton ); 
    getContentPane().add( gruenButton );
   
    setVisible(true);
  }

   public void actionPerformed(ActionEvent e)
    {

        if (e.getSource() == rotButton && rotButton.getBackground() == Color.WHITE)
        {
            rotButton.setBackground(Color.RED);
        } else
        {
            rotButton.setBackground(Color.WHITE);
        } 
        if (e.getSource() == gruenButton && gruenButton.getBackground() == Color.WHITE)
        {
            gruenButton.setBackground(Color.GREEN);
        } else
        {
            gruenButton.setBackground(Color.WHITE);
        }

    }
}
 

Robat

Top Contributor
Naja überleg doch mal wann deine Bedingungen wahr/falsch sind und wann welcher Code ausgeführt wird.
Java:
if(e.getSource() == rotButton && rotButton.getBackground() == Color.WHITE) {
    ...
} else {
   ...
}
Soabald einer der beiden Bedingungen false ist, geht er in den else-Zweig .. bedeutet im Umkehrschluss aber auch, dass dein rotButton immer weiß gemacht wird wenn er nicht gedrückt wurde.
Du solltest lieber else-if nutzen anstatt nur if-else
 

javanoob2000

Mitglied
Super jetzt funktioniert es :)
Ich habe das Programm jetzt um einen Button (blauButton) erweitert
Hat jemand von euch eine Ahnung, wie ich folgendes hinbekomme:
Wenn zwei Buttons angeklickt worden sind (dann wären die Buttons zum Beispiel rot, blau,weiß), dann soll beim Anklicken des 3. Buttons die anderen beiden Buttons wieder weiß werden (also weiß,weiß,grün) (also so ähnlich wie bei einem Memory)
Java:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;  

public class JButtonExample4 extends JFrame implements ActionListener
{
  JButton rotButton;
  JButton gruenButton;
  JButton blauButton;
 
  public static void main(String[] argv)
  {
    JButtonExample4 mainApp = new JButtonExample4();
  }

  public JButtonExample4()
  {
    super("JButton Example");
    setBounds(0, 0, 900, 900);
    getContentPane().setLayout(null);
    setDefaultCloseOperation(EXIT_ON_CLOSE);

    rotButton   = new JButton("");   
    gruenButton = new JButton("");
    blauButton   = new JButton("");
   
    rotButton.setBackground(Color.WHITE);
    gruenButton.setBackground(Color.WHITE);
    blauButton.setBackground(Color.white);
   
    rotButton.setBounds(50, 50, 170, 150);
    gruenButton.setBounds(250, 50, 170, 150);
    blauButton.setBounds(450, 50, 170, 150);
   
    rotButton.addActionListener( this );     
    gruenButton.addActionListener( this );
    blauButton.addActionListener( this );   
   
    getContentPane().add( rotButton );  
    getContentPane().add( gruenButton );
    getContentPane().add( blauButton );
    setVisible(true);
  }

   public void actionPerformed(ActionEvent e)
    {

        if (e.getSource() == rotButton && rotButton.getBackground() == Color.WHITE)
        {
            rotButton.setBackground(Color.RED);
        }
        else if (e.getSource() == rotButton && rotButton.getBackground() == Color.red )
        {
            rotButton.setBackground(Color.WHITE);
        }  
        else if (e.getSource() == gruenButton && gruenButton.getBackground() == Color.WHITE)
        {
            gruenButton.setBackground(Color.GREEN);
        }
        else if (e.getSource() == gruenButton && gruenButton.getBackground() == Color.green)
        {
            gruenButton.setBackground(Color.WHITE);
        }
    else if (e.getSource() == blauButton && blauButton.getBackground() == Color.WHITE)
        {
            blauButton.setBackground(Color.BLUE);
        }
    else if (e.getSource() == blauButton && blauButton.getBackground() == Color.BLUE)
        {
            blauButton.setBackground(Color.WHITE);
        }

    }
}
 

Robat

Top Contributor
Gibt es sicherlich verschiedenste Ansätze. Einer wäre eventuell die Buttons die nicht "weiß" sind in einer Struktur zu speichern und wenn die Struktur eine Länge > 2 hat die ersten 2 Elemente wieder auf "weiß" zu setzen und aus der Struktur zu entfernen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Methoden Farbe auf Screenshot suchen Allgemeine Java-Themen 2
Q Eclipse Escape Sequenzen Farbe ändern Allgemeine Java-Themen 4
Drachenbauer Wie kann eine vorgegebene Farbe über einen String erkannt werden? Allgemeine Java-Themen 11
R Farbe zu einem Eckpunkt generieren Allgemeine Java-Themen 0
B ImageView Farbe ändern Allgemeine Java-Themen 3
J Bilder halb in falscher Farbe nach kopieren aus Web Allgemeine Java-Themen 3
M Temperaturverlauf in Farbe darstellen Allgemeine Java-Themen 8
K Farbe erkannt = agieren, per Mausklick etc. Allgemeine Java-Themen 47
H Apache POI HSSF - Farbe/Rahmen etc. ohne Style-Vorlage? Allgemeine Java-Themen 4
E int Farbe Allgemeine Java-Themen 14
R Komponente hat nicht die gesetzten Eingeschaften (Text, Farbe) Allgemeine Java-Themen 3
M Farbe transparent machen Allgemeine Java-Themen 3
M JXHyperlink Farbe Allgemeine Java-Themen 2
S Class RGB Farbe Allgemeine Java-Themen 2
V Pixel-Farbe Allgemeine Java-Themen 10
Z Farbe des Pixels rechts unten in einem BufferedImage? Allgemeine Java-Themen 4
R Farbe im Bild ersetzen Allgemeine Java-Themen 11
P DockingFrame Farbe der Tabs verändern Allgemeine Java-Themen 4
P JTree Farbe Allgemeine Java-Themen 14
M Swing JButton Farbe zurücksetzen Allgemeine Java-Themen 6
W Im Chat die farbe ändern Allgemeine Java-Themen 7
A System.out.println mit Farbe Allgemeine Java-Themen 6
S Farbe? (hexadezimal) Allgemeine Java-Themen 2
G Durchschnittliche Farbe eines Bildes Allgemeine Java-Themen 18
S Farbe erkennen! Allgemeine Java-Themen 3
R Umwandlung Farbe in Schwarz/Weiss Allgemeine Java-Themen 2
clemson Farbe in Datei speichern & laden Allgemeine Java-Themen 3
N Farbe ändern bei System.out.println Allgemeine Java-Themen 2
kodela Datenübergabe über Buttons Allgemeine Java-Themen 8
berserkerdq2 Shapes als Buttons nutzen, schlechter Programmierstyle? Allgemeine Java-Themen 1
berserkerdq2 Was heißt es mit FXML Listener zu setzen ind Buttons zu erstellen? Allgemeine Java-Themen 6
S Buttons nacheinander ausführen Allgemeine Java-Themen 2
N Eigenschaften eines Buttons per Setter verändern Allgemeine Java-Themen 5
D Java zeigt Buttons nicht korrekt an Allgemeine Java-Themen 0
E Swing andere schreibart für jButtoni (i = Zahl des Buttons) Allgemeine Java-Themen 6
E Swing Buttons auf knopfdruck(anderer Button) erstellen Allgemeine Java-Themen 6
D Methoden Buttons erscheinen doppelt nach Wiederholung in Schleife Allgemeine Java-Themen 1
Tausendsassa Interface Buttons Background ändern! Wie?? Allgemeine Java-Themen 10
K Methode soll neue Buttons erstellen Allgemeine Java-Themen 5
C ActionListener zwei Buttons zuweisen Allgemeine Java-Themen 11
M Tastatur eingabe über Buttons Allgemeine Java-Themen 15
A Inhalt ListEditor und Buttons ausblenden Allgemeine Java-Themen 5
C Grafiken für Buttons Allgemeine Java-Themen 6
S Hintergrundname eines Buttons ermitteln Allgemeine Java-Themen 3
G Zoomen einer Panels mit Buttons Allgemeine Java-Themen 7
G Anonymen Buttons in for schleife ActionListener hinzufügen Allgemeine Java-Themen 5
J Buttons in einer jsp Allgemeine Java-Themen 13
B kleines modales transparents Fenster ohne rahmen und buttons Allgemeine Java-Themen 15
N Reaktion eines Buttons in einem Array auf einen Klick. Allgemeine Java-Themen 5
D JTable und Buttons Allgemeine Java-Themen 16
P id eines Buttons Allgemeine Java-Themen 2
MQue addActionListener für mehrere Buttons Allgemeine Java-Themen 2
MQue Auslösen eines Events beim Drücken eines Buttons Allgemeine Java-Themen 12
MQue HintergrundFarbe des Buttons beim drücken soll bleiben Allgemeine Java-Themen 2
MQue Images für Buttons Allgemeine Java-Themen 5
P Eigenschaften eines Buttons überschreiben/ändern Allgemeine Java-Themen 2
L ActionListener / Buttons Allgemeine Java-Themen 8
L Buttons unsichtbar, Transparent Allgemeine Java-Themen 6
S Buttons über Bilder? Allgemeine Java-Themen 18
S showMessageDialog ohne Buttons? Allgemeine Java-Themen 4
C Webbilder oder Buttons anklicken Allgemeine Java-Themen 2
G JTable + Buttons Allgemeine Java-Themen 7
G Leere Fenster (Keine Schrift, Reiter/ Buttons) bei Java Allgemeine Java-Themen 5
G Bilder für Buttons in JarFile Allgemeine Java-Themen 5
U Transparent Buttons - unterschiedliche Java-Versionen Allgemeine Java-Themen 8
F buttons mit tags oderso? Allgemeine Java-Themen 6
Master3000 Java Datei mehrmals einlesen Allgemeine Java-Themen 4
D API Keys mehrmals verwenden Allgemeine Java-Themen 6
M Java (GUI) Code verdoppeln oder anzeige mehrmals anzeigen? Allgemeine Java-Themen 8
X Threads Thread mehrmals verwenden Allgemeine Java-Themen 4
J Threads mehrmals starten Allgemeine Java-Themen 18
I PlayButton mehrmals starten? Allgemeine Java-Themen 6
G Thread mehrmals starten Allgemeine Java-Themen 4
G Mehrmals replace() auf langem String, zu speicherintensiv Allgemeine Java-Themen 10
S Action mehrmals klicken Allgemeine Java-Themen 3
S Verhindern das Programm mehrmals geöffnet wird Allgemeine Java-Themen 26

Ähnliche Java Themen

Neue Themen


Oben