Farbe in der Auswahlliste (Direkte Reaktion auf Änderung)

Codix

Bekanntes Mitglied
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
 
K

kneitzel

Gast
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)
 

Olli76

Mitglied
Hallo zusammen,

es handelt sich wohl um die gleiche Aufgabe (aus einem Java Kurs) über der ich jetzt auch 20min gebrütet habe. Die Aufgabenstellung lautet wie folgt:
Ändern Sie die Klasse so, dass die Anzeige im Kombinationsfeld die aktuelle Farbe direkt nach dem Start des Programms anzeigt.
und als Tipp:
Um diese Änderung umzusetzen, müssen Sie keine neuen Anweisungen programmieren. Es reicht eine kleine Korrektur im Quelltext aus. Sehen Sie sich die Einträge in der Liste des Kombinationsfelds genau an und überprüfen Sie, welche Farbe der Text zunächst hat.

die Liste ist wie folgt:[CODE lang="java" title="Array Liste"]private String[] farbAuswahl = {"Rot","Blau","Grün","Gelb","Schwarz"};[/CODE]

Die Aufgabenstellung sagt ja nur aus, dass die Farbe die im Kombinationsfeld (bei der Auswahlliste) angezeigt wird, die gleiche sein soll wie der Text bei Programmstart angezeigt wird. Wir denken einfach zu kompliziert da die Aufgabe ganz einfach mit einer neuen Anordnung in der Arrayliste der Auswahl gelöst werden kann.

Lösung: [CODE lang="java" title="Array Liste neu angeordnet"]private String[] farbAuswahl = {"Schwarz","Blau","Grün","Gelb","Rot"};[/CODE]

Ich hoffe ich kann damit den nächsten Teilnehmern ein wenig helfen und somit Zeit und nerven sparen :)
 

thecain

Top Contributor
Ein schönes Beispiel dafür, dass die Aufgaben meistens dem aktuellen Niveau im Kurs angepasst sind und es hilft diese genau durchzulesen
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Farbe des Striches eines TitledBorders ändern Java Basics - Anfänger-Themen 2
Jambolo Karten sortieren nach Rang und Farbe Java Basics - Anfänger-Themen 5
amelie123456 Objekt Farbe Quellcode Java Basics - Anfänger-Themen 4
D Ampel Programmieren die jede 10 sekunden ihre farbe wechselt Java Basics - Anfänger-Themen 6
Tom/S JLabel Icon Farbe Java Basics - Anfänger-Themen 2
M Mit KeyListener Farbe von Label ändern Java Basics - Anfänger-Themen 13
B Eclipse Tabellen Farbe ändern? Java Basics - Anfänger-Themen 2
J Probleme bei der Umwandlung einer Farbe von Hex zu RGB Java Basics - Anfänger-Themen 8
E Mastermind programmieren, wie den falschen Platz aber richtige Farbe schecken? Java Basics - Anfänger-Themen 23
W JLabel, Farbe durch Listener ändern Java Basics - Anfänger-Themen 6
D Mit Buttonklick Farbe der anderen Buttons verändern? Java Basics - Anfänger-Themen 2
D JButton soll Farbe von JTextfield ändern Java Basics - Anfänger-Themen 5
S Schriftart/Farbe im Grafikfenster ändern Java Basics - Anfänger-Themen 8
I Zähler, der erst wieder zählt nachdem Pixel wieder andere Farbe hat Java Basics - Anfänger-Themen 2
U Farbe meines Würfels jede sekunde ändern! Java Basics - Anfänger-Themen 5
X Bildabschnitt anhand der Farbe und messen Java Basics - Anfänger-Themen 4
S Farbe eine Zeile in JTable ändern, wenn JButton geklickt wurd Java Basics - Anfänger-Themen 4
A Dateiformat mit 100%iger Farbe Java Basics - Anfänger-Themen 6
M Punkt auf eine Farbe prüfen Java Basics - Anfänger-Themen 8
B Methode zum ändern der Farbe? Java Basics - Anfänger-Themen 20
J Bild mit transparenter Farbe Java Basics - Anfänger-Themen 10
T JLabel Farbe ändern, Problem Java Basics - Anfänger-Themen 2
R JTabbedPane - Farbe ändern Java Basics - Anfänger-Themen 4
L Farbe unter Cursor bestimmen Java Basics - Anfänger-Themen 5
B Farbe wählen ohne JColorChooser Java Basics - Anfänger-Themen 13
B JTextArea Farbe und Schrift aendern Java Basics - Anfänger-Themen 2
I Schriftart / farbe / größe bei Emailversand ändern Java Basics - Anfänger-Themen 17
K Farbe heller machen Java Basics - Anfänger-Themen 4
H Farbe setzen Java Basics - Anfänger-Themen 5
D Text Farbe Java Basics - Anfänger-Themen 7
T Ausgabe in Farbe Java Basics - Anfänger-Themen 5
T Die deutsche Flagge :) . Farbe ausgeben Java Basics - Anfänger-Themen 4
G jTable schriftgröße und -farbe ändern? Java Basics - Anfänger-Themen 2
A Im Chat eigenen Beitrag in Farbe zeigen Java Basics - Anfänger-Themen 8
K jTextPane: Farbe des markierten Textes ändern und auslesen? Java Basics - Anfänger-Themen 3
S Zufällige Farbe Java Basics - Anfänger-Themen 5
M Text in der Farbe rot ausgeben Java Basics - Anfänger-Themen 9
L Dreieck soll Farbe ändern Java Basics - Anfänger-Themen 4
S Drucken in farbe Java Basics - Anfänger-Themen 4
D Die Farbe wird nicht angenommen Java Basics - Anfänger-Themen 2
P String eine rote Farbe geben? Java Basics - Anfänger-Themen 6
S Cursor Form und oder Farbe verändern, geht das???? Java Basics - Anfänger-Themen 4
K Übergabe der Variable für Farbe Java Basics - Anfänger-Themen 6
D SWING Anwendung mit 3 Buttons zum ändern der Farbe Java Basics - Anfänger-Themen 18
G Farbe des Pixels unter dem Mauszeiger? Java Basics - Anfänger-Themen 40
O Ein Sichtbarer Rahmen (in Farbe) um ein JPanel. Java Basics - Anfänger-Themen 5
F String in Farbe ausgeben Java Basics - Anfänger-Themen 2
D Farbe vom Scrollbalken ändern Java Basics - Anfänger-Themen 6
M Farbe der Titelleiste eines JFrames ändern Java Basics - Anfänger-Themen 6
Bierhumpen Farbe? Java Basics - Anfänger-Themen 4
C Farbe ins Spiel bringen Java Basics - Anfänger-Themen 2
C JTable: Farbe und Checkbox Java Basics - Anfänger-Themen 3
M Bei Swing Komponenten die Farbe ändern? Java Basics - Anfänger-Themen 12
P Button "Farbe wechseln" Java Basics - Anfänger-Themen 11
C Farbe in DOS Java Basics - Anfänger-Themen 2
F Ball soll auf Mausklick farbe ändern. Java Basics - Anfänger-Themen 10
G Farbe invertieren? Java Basics - Anfänger-Themen 14
C Farbe von ProgressBar ändern Java Basics - Anfänger-Themen 3
D Best Practice Ausgabe über direkte Ausgabe oder try-catch? Java Basics - Anfänger-Themen 13
S Was ist schneller: direkte Sortierung oder indirekt ueber eine SortedMap..? Java Basics - Anfänger-Themen 10
E Klassen Direkte Referenzierung einer Klasse verbieten? Java Basics - Anfänger-Themen 6
G import vs. direkte Instanzierung Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben