Swing Element einer JComboBox ausgrauen

kodela

Bekanntes Mitglied
Hallo,

ich habe eine JComboBox als Teil der GUI. Die GUI wurdemit dem GUI-Builder von NetBeans erstellt. Das erste der sechs Auswahlelemente muss anders behandelt werden als die übrigen fünf. Es wird lediglich ein Zustand angezeigt. Mit den übrigen fünf kann dieser Zustand (Level) ausgewählt und damit verändert werden.

Das funktioniert auch alles so, wie beschrieben. Nun möchte ich aber den Eintrag für das nicht anwählbare Element auch optisch anders gestalten, zum Beispiel mit grauem Hintergrund oder grauer Farbe.

Ich habe diese Auswahl nicht nur über die JComboBox in der Symbolleiste, ich habe sie auch über ein JMenu mit sechs JRadioButtonMenuItrms. Damit kann ich das erste Element gegebenenfalls als selektiert, aber imer ausgegraut und nicht auswählbar anzeigen. Mit der JComboBox gelingt mir dies nicht. Der Anwender kann das erste Element zwar anklicken, die Anwendung reagiert darauf aber nicht. Ich könnt darauf zwar einen Hinweis ausgeben, dass der Level 0 zum Beispiel nicht auswählbar ist. Aber es wäre mir eben lieber, wenn dies der Anwender sofort nach dem Öffnen der Box erkennen könnte, dass der Level 0 nicht auswählbar ist. Zum besseren Verständnis: Die Auswahl des Levels wird benötigt, wenn der Anwender ein neues Objekt oder eine Serie von Objekten mit einem gewählten Level erstellen will. Die Anzeige zeigt ansonsten den Level des aktuell in Bearbeitung befindlichen Objektes.

Kennt jemand eine Möglichkeit, wie man ein Listenelement einer JComboBox optisch anders darstellen kann, als die übrigen?

Gruß, kodela
 
Danke für den Tipp und das Beispiel. Das sieht gut aus und ich bin mir sicher, dass ich damit das Aussehen des ersten Elements so hinbekomme, wie ich es mir vorstelle.

Gruß, kodela
 
Hallo LimDul,

Dank Deines Hinweises wird bei mir der erste Eintrag in der ComboBox nun ausgegraut angezeigt. Folgende Änderungen mussten vorgeniommen werden.

Im GUI-Builder von NezBeans musste für die Option "Quelltext vor der Erzeugung" folgender Code eingegeben werden:

[CODE lang="java" title="ListCellRenderer renderer = new ComplexCellRenderer();"][/CODE]

Für die Option "Quelltext nach der Initialisierung:" musste folgender Code eingegeben werden:

[CODE lang="java" title="levelBox.setRenderer(renderer);"][/CODE]

In der Frame-Klasse kam dann noch der Renderer selbst hinzu. Hier der Code:

Java:
    /**
     * Rendert die Ausgabe für die Levelbox so, dass der Level 0 ausgegraut ersheint.
     */
    class ComplexCellRenderer implements ListCellRenderer {
        protected DefaultListCellRenderer defaultRenderer = new DefaultListCellRenderer();

        @Override
        public Component getListCellRendererComponent(JList list, Object value, int index,
                boolean isSelected, boolean cellHasFocus) {
            JLabel renderer = (JLabel) defaultRenderer.getListCellRendererComponent(
                    list, value, index, isSelected, cellHasFocus);
            Color theForeground;
            if (index == 0) {
                theForeground = Color.LIGHT_GRAY;
            } else {
                theForeground = Color.BLACK;
            }
            String theText = value.toString();
            renderer.setForeground(theForeground);
            renderer.setText(theText);
            return renderer;
        }
    }

Das sieht dann so aus:

Level 0 ausgegraut.png

Nochmals danke für den Hinweis.

Gruß, kodela
 
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben