Swing Combox Popup vergroessert - Arrow nicht mehr vorhanden!

Times

Bekanntes Mitglied
Hallo,

ich habe die JCombobox schon sehr weit überschrieben, sodass ich dort nach Elementen suchen kann (Autocomplete), die Liste aus mehreren Spalten besteht, die Spaltenbreiten anpassbar sind, ein SQL-Statement an die Combobox übergeben werden kann etc... etc..
Zuletzt habe ich die Grösse des Popups vergrössert indem ich die getSize() Methode der Combox überschrieben habe.

Problem:
Wenn das Popup größer als die Combobox selber ist, wird der Dropdown-Pfeil nicht mehr dargestellt, allerdings kann man immernoch an die Stelle klicken, wo dieser eigendlich sein sollte, und es wird das Popup folglich angezeigt. Nur das Symbol fehlt also, die Funktion dahinter ist weiterhin vorhanden.
Wenn ich nun mein Frame auf den gesamten Bildschirm vergrössere, sodass das Popup nicht mehr grösser als die Combobox ist, wird der Pfeil auch wieder dargestellt.

Die Spaltengrösse geben ich an in Char-Count, also Anzahl an Zeichen die pro Spalte angezeigt werden sollen. Hier ist mal die überschriebene getSize() Methode:
Java:
    @Override
    public synchronized Dimension getSize () 
    {
        if (this.colWidth != null)
        {
            if(this.expanded) 
            {
                int width = 0;
                for(int w : this.colWidth)
                {
                    width+=w;
                }
                char[] tmp = new char[width];
                Arrays.fill(tmp, '#');
                width = this.getGraphics().getFontMetrics().stringWidth(new String(tmp));

                Dimension dim0 = super.getSize();
                if (width > dim0.width)
                {
                    return new Dimension(width, dim0.height);
                }
                return dim0;
            }
            else
            {
                this.expanded = true;
                return super.getSize();
            }
        }
        this.expanded = true;
        return super.getSize();
    }

-- this.expanded wird in den Methoden aus dem Interface "PopupMenuListener" gesetzt. Bei "becomeVisible" wird zu auf true gesetzt, andernfalls auf false.

Vielen Dank :)
 

FXL

Mitglied
Könntest du bitte mal einen Screenshot machen wie das ganze bei dir aussieht.

Wird der Pfeil angzeigt, wenn du pauschal expanded = false setzt?

Gruß

PS: Vielleicht solltest du dich auch grundsätzlich nochmal mit dieser Doku auseinandersetzten How to Use Combo Boxes (The Java™ Tutorials > Creating a GUI With JFC/Swing > Using Swing Components) - z.B. der Teil mit "Providing a Custom Renderer" - da sich deine Beschreibung (SQL wird direkt der ComboBox übergeben, etc.) "relativ komisch" anhört und nicht der allgemeinen Vorgehensweise "Trennung von Model und View" entspricht.
 
Zuletzt bearbeitet:

Times

Bekanntes Mitglied
Könntest du bitte mal einen Screenshot machen wie das ganze bei dir aussieht.

So sieht die Combobox aus wenn ich mein Frame normal öffne, sodass
das Popup der Combobox grösser ist als die Combobox selber.
Wie man sieht, sieht man nichts.. die Combobox ist das Feld bei "PLZ"!
Anhang anzeigen 6936

Wenn ich das Fenster dann maximiere, sieht es wie folgt aus.
Anhang anzeigen 6937

Und wenn ich es dann wieder minimiere und die Elemente auf dem Frame deaktiviere, dann
sieht man auch das Feld wo eigendlich der Pfeil sein sollte, jedoch erscheint nur ein weisses Feld.
Anhang anzeigen 6938

Wird der Pfeil angzeigt, wenn du pauschal expanded = false setzt?
Jain... also dann ist das Popup aber nicht mehr auf meiner gewünschten Grösse!

PS: Vielleicht solltest du dich auch grundsätzlich nochmal mit dieser Doku auseinandersetzten How to Use Combo Boxes (The Java™ Tutorials > Creating a GUI With JFC/Swing > Using Swing Components) - z.B. der Teil mit "Providing a Custom Renderer" - da sich deine Beschreibung (SQL wird direkt der ComboBox übergeben, etc.) "relativ komisch" anhört und nicht der allgemeinen Vorgehensweise "Trennung von Model und View" entspricht.
Ja habs nur schnell zusammengefasst, ist schon alles voneinander getrennt aufgebaut... ist bissel doof das zu erklären :D, aber ich werds mir nochmal durchlesen und schaun ob ich es richtig gemacht habe.

Aber Danke schonmal für die Antwort :)

Edit:
Und hier noch ein Screenshot vom Popup:
ComboboxPopup.png
 
Zuletzt bearbeitet:

FXL

Mitglied
Irgendwie kann ich die ersten 3 Anhänge von dir nicht betrachten... K.A. warum.

- was passiert wenn du "expanded" konstant auf true setzt?

- was meinst du genau mit
Jain... also dann ist das Popup aber nicht mehr auf meiner gewünschten Grösse!
? Zeigt es den Pfeil an oder nicht? Das die Größe nicht angepasst wird, ist mir schon klar!

Vielleicht hilft dir aber noch dieses Snippet
Java:
@Override
public Dimension getSize() {
    Dimension dim = super.getSize();          
    if (!layingOut) {
        int widestLength = this.expanded ? getWidestItemWidth() : 0;
        dim.width = Math.max(widestLength, dim.width);
    }
    return dim;
}

private int getWidestItemWidth() {

    int numOfItems = this.getItemCount();
    Font font = this.getFont();
    FontMetrics metrics = this.getFontMetrics(font);
    int widest = 0;
    for (int i = 0; i < numOfItems; i++) {
        Object item = this.getItemAt(i);
        int lineWidth = metrics.stringWidth(item.toString());
        widest = Math.max(widest, lineWidth);
    }

    return widest + 5;
}

@Override
public void doLayout() {
    try {
        layingOut = true;
        super.doLayout();
    } finally {
        layingOut = false;
    }
}
 

Times

Bekanntes Mitglied
Guten Morgen,

ich habe zwar bereits eine Brille, aber dennoch ist mir mein Fehler nicht direkt aufgefallen. Ich habe bei getSize(), 'expanded' immer wieder auf true gesetzt, auch wenn es garnicht expanded war. Das hat ja bei mir der PopUpMenuListener geregelt und dadurch war auch bei nicht sichtbarem Popup die Größe auf das Popup eingestellt.
Fazit: Er ist immer in den Expanded-Fall gelaufen.

Trotzdem vielen Dank,
kriegst auch ein +, da mir der Vergleich von deinem Beispiel geholfen hat meinen Fehler zu finden :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Bluedaishi TableView mit Combox wert wird nicht in die TableView gesetzt AWT, Swing, JavaFX & SWT 38
J GUI Programmierung Popup-Menü AWT, Swing, JavaFX & SWT 4
T Maximieren des Application-Modal Popup-Dialoges+Parent AWT, Swing, JavaFX & SWT 1
N Kontextmenü (Popup-Fenster) erstellen AWT, Swing, JavaFX & SWT 3
A Swing JTextField an Button übergeben für Popup-Fenster funktioniert nicht AWT, Swing, JavaFX & SWT 3
F Popup Menu etwas verschieben AWT, Swing, JavaFX & SWT 2
X Popup Menü nur bei besonderem Fall öffnen AWT, Swing, JavaFX & SWT 3
B Popup auf der Textcoursor-Position AWT, Swing, JavaFX & SWT 5
B Swing Submenüs im Popup anzeigen AWT, Swing, JavaFX & SWT 2
T Popup Fenster AWT, Swing, JavaFX & SWT 2
B Ladebalken in einem Popup-Fenster AWT, Swing, JavaFX & SWT 6
Kenan89 PopUp Fenster AWT, Swing, JavaFX & SWT 4
Spin Tool: Popup -Programm AWT, Swing, JavaFX & SWT 3
N Swing Frame mit GlassPane und Popup AWT, Swing, JavaFX & SWT 5
B popup in jtable AWT, Swing, JavaFX & SWT 4
C JComboBox Popup nicht öffnen AWT, Swing, JavaFX & SWT 4
K Popup in Swing AWT, Swing, JavaFX & SWT 10
O Info Popup AWT, Swing, JavaFX & SWT 9
T JTable, Popup Fester per Rechtsklick auf Zelle AWT, Swing, JavaFX & SWT 19
W Java Popup bei Win7 und Mac verschieden? AWT, Swing, JavaFX & SWT 2
Eldorado Swing Popup-Menü mit Jspinner AWT, Swing, JavaFX & SWT 4
M Swing JSlider, Popup-Box AWT, Swing, JavaFX & SWT 3
D Swing JTabbedPane, TabComponent & Popup AWT, Swing, JavaFX & SWT 4
lumo SWT CellEditor & Popup AWT, Swing, JavaFX & SWT 3
data89 PopUp-Panel bauen - aber wie? AWT, Swing, JavaFX & SWT 2
S Swing PopUp oeffnet sich nach der Methode, die erst nach Fensteraufruf gestartet wird AWT, Swing, JavaFX & SWT 3
aze JTable in Popup.Problem mit DefaultTableCellRenderer AWT, Swing, JavaFX & SWT 9
N rechtsklick und popup setlocation AWT, Swing, JavaFX & SWT 2
C Swing JComboBox Popup sperren AWT, Swing, JavaFX & SWT 8
B Heavyweight Popup lässt keine MouseEvents durch AWT, Swing, JavaFX & SWT 2
SebSnake Popup-JFrame soll Daten an Parent-JFrame übergeben AWT, Swing, JavaFX & SWT 3
T Button des Popup-Menüs ermitteln AWT, Swing, JavaFX & SWT 4
T JComboBox nur mit Popup AWT, Swing, JavaFX & SWT 4
F Applet und Popup AWT, Swing, JavaFX & SWT 4
G Popup eines Bildes im JTable realisieren AWT, Swing, JavaFX & SWT 3
T Mouse Popup AWT, Swing, JavaFX & SWT 2
H PopUp-Fenster in einer Java Server Faces Anwendung AWT, Swing, JavaFX & SWT 4
J Popup an Cursorstelle anzeigen AWT, Swing, JavaFX & SWT 3
G Popup springt nicht in der Naehe des Klicks auf AWT, Swing, JavaFX & SWT 3
L Popup-Menu AWT, Swing, JavaFX & SWT 2
G Funktion für PopUp Menü AWT, Swing, JavaFX & SWT 32
I Popup-Trigger-Maustaste gleich beim Programmstart ermitteln? AWT, Swing, JavaFX & SWT 7
M JComboBox Popup öffnet nicht AWT, Swing, JavaFX & SWT 6
Q Popup der JComboBox AWT, Swing, JavaFX & SWT 4
S PopUp in JTable / JScrollPane AWT, Swing, JavaFX & SWT 3
S Popup auf Grafik AWT, Swing, JavaFX & SWT 18
K Popup Deluxe (Transparentes Popup)! AWT, Swing, JavaFX & SWT 8
T Popup-Menü unter Linux AWT, Swing, JavaFX & SWT 2
B Nicht rechteckige Popup Komponente AWT, Swing, JavaFX & SWT 4
Paule Popup oder Dialog-Feld mit eigenem Inhalt AWT, Swing, JavaFX & SWT 9
G Problem mit Kontextmenu(Popup Menü) AWT, Swing, JavaFX & SWT 3
A Image im Popup-Fenster AWT, Swing, JavaFX & SWT 12
K JTable als Popup in einer JComboBox? AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen


Oben