ActionEvent wird nicht verarbeitet

PascalC

Mitglied
Hi,

ich habe eine GUI erstellt, welche durch Klicks auf vier Buttons die Farbe ändert. Dies funktioniert soweit auch. Ich habe jetzt noch einen fünften Button hinzugefügt, der durch die Farben "scrollen" soll, sprich, bei jedem Klick ändert sich die Hintergrundfarbe.

Leider setzt er den Hintergrund immer nur auf rot, das Problem ist wohl die if-Abfrage, aber ich habe keine Ahnung warum es nicht funktioniert:

Java:
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;


public class Aufgaben extends JFrame implements ActionListener
{
	JButton rot = new JButton("rot");
	JButton gruen = new JButton("gruen");
	JButton blau = new JButton("blau");
	JButton grau = new JButton("grau");
	JButton toll = new JButton("Kann alles");
	
	public Aufgaben(String title)
	{
		super(title);
		setLayout(new FlowLayout());
		add(rot);
		add(gruen);
		add(blau);
		add(grau);
		add(toll);
		
		//Actionlistener
		rot.addActionListener(this);
		gruen.addActionListener(this);
		blau.addActionListener(this);
		grau.addActionListener(this);
		toll.addActionListener(this);
		
		//Anzeige
		setVisible(true);
		setSize( 300, 225 );
	    setResizable( false );
	    setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
	}

	@Override
	public void actionPerformed(ActionEvent e)
	{
		if (e.getActionCommand().equals("rot"))
		{
			getContentPane().setBackground(Color.red);
			repaint();
		}
		
		if (e.getActionCommand().equals("gruen"))
		{
			getContentPane().setBackground(Color.green);
			repaint();
		}
		
		if (e.getActionCommand().equals("blau"))
		{
			getContentPane().setBackground(Color.blue);
			repaint();
		}
		
		if (e.getActionCommand().equals("grau"))
		{
			getContentPane().setBackground(Color.gray);
			repaint();
		}
		
		if (e.getActionCommand().equals("Kann alles"))
		{
			if (getBackground().equals(Color.red))
			{
				getContentPane().setBackground(Color.green);
				repaint();
			}
			
			if (getBackground().equals(Color.green))
			{
				getContentPane().setBackground(Color.blue);
				repaint();
			}
			
			if (getBackground().equals(Color.blue))
			{
				getContentPane().setBackground(Color.gray);
				repaint();
			}
			
			if (getBackground().equals(Color.gray))
			{
				getContentPane().setBackground(Color.red);
				repaint();
			}
			
			else
			{
				getContentPane().setBackground(Color.red);
				repaint();
			}
			
		}
		
	}
}
 
Dein letztes else bezieht sich nur auf das direkt darüberstehende if. Wenn der Hintergrund nicht gleich Color.gray ist, wird er immer auf rot gesetzt.
 
Also würde es reichen es zu else if zu ändern? Noch eine grundsätzliche Frage: Wie kann ich sicherstellen dass es sich nicht nur auf das darüberstehende bezieht? Wird das immer passieren wenn ich nur "else" schreibe?
 
Also würde es reichen es zu else if zu ändern? Noch eine grundsätzliche Frage: Wie kann ich sicherstellen dass es sich nicht nur auf das darüberstehende bezieht? Wird das immer passieren wenn ich nur "else" schreibe?
Was genau willst du zu "else if" ändern? Das letzte "else"? Dann musst du eine Bedingung in den if-Teil reinschreiben, und genau die hast du ja nicht, denn der else-Zwei soll ja betreten werden, wenn keine der voranstehenden if-Bedingungen erfüllt ist.
Die if-Abfragen nach if (e.getActionCommand().equals("Kann alles")) müssen geändert werden. Ab der zweiten if-Abfrage muss vor dem if eine else stehen.
 
Moin,
Also würde es reichen es zu else if zu ändern?
nein, Du hast ja keine weitere Bedingung mehr

Noch eine grundsätzliche Frage: Wie kann ich sicherstellen dass es sich nicht nur auf das darüberstehende bezieht?
So:
Java:
if (e.getActionCommand().equals("Kann alles"))
{
  if (getBackground().equals(Color.red))
  {
    getContentPane().setBackground(Color.green);
    repaint();
  }
  else if(getBackground().equals(Color.green))
  {
    getContentPane().setBackground(Color.blue);
    repaint();
  }
  else if(getBackground().equals(Color.blue))
  {
    getContentPane().setBackground(Color.gray);
    repaint();
  }
  else if(getBackground().equals(Color.gray))
  {
    getContentPane().setBackground(Color.red);
    repaint();
  }
  else
  {
    getContentPane().setBackground(Color.red);
    repaint();
  }
}
Jetzt sind alle fünf Fälle (rot, grün, blau, grau, sonstige) abgedeckt!!

Oder nutze ein switch-Kostrukt, dass ist meistens übersichtlicher als diese extremen IF - ELSE IF - ELSE IF-Konstrukte !!

Gruß
Klaus
 

Zurück
Oben