Swing JComboBox mit extra Inhalt + breiteres Popupmenü

gamillton

Neues Mitglied
Hallo,
zum Problem: Ich wollte eine eigene JComboBox mit eigenem Inhalt erstellen, also Konkret pro Zeile ein Icon + String bzw Int + Icon + String, da ich allerdings nur begrenzt Platz habe, sollte das Dropdownmenü breittechnisch so klein wie möglich sein, deshalb wäre es z.B. prima, wenn anfangs nur das Icon zu sehen ist und beim ausklappen das Popupmenü dann die volle bereite des Inhalts anzeigt, ich habe dazu auch 2 verschiedene Ansätze gefunden mit Codebeispielen den ich gleich auch noch posten werde:

Hier ist ein Codebeispiel auf einer Seite: http://docs.oracle.com/javase/tutor...roject/src/components/CustomComboBoxDemo.java
Mit diesem beispiel konnte ich das Icon + Stringproblem lösen in verbindung mit dem folgenden Codebeispiel ging dann auch die breite, indem ich versucht habe das Ganze anzupassen, allerdings kommt am anfang immer eine Fehlermeldung extrem kurz eingeblendet und dann wird anscheinend alles normal erstellt, hatte auch gelesen, das es mit dem unteren codebeispiel wohl da einen Bug gibt, allerdings bin ich eher noch javaAnfänger, weswegen ich auch nicht weiß, wie gravierend das Ganze ist, weil normal sollte man fehler ja nicht ignorieren :D Selbst wenn ich das weiter so nutze stellte sich mir auch die Frage, wie ich die ComboBox dann überhaupt noch anspreche, da man die getSelected etc. Methoden ja nicht mehr aufrufen kann und da ich ja mit der auswahl, die ein user trifft dann auch weiter arbeiten will, wäre auch das dann gut zu wissen, wie man das dann am besten löst, zudem wird bei dieser lösung auch nicht mehr der Hintergrund farblich markiert im Popupmenü,also man sieht nicht mehr, welches Objekt man dabei ist auszuwählen, ich hoffe ihr versteht was ich meine, das aber eher nebensächlich, solange der rest klappen würde.^^
Ich habe zum unteren beispiel auch noch eine an sich bessere lösung gefunden, die automatisch die breite des größten objekts im popupmenü ermittelt,allerdings klappt die in verbindung mit dem 1.codebeispiel im link nicht, weil soweit ich verstanden habe dort ja ein Int-Array der combobox übergeben wird und die Breite von denen ja nicht mit dem tatsächlichen inhalt am ende übereinstimmt.
Also wäre es jetzt echt prima, wenn man mir entweder bessere Lösungen/ansätze zeigen könnte für die Umsetzung oder Literatur, die das ganze halbwegs gut erklärt und ich mich somit einlesen könnte, weil bis jetzt konnte ich so nix besseres finden, was mir da weiterhilft, bedanke mich schonmal für eure hilfe im vorfeld, hoffe es war nicht zuviel zu lesen.

Code:
import javax.swing.*;
import java.awt.*;
import java.util.Vector;

// got this workaround from the following bug:
//      http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4618607
public class WideComboBox extends JComboBox{

   public WideComboBox() {
   }

   public WideComboBox(final Object items[]){
       super(items);
   }

   public WideComboBox(Vector items) {
       super(items);
   }

       public WideComboBox(ComboBoxModel aModel) {
       super(aModel);
   }

   private boolean layingOut = false;

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

   public Dimension getSize(){
       Dimension dim = super.getSize();
       if(!layingOut)
           dim.width = Math.max(dim.width, getPreferredSize().width);
       return dim;
   }
}
hier nochmal die an sich bessere combobox, die halt nicht klappt:
Code:
public class WiderDropDownCombo extends JComboBox {

   private String type;
   private boolean layingOut = false;
   private int widestLengh = 0;
   private boolean wide = false;

   public WiderDropDownCombo(Object[] objs) {
       super(objs);
   }

   public boolean isWide() {
       return wide;
   }

   // Setting the JComboBox wide
   public void setWide(boolean wide) {
       this.wide = wide;
       widestLengh = getWidestItemWidth();

   }

   public Dimension getSize() {
       Dimension dim = super.getSize();
       if (!layingOut && isWide())
           dim.width = Math.max(widestLengh, dim.width);
       return dim;
   }

   public 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;
   }

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

   public String getType() {
       return type;
   }

   public void setType(String t) {
       type = t;
   }

   public static void main(String[] args) {
       String title = "Combo Test";
       JFrame frame = new JFrame(title);

       String[] items = {
               "I need lot of width to be visible , oh am I visible now",
               "I need lot of width to be visible , oh am I visible now" };
       WiderDropDownCombo simpleCombo = new WiderDropDownCombo(items);
       simpleCombo.setPreferredSize(new Dimension(180, 20));
       simpleCombo.setWide(true);
       JLabel label = new JLabel("Wider Drop Down Demo");

       frame.getContentPane().add(simpleCombo, BorderLayout.NORTH);
       frame.getContentPane().add(label, BorderLayout.SOUTH);
       int width = 200;
       int height = 150;
       frame.setSize(width, height);
       frame.setVisible(true);

   }
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
hannibalstgt Fehler bei JCOMBOBOX GUI Anzeige AWT, Swing, JavaFX & SWT 4
L jComboBox Actionlistener wird beim erstmaligen Befüllen getriggert AWT, Swing, JavaFX & SWT 7
N Keylistener & JComboBox AWT, Swing, JavaFX & SWT 5
R JComboBox abfragen AWT, Swing, JavaFX & SWT 1
Esquid If Befehl bei JComboBox AWT, Swing, JavaFX & SWT 3
kodela Swing Element einer JComboBox ausgrauen AWT, Swing, JavaFX & SWT 3
D JComboBox Strings aus JTextFields zuordnen AWT, Swing, JavaFX & SWT 2
F JComboBox und Model AWT, Swing, JavaFX & SWT 10
I Editierbare JComboBox, die nur Ganzzahlen als Eingabewerte zulässt AWT, Swing, JavaFX & SWT 3
Drachenbauer Swing Wie ändere ich die Farbe der Konturen von jButton und jCombobox? AWT, Swing, JavaFX & SWT 18
Drachenbauer Swing Wie ändere ich den Hintergrund vom Anzeigefeld einer JComboBox, die nicht zum Hineinschreiben offen steht? AWT, Swing, JavaFX & SWT 32
Hatsi09 JCombobox default wert AWT, Swing, JavaFX & SWT 6
D Swing JCombobox Aktion löscht Grafik AWT, Swing, JavaFX & SWT 1
cezary Choice, JComboBox oder JList AWT, Swing, JavaFX & SWT 5
R Swing Java9 NullPointerException bei JComboBox AWT, Swing, JavaFX & SWT 13
ralfb1105 Swing JComboBox update der Daten AWT, Swing, JavaFX & SWT 8
D Swing JCombobox Weiße Leerzeilen AWT, Swing, JavaFX & SWT 10
G JComboBox: Arrow-Button permanent anzeigen AWT, Swing, JavaFX & SWT 4
D Swing Java JComboBox Example AWT, Swing, JavaFX & SWT 16
K Swing JComboBox mit ArrayList füllen AWT, Swing, JavaFX & SWT 4
D Swing "blaues" Element aus JComboBox erhalten AWT, Swing, JavaFX & SWT 6
F JComboBox und Einträge AWT, Swing, JavaFX & SWT 3
T JPanelsteuerung mit JComboBox AWT, Swing, JavaFX & SWT 5
N Swing Duplikate im Jcombobox vermeiden AWT, Swing, JavaFX & SWT 15
L Swing JComboBox kann nicht erstellt werden! AWT, Swing, JavaFX & SWT 2
C JComboBox Objecte übergeben und Eintrag auswählen AWT, Swing, JavaFX & SWT 3
M Swing JComboBox mit Laufwerksbuchstaben (Windows) AWT, Swing, JavaFX & SWT 6
D Swing Größe einer JComboBox im GridBagLayout aufgrund der maximalen Länge der enthaltenen Daten AWT, Swing, JavaFX & SWT 7
D Swing JComboBox (DefaultComboBoxModel) überschreibt Eintrag beim erstellen AWT, Swing, JavaFX & SWT 0
R Swing Durch JComboBox-Item eine TextArea aktualisieren AWT, Swing, JavaFX & SWT 2
3 JComboBox - Action - Auslesen & Umwandeln AWT, Swing, JavaFX & SWT 9
M Alle Schriftarten in JComboBox AWT, Swing, JavaFX & SWT 5
M Swing JComboBox eigenes Design AWT, Swing, JavaFX & SWT 3
Sin137 JComboBox mit Generics AWT, Swing, JavaFX & SWT 14
R JComboBox erweitern AWT, Swing, JavaFX & SWT 5
S Swing Eigene JComboBox Problem! AWT, Swing, JavaFX & SWT 1
V Editierbare JComboBox AWT, Swing, JavaFX & SWT 2
D Swing JCombobox in einem JTable vorbelegen AWT, Swing, JavaFX & SWT 4
F neuen Menüpunkt in jcombobox einfügen AWT, Swing, JavaFX & SWT 1
F Swing Jcombobox mit manueller Rückgabe AWT, Swing, JavaFX & SWT 4
W JComboBox auffristen nach Listenänderung AWT, Swing, JavaFX & SWT 20
S JComboBox mit mehreren Spalten? AWT, Swing, JavaFX & SWT 6
J JComboBox + ItemListener AWT, Swing, JavaFX & SWT 12
T Swing jComboBox auslesen mit Datenbankanbindung AWT, Swing, JavaFX & SWT 3
S JComboBox aus anderer Klasse füllen (Java-Swing) AWT, Swing, JavaFX & SWT 0
D Swing Erstes Item einer JCombobox in JTable anzeigen AWT, Swing, JavaFX & SWT 2
N JComboBox in JTable [Swing] -> totaler UI-Einsteiger AWT, Swing, JavaFX & SWT 3
H Swing jComboBox Ausgabe -1/null AWT, Swing, JavaFX & SWT 4
C Arrow Farbe bei JComboBox AWT, Swing, JavaFX & SWT 2
H Swing JList/JTable mit JButton, JTextField, Image, JComboBox und JLable AWT, Swing, JavaFX & SWT 2
O JTextfield und JComboBox Wert in SQL Database speichern AWT, Swing, JavaFX & SWT 4
S JComboBox UTF-8 Codierung zuweisen AWT, Swing, JavaFX & SWT 5
A JComboBox mit Array aktualisieren AWT, Swing, JavaFX & SWT 7
S JComboBox nach auswahl erneuern AWT, Swing, JavaFX & SWT 4
S Swing JComboBox mit Listener aktualisieren AWT, Swing, JavaFX & SWT 13
A Swing per JComboBox gewünschtes Attribut auswählen und Komponenten passen sich an AWT, Swing, JavaFX & SWT 7
I JComboBox gibt bei ausgewählten ITem NullPointer an... AWT, Swing, JavaFX & SWT 3
D Swing JCombobox - Tooltip Location ändern AWT, Swing, JavaFX & SWT 4
J JComboBox Dropdown Icon AWT, Swing, JavaFX & SWT 2
M Swing Mix JComboBox - JButton? AWT, Swing, JavaFX & SWT 6
A Swing bei Auswahl und klick eines JComboBox buttons die Klasse eines anderen Projekts aufrufen AWT, Swing, JavaFX & SWT 3
F Swing jComboBox auslesen AWT, Swing, JavaFX & SWT 6
O Swing TableCellRenderer und JComboBox AWT, Swing, JavaFX & SWT 4
F Swing JComboBox - Frage zur Größe AWT, Swing, JavaFX & SWT 11
C Swing JComboBox, ItemListener gibt 2x aus AWT, Swing, JavaFX & SWT 2
O JComboBox - autom. Selektieren AWT, Swing, JavaFX & SWT 6
J JComboBox - wie getSelectedItem() überschreiben? AWT, Swing, JavaFX & SWT 8
S Swing Jcombobox und array AWT, Swing, JavaFX & SWT 6
D Swing JComboBox aktualisieren AWT, Swing, JavaFX & SWT 4
E JComboBox AWT, Swing, JavaFX & SWT 8
N Swing JComboBox Frage AWT, Swing, JavaFX & SWT 5
S Swing Bild auf jPanel nach Änderung von JComboBox zeichnen AWT, Swing, JavaFX & SWT 4
H Swing Element aus JComboBox auswählen AWT, Swing, JavaFX & SWT 2
H JCombobox inhalt löschen AWT, Swing, JavaFX & SWT 17
N Swing JCombobox - PopupMenu-Inhalt mit KSKB AWT, Swing, JavaFX & SWT 2
O JComboBox mit ArrayList füllen AWT, Swing, JavaFX & SWT 3
S Swing JComboBox mit Datenbank füllen AWT, Swing, JavaFX & SWT 16
S Inhalt einer JComboBox aktualisieren AWT, Swing, JavaFX & SWT 6
F Swing JComboBox in JTable AutoComplete + Tab AWT, Swing, JavaFX & SWT 4
O JComboBox getSelectedItem AWT, Swing, JavaFX & SWT 4
M JComboBox Hintergrundfarbe des gewählten Items AWT, Swing, JavaFX & SWT 3
B Swing Problem: Horizontaler Scrollbalken in JComboBox hinzufügen AWT, Swing, JavaFX & SWT 4
M JCombobox mit ID und Text AWT, Swing, JavaFX & SWT 4
A JComboBox-Inhalt durch neues Array ersetzen AWT, Swing, JavaFX & SWT 2
C Swing Dynamische JComboBox (Filter) AWT, Swing, JavaFX & SWT 28
M JComboBox Item-Auswahl in JTable AWT, Swing, JavaFX & SWT 2
L Jbutton + jcombobox mit vorhandenen frame verknüfen AWT, Swing, JavaFX & SWT 8
D JCombobox mit Linien Styles AWT, Swing, JavaFX & SWT 4
H Unterschiedliche JComboBox je JTable Zeile AWT, Swing, JavaFX & SWT 4
B jCombobox addItem funktioniert nicht AWT, Swing, JavaFX & SWT 9
G JComboBox mit CellRenderer (Auswahl) AWT, Swing, JavaFX & SWT 11
G Swing JComboBox anpassen AWT, Swing, JavaFX & SWT 6
M Item in JComboBox umbenennen AWT, Swing, JavaFX & SWT 5
M Swing Busy Waiting Problem (JComboBox) AWT, Swing, JavaFX & SWT 11
C JComboBox Renderer Problem AWT, Swing, JavaFX & SWT 7
N Renderer Editoren und die JCombobox AWT, Swing, JavaFX & SWT 2
T Wie ist das "Lookup-Verhalten" von JList, JCombobox änderbar? AWT, Swing, JavaFX & SWT 4
N JCombobox und Actionlistener Aktion nur ausführen, wenn Useraktion ihn auslöst AWT, Swing, JavaFX & SWT 4
T Swing JComboBox mit grauem Vorgabetext AWT, Swing, JavaFX & SWT 3
M TableLayout: JComboBox zerstört alles... AWT, Swing, JavaFX & SWT 10

Ähnliche Java Themen

Neue Themen


Oben