JComboBox, andere einträge in der DropDownliste

eagle

Mitglied
Hallo zusammen,

weiss jemand zufällig wie ich in der DropDown-Liste der JComboBox andere einträge setzten kann, als im TextField angezeigt wird.

Beispiel: in der DropDown-Liste stehen zum Beispiel die Einträge:
  • 1 Morgen
  • 2 Mittag
  • 3 Abend

Im TextFeld der KomboBox soll dan aber nur "Morgen" stehen und nicht "1 Morgen".

greez Eagle
 
Moin,
ich finde diese Lösung sauber:
1. Klasse "Tageszeit" anlegen
2. Methoden toString() und getTageszeit() implementieren. Die toString gibt dabei "1 Morgen" usw wieder, getTageszeit() nur "Morgen"
3. Du legst drei Tageszeit-Objekte an.
4. Du füllst die Combobox mit diesen drei Objekten.
5. Von dem selectedElement o.ä. der Combobox liest Du getTageszeit() aus und setzt das ins Textfeld.
 
Danke für die Antwort,

habe in der Zwischenzeit eine eigene Lösung gefunden.
Ich habe einfach einen eigenen ListCellRenderer geschrieben und diesen meiner ComboBox angehängt.


Jetzt habe ich aber das Problem, dass der Text der DropDown-Liste teilweise zu lang ist, hat jemand eine Idee wie ich die Breite der DropDown-Liste manuell festlegen kann, so dass sie breiter ist

Habe schon versucht im CellRenderer die Methode setBounds zu überschreiben, nützt nichts, da sich dies auf die Labels in der DropDown-Liste beziehen und nicht auf die Liste selber.

greez Marc
 
Hallo!

Soweit ich weis passt sich die breite der JComboBox immer dem breitesten Element an.
Siehe:
Code:
/*
 * Created on 03.03.2005@14:43:12
 *
 * TODO Some Licence info...
 */
package de.tutorials;

import java.awt.Component;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import javax.swing.DefaultListCellRenderer;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JList;

/**
 * @author TDarimont
 * 
 * TODO Explain me
 */
public class ComboBoxExample extends JFrame {

    private JComboBox box;

    public ComboBoxExample() {
        super("ComboBoxExample");
        setDefaultCloseOperation(EXIT_ON_CLOSE);

        box = new JComboBox(TimeOfDay.TIMES_OF_DAY.toArray());
        box.setRenderer(new DefaultListCellRenderer() {
            public Component getListCellRendererComponent(JList list,
                    Object value, int index, boolean isSelected,
                    boolean cellHasFocus) {

                if (index == -1) {
                    return super.getListCellRendererComponent(list, value,
                            index, isSelected, cellHasFocus);
                }

                String newValue = (index + 1) + ". " + value;

                return super.getListCellRendererComponent(list, newValue,
                        index, isSelected, cellHasFocus);
            }
        });

        getContentPane().add(box);

        pack();
        setVisible(true);
    }

    public static void main(String[] args) {
        new ComboBoxExample();
    }

    static class TimeOfDay {
        public final static String MORNING = "MorgensAA";

        public final static String NOON = "MittagsBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB";

        public final static String EVENINGS = "AbendsCCC";

        public final static List TIMES_OF_DAY = Collections
                .unmodifiableList(new ArrayList() {
                    {
                        add(MORNING);
                        add(NOON);
                        add(EVENINGS);
                    }
                });
    }
}

Ansonsten solltest du mal mit der preferedSize des Controls herumspielen.

Weiterhin wäre es noch ganz schick die Werte der einzelnen Konstanten (Morning, Noon, Evenings) über ResourceBundles externalisieren (und internationalisieren) würde.

Gruß Tom
 
Hallo,

danke für den Typ.
Nach meiner Erfahrung ist es schon der Fall, dass die JComboBox so Breit ist wie der längste Eintrag.
Nur haben die JComboBoxen bei mir eine fest zugeteilte Grösse und sind leider nicht Variabel. Daher klappt dies bei mir nicht und die DropDown-Liste ist immer so Breit wie die ComboBox selbst.

Werde noch mals die preferedSize angucken, vielleicht finde ich ja da was.

greez Eagle
 
Zurück