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?
Ich habe folgendes versucht:
1.te Änderung:
2.te Änderung
3.te Änderung
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
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