8.3 Mehrere Buttons lösen Ereignisse aus.
 
   
Download:
JRotGelbGruen. java
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class JRotGelbGruen extends JFrame 
                           implements ActionListener {
    Color bgColor;
    JButton jbRot, jbGelb, jbGruen, jbNeutral, jbStop;
    Container cp;

    public JRotGelbGruen(String title)  {
        super(title);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        cp = getContentPane();
        
        cp.setLayout(new FlowLayout());
        bgColor = getBackground();

        jbRot = new JButton("rot");
        jbRot.addActionListener(this);
        cp.add(jbRot);

        jbGelb = new JButton("gelb");
        jbGelb.addActionListener(this);
        cp.add(jbGelb);

        jbGruen = new JButton("grün");
        jbGruen.addActionListener(this);
        cp.add(jbGruen);

        jbNeutral = new JButton("neutral");
        jbNeutral.addActionListener(this);
        cp.add(jbNeutral);

        jbStop = new JButton("Ende");
        jbStop.addActionListener(this);
        cp.add(jbStop);

        setSize(400, 200);
        setVisible(true);
    }

    public void actionPerformed(ActionEvent e) {
        Object obj = e.getSource();
     
        if (obj == jbRot) cp.setBackground(Color.RED);
        if (obj == jbGelb) cp.setBackground(Color.YELLOW);
        if (obj == jbGruen) cp.setBackground(Color.GREEN);
        if (obj == jbNeutral) cp.setBackground(bgColor);
        if (obj == jbStop) System.exit(0);
    }

    public static void main(String[] args) {
        JRotGelbGruen ampel = 
                new JRotGelbGruen("Rot - Gelb - Grün");
    }
}
  Neben dem größeren des Quellekodes sich selbst erklärt, ist besonders die Implementierung der Methode actionPerformed(..) interessant. Das übergebene ActionEvent-Objekt e wird mit Hilfe der Methode getSource() befragt, welches der beim ActionListener registrierten Objekte ein Ereignis ausgelöst hat. Im Prinzip können verschiedenartige Objekte das Ereignis ausgelöst haben. Deshalb wird das von getSource() gelieferte Objekt in einem Objekt der Klasse Object gespeichert, denn von der Klasse Object erben alle Klassen, weshalb wir einem Object-Objekt jedes beliebe Objekt also auch ein JButton-Objekt zuweisen können. Man braucht jetzt nur noch selektieren, welches JButton-Objekt getSource() geliefert hat und die entsprechende Reaktion implementieren
   
zu 8.4 Übungen
zur Startseite www.pohlig.de  (C) MPohlig 2005