# Button verändert Hintergrund!



## ondope (5. April 2006)

Hallo ... ich bin in Java ein ziemlicher Neuling und hab schon versucht eine Lösung hier im Forum oder woanders zu finden wie ich folgendes Problemchen lösen könnte...

Ich habe hier einen Button, dieser soll den Hintergrund verändern. Macht er auch, aber der Button soll den Hintergrund nicht nur einmal verändern, sondern in einer bestimmten Reihenfolge 4 verschiede Farben immer wieder als Hintergrundfarbe bestimmt. Das bekomm ich leider nicht hin! Hier ist mein Quellcode ... weiter habe ich es leider nicht hinbekommen. Bitte helft mir! 


import java.awt.*; 
import java.awt.event.*;
import javax.swing.*; 
public class test extends JFrame implements ActionListener
{
JButton Button ;
public test() 
{
Button = new JButton("Red");
Button.setActionCommand( "red" ); 

getContentPane().setLayout( new FlowLayout() ); 
getContentPane().add( Button ); 

getContentPane().setBackground( (Color.red));
Button.addActionListener( this );

}
public void actionPerformed( ActionEvent evt)
{
if ( evt.getActionCommand().equals( "red" ) )
{
getContentPane().setBackground( Color.blue ); 
repaint();
}

// --->> dieser Teil klappt irgendwie nicht 
if ( evt.getActionCommand().equals( "blue" ) )
{
getContentPane().setBackground( Color.green ); 
repaint();
}
if ( evt.getActionCommand().equals( "green" ) )
{
getContentPane().setBackground( Color.red ); 
repaint();
}
// <<--- dieser Teil klappt irgendwie nicht 

}
}

public static void main ( String[] args )
{
test demo = new test() ;

WindowQuitter wquit = new WindowQuitter(); 
demo.addWindowListener( wquit ); 

demo.setSize( 1000, 800 ); 
demo.setVisible( true ); 
}
}
class WindowQuitter extends WindowAdapter
{
public void windowClosing( WindowEvent e )
{
System.exit( 0 ); 
}
}



Danke im vorraus ... matze


----------



## teppi (5. April 2006)

Huhu ..


```
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class test extends JFrame implements ActionListener {
	
	private JButton einButton;
	
	private Color[] colors = new Color[4];
	
	private int index = 0;

	public test() {
		
		colors[0] = Color.BLUE;
		colors[1] = Color.RED;
		colors[2] = Color.GREEN;
		colors[3] = Color.BLACK;
		
		einButton = new JButton("Farbwechsel");
		einButton.setActionCommand("farbwechsel");

		getContentPane().setLayout(new FlowLayout());
		getContentPane().add(einButton);

		getContentPane().setBackground((colors[0]));
		
		einButton.addActionListener(this);
		
		

	}

	public void actionPerformed(ActionEvent evt) {
		
		if (evt.getActionCommand().equals("farbwechsel")) {
			
			this.index++;			
			if (this.index == 4) index = 0;
			
			getContentPane().setBackground(colors[this.index]);
			
			repaint();
		}
	}

	public static void main(String[] args) {
		test demo = new test();

		WindowQuitter wquit = new WindowQuitter();
		demo.addWindowListener(wquit);

		demo.setSize(1000, 800);
		demo.setVisible(true);
	}
}

class WindowQuitter extends WindowAdapter {
	public void windowClosing(WindowEvent e) {
		System.exit(0);
	}
}
```

Du hast Events definiert, aber keine Buttons mit ihnen verbunden .. Das solltest du dir noch mal anschauen. Mein Lösung ist mit Sicherheit auch noch nicht die eleganteste. 

Gruß Stefan


----------



## ondope (6. April 2006)

Vielen Dank! Du hast mir sehr weitergeholfen!

Gruß Matze


----------



## ondope (6. April 2006)

Ach eine Frage hätte ich dann doch noch und zwar: 

Wieso schreibt man hier   index=0  direkt hinter die If Anweisung? Eigentlich schreibt man, erst recht wenn da noch was kommt nach der if Anweisung eine geschweifte Klammer oder?

            if (this.index == 4) index = 0; 

            getContentPane().setBackground(colors[this.index]); 

            repaint();

Warum kann man das nicht so schreiben?

            if (this.index == 4) 
            {
                index = 0;    
                getContentPane().setBackground(colors[this.index]); 
            } 
            repaint(); 

Und was genau bedeutet dieses     this    ? Das steht einmal beim Actionlistener, und dann danach noch zwei mal vorm index.

danke im vorraus! 
Gruß Matze


----------



## Snape (6. April 2006)

>Wieso schreibt man hier   index=0  direkt hinter die If Anweisung? Eigentlich schreibt man, erst recht wenn da noch was kommt nach der if Anweisung eine geschweifte Klammer oder?

Je nachdem. Wenn nur die nächste Anweisung ausgeführt werden soll, ist ein Block (geschweifte Klammer) nicht nötig.


```
if (this.index == 4) index = 0; 
             
            getContentPane().setBackground(colors[this.index]); 
             
            repaint();
```
>Warum kann man das nicht so schreiben?

```
if (this.index == 4) 
            {
                index = 0;    
                getContentPane().setBackground(colors[this.index]); 
            } 
            repaint();
```

Weil......das zwei unterschiedliche Abläufe sind. Der erste Code sieht nämlich nicht wie von Dir vermutet sondern so aus:

```
if (this.index == 4) 
            {
                index = 0;
            } 
            getContentPane().setBackground(colors[this.index]); 
            repaint();
```


>Und was genau bedeutet dieses     this    ? Das steht einmal beim Actionlistener, und dann danach noch zwei mal vorm index.

this ist eine Referenz auf das Objekt selbst. Wird oftmals verwendet,
- um bei settern Eindeutigkeit/Übersichtlichkeit zu bekommen:
public void setIrgendwas(int wert){
 this.wert = wert
}
(Sieht irgendwie besser aus als
public void setIrgendwas(int wert){
 wert = wert
}

- um besser erkennen zu können, ob es sich bei Variablen um geerbte Variablen gehört.

Außerdem muss man ab und an auch Objekte mittels Klassenname.this verwenden, aber darauf gehe ich jetzt nicht auch noch ein. ^^


----------



## ondope (6. April 2006)

Vielen Dank für die schnelle Antowort!

Gruß Matze


----------

