Farbe in der Auswahlliste (Direkte Reaktion auf Änderung)

Diskutiere Farbe in der Auswahlliste (Direkte Reaktion auf Änderung) im Java Basics - Anfänger-Themen Bereich.
C

Codix

Hallo, ich habe folgenden Quellcode, und wenn ich das Programm starte, erscheint die Farbe des textes "TEXT" ist Schwarz, obwohl im JCombo als erste Farbe "Rot" angegeben ist. Was muss ich im Quellcode ändern, damit die Anzeige im Kombinationsfeld die aktuelle Farbe direkt nach dem Programmstart anzeigt?

Java:
import java.awt.Color;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;

import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JRadioButton;

public class BuntOderNichtGUI extends JFrame{
    //automatisch über Eclipse erzeugt
    private static final long serialVersionUID = 2007237315429965675L;

    //die verfügbaren Farben werden in einem Array ablegt
    private String[] farbAuswahl = {"Rot", "Gelb", "Blau", "Grün", "Schwarz"};
   

    //die Komponenten
    //für die Auswahl farbig oder nicht über RadioButtons
    private JRadioButton bunt, nichtBunt;
    private ButtonGroup gruppe;
    //für die Auswahl groß oder kleine
    private JCheckBox gross;
    //für die Auswahl der Farben
    private JComboBox <String> auswahl;
    //für das Beenden
    private JButton schaltflaecheBeenden;
    //für die Anzeige
    private JLabel anzeige;
   
    //die innere Klasse für die Listener
    //Sie implementiert jetzt auch den ItemListener
    class MeinListener implements ActionListener, ItemListener {

        //die Methode des ActionListeners
        //für die Farbauswahl und die Schaltfläche
        @Override
        public void actionPerformed(ActionEvent e) {
            //zum einfacheren Zugriff die Quelle in einem Object ablegen
            Object ausloeser = e.getSource();
            //Wer hat das Ereignis ausgelöst?
            //die ComboBox?
            if (ausloeser instanceof JComboBox) {
                //was ist auswgewählt?
                if (auswahl.getSelectedItem().toString().equals("Rot"))
                    anzeige.setForeground(Color.RED);
                if (auswahl.getSelectedItem().toString().equals("Gelb"))
                    anzeige.setForeground(Color.YELLOW);
                if (auswahl.getSelectedItem().toString().equals("Blau"))
                    anzeige.setForeground(Color.BLUE);
                if (auswahl.getSelectedItem().toString().equals("Grün"))
                    anzeige.setForeground(Color.GREEN);
                if (auswahl.getSelectedItem().toString().equals("Schwarz"))
                    anzeige.setForeground(Color.BLACK);
            }
            //die Schaltfläche
            if (ausloeser instanceof JButton) {
                //eigentlich ist die Abfrage nicht nötig
                //das macht uns das Leben aber leichter, wenn neue Schaltflächen dazu kommen
                if (e.getActionCommand().equals("Beenden"))
                    System.exit(0);
            }
        }

        //für die CheckBox und die RadioButtons
        @Override
        public void itemStateChanged(ItemEvent e) {
            //zum einfacheren Zugriff die Quelle in einem Object ablegen
            Object ausloeser = e.getSource();
            //Wer hat das Ereignis ausgelöst?
            //die Checkbox?
            if (ausloeser instanceof JCheckBox) {
                //ist die CheckBox markiert?
                if (gross.isSelected() == true)
                    anzeige.setFont(new Font("Arial", Font.PLAIN,30));
                else
                    anzeige.setFont(new Font("Arial", Font.PLAIN,14));
            }
            //oder waren es die RadioButtons
            if (ausloeser instanceof JRadioButton) {              
                //ist bunt markiert?
                if (bunt.isSelected() == true)
                    auswahl.setEnabled(true);
                else
                    auswahl.setEnabled(false);
            }
        }
    }
   
    //der Konstruktor
    public BuntOderNichtGUI(String titel) {
        super(titel);
       
        gross = new JCheckBox("Größer darstellen");
       
        //die Liste erzeugen
        //die Daten kommen aus dem Array farbAuswahl
        auswahl = new JComboBox<String> (farbAuswahl);
        //erst einmal nicht aktivieren
        auswahl.setEnabled(false);
       
        //die Schaltfläche
        schaltflaecheBeenden = new JButton("Beenden");
       
        //die RadioButtons und die Gruppe
        bunt = new JRadioButton("bunt");
        nichtBunt = new JRadioButton("einfarbig");
        nichtBunt.setSelected(true);
       
        gruppe = new ButtonGroup();
        gruppe.add(bunt);
        gruppe.add(nichtBunt);
       
        //das Label
        anzeige = new JLabel("Der Text");
        //die Schriftart etc. setzen
        anzeige.setFont(new Font("Arial", Font.PLAIN,14));
       
        //ein Gridlayout mit 2 Spalten und etwas Abstand
        setLayout(new GridLayout(0,2,10,10));

        //die Komponenten hinzufügen
        //erst das Label
        add(anzeige);
        //daneben kommt die Checkbox
        add(gross);
        //der erste RadioButton
        add(bunt);
        //daneben die ComboBox
        add(auswahl);
        //der zweite RadioButton
        add(nichtBunt);
        //und links unten die Schaltfläche
        add(schaltflaecheBeenden);
       
        //die Listener verbinden
        MeinListener listener = new MeinListener();
        schaltflaecheBeenden.addActionListener(listener);
        gross.addItemListener(listener);
       
        //für die RadioButtons muss das für jeden Button passieren, nicht für die Gruppe!
        bunt.addItemListener(listener);
        nichtBunt.addItemListener(listener);
       
        auswahl.addActionListener(listener);

        //die Standard-Aktion setzen
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       
        //das Fenster "packen" und anzeigen
        pack();
        setVisible(true);
    }
}

Ich habe folgendes versucht:

1.te Änderung:

Java:
//der Konstruktor
    public BuntOderNichtGUI(String titel) {
        super(titel);
       
        gross = new JCheckBox("Größer darstellen");
       
        //die Liste erzeugen
        //die Daten kommen aus dem Array farbAuswahl
        auswahl = new JComboBox<String> (farbAuswahl);


        //(von false) auf true = aktivieren umgestellt        
        auswahl.setEnabled(true);


       
        //die Schaltfläche
        schaltflaecheBeenden = new JButton("Beenden");
       
        //die RadioButtons und die Gruppe
        bunt = new JRadioButton("bunt");
        nichtBunt = new JRadioButton("einfarbig");
        nichtBunt.setSelected(true);
2.te Änderung

Java:
if (ausloeser instanceof JComboBox) {
                //wenn JComboBox markiert ist, soll ROT angezeigt werden
                if (auswahl.getSelectedItem() .
                        toString() .equals("Rot"))
                    anzeige.setForeground(Color.RED);
3.te Änderung

Java:
        // actionListener auf die Verbindung mit der für JComboBox zuständigen Methode ItemListener umgestellt  
        auswahl.addItemListener(listener);
ich dachte diese Änderung würden helfen, stattdessen funktionieren jetzt die anderen Farben nicht mehr, wenn ich auf Farbauswahl gehe.
Nur noch rot bleibt an, wenn man "rot" auswählt.

Bitte um eure Unterstützung.

Danke im Voraus
 
J

JustNobody

Das Verhalten hast Du doch nun schon halbwegs drin. Nur eben wenn Du zu bunt oder einfarbig wechselt, soll er auch die Farbe ändern.

Derzeit aktivierst / deaktivierst Du nur die Auswahl...

Also ich würde das setzen der Farbe in eine eigene Methode packen (setColorOfText()). Diese kannst Du dann wann immer du möchtest aufrufen, z.B.
a) direkt nach der Initialisierung (Damit die Farbe stimmt, falls Du mal die Vorauswahl änderst.
b) Wann immer irgend eine Aktion eine Veränderung erfordern könnte (z.B. Radio-Button wird verändert oder Auswahl wird verändert)
 
Thema: 

Farbe in der Auswahlliste (Direkte Reaktion auf Änderung)

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben