Änderung der Hintergrundfarbe per Button

NetPerformance

Erfahrenes Mitglied
Hi...

ich habe 3 Buttons:
-gelb
-blau
-rot

Je nachdem welchen Button ich anklicke, soll sich die Hintergrundfarbe ändern.

Laut Core Java Buch soll man die Hintergrundfarbe mit setBackground() ändern können.
Dieser Befehl wird bei mir nicht erkannt: s.h. ganz unten

Alles andere sollte eigentlich stimmen.

Gruß
Aaron


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

public class ButtonTest {
	
	public static void main(String[] args) {
		
		myFrame frame = new myFrame();
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.show();
	}
}

// Hier wird das Fenster angelegt
class myFrame extends JFrame {
	
	public myFrame() {
		setTitle("Button Test");
		setSize(640, 480);
		
		// Panel in das Fenster einfügen
		myPanel panel = new myPanel();
		Container container = getContentPane();
		container.add(panel);
	}
}

// Hier werden die Button und mit den entsprechenden Aktionen verbunden
class myPanel extends JPanel {
	
	public myPanel() {
		
		// Schaltfläche erzeugen
		JButton yellowButton = new JButton("gelb");
		JButton blueButton   = new JButton("blue");
		JButton redButton    = new JButton("red");
		
		// Zum Panel hinzufügen
		add(yellowButton);
		add(blueButton);
		add(redButton);
		
		
		//Schaltflächeanktion erzeugen
		myAction yellowAction = new myAction(Color.yellow);
		myAction blueAction   = new myAction(Color.blue);
		myAction redAction    = new myAction(Color.red);
		
		// Aktion mit der Schaltfläche verbinden
		yellowButton.addActionListener(yellowAction);
		blueButton.addActionListener(blueAction);
		redButton.addActionListener(redAction);
	}
}

class myAction implements ActionListener {

	Color background;
	
	public myAction(Color c) {
		background = c;
	}
	
	public void actionPerformed(ActionEvent e) {
		setBackground(background);
	}
}
 
Hi,

er erkennt die Methode nicht an, weil deine Klasse myAction (Klassen sollen immer gross geschrieben werden) den ActionListener implementiert und nicht den Button.

So auf den schnellen Blick ist bei dir auch alles richtig. Du musst nur deinem ActionListener (myAction) den Button mit uebergeben.

Beispiel:
Code:
class myAction implements ActionListener {

	Color background;
	
                Button myButton;

	public myAction(Button myButton, Color c) {
		background = c;
                                this.myButton = nyButton;
	}
	
	public void actionPerformed(ActionEvent e) {
		myButton.setBackground(background);
	}
}
 
Zuletzt bearbeitet:
Du musst nichtmal eine Instanzvariable benutzen, die kann man sich sparen..
Code:
class myAction implements ActionListener {

	Color background;
	
            

	public myAction(Button myButton, Color c) {
		background = c;
                               
	}
	
	public void actionPerformed(ActionEvent e) {
		if(e.getSource instanceOf JButton){
                      if(e.getActionCommand.equals("gelb"){
                           ((JButton)e.getSource) .setBackground(background);
                        }
                 }
	}
}
 
Auf die idee bin ich bisher noch gar nicht gekommen. Aber so ist es natuerlich noch besser :D
Am besten waers noch wie du statt Button Component nimmst, dann kannst du es bei allen Componenten anwenden :D
 
Zurück