JComboBox andere Darstellung des Inhaltes + größe der Auswah

Status
Nicht offen für weitere Antworten.

outbreaker

Bekanntes Mitglied
Hallo

ich habe folgendes Problem:
1) ich habe eine JComboBox und möchte das wenn der Benutzer die JComboBox öffnet die Größe der Liste nicht in der Breite auf die Breite der JComboBox begrenzt ist (Bild 1).

2) Möchte ich das die Auswahlliste ungefähr so aussieht:

1 -- Beschreibung
2 -- Beschreibung
3 -- Beschreibung
...

Wenn aber ein Punkt ausgewählt wurde das nur die Zahl angezeigt wird (Also ohne die Punkte usw wie in Bild 2)
Habe dazu mal einen ListCellRenderer geschrieben der das auch macht aber wie bekomme ich in dem Renderer raus ob die ComboBox geöffnet ist oder nicht? Weil mit dem Renderer werden mir immer nur die Zahlen angezeigt! (Bild 3)

JCB.jpg


Danke für die Hilfe
 

outbreaker

Bekanntes Mitglied
Das Problem mit dem Anzeigen habe ich gelöst aber breiter habe ich es noch nicht bekommen!
Hat da jemand eine Idee oder einen Ansatz?


Den Code werde ich dann später posten für den Renderer

Wäre für jeden Tipp dankbar
 
S

SlaterB

Gast
kommt doch auf Layout + setPreferedSize() und ähnliches an?
 

outbreaker

Bekanntes Mitglied
naja ich möchte ja das die ComboBox selber so klein bleibt wie in Bild 1 gezeigt aber ich möchte das die Liste welche aufgeht breiter ist.
Das ist mein Problem oder geht das nicht?
 

outbreaker

Bekanntes Mitglied
So ich konnte mir dank langem suchen in den weiten des www und meinem Freund google selber helfen :wink:

Hier jetzt mal der Lösungscode

Einmal der Renderer um die Darstellung zu ändern:

Code:
public class MyCellRenderer extends JLabel implements ListCellRenderer {
	
	private ListCellRenderer lcr;
	
     public MyCellRenderer(ListCellRenderer lcr) {
    	 this.lcr = lcr;
         setOpaque(true);
     }
     
     public Component getListCellRendererComponent(JList list,
                                                   Object value,
                                                   int index,
                                                   boolean isSelected,
                                                   boolean cellHasFocus) {

         setText(value.toString().substring(0, 1));

         if (list.isShowing())
         {
        	 return lcr.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
         }
         else
         {
        	 return lcr.getListCellRendererComponent(list, value.toString().substring(0, 1), index, isSelected, cellHasFocus);
         }
     }
     
 }

um die Größe der Liste zu ändern müssen zwei weitere Klassen angelegt werden
einmal die SteppedComboBoxUI

Code:
public class SteppedComboBoxUI extends MetalComboBoxUI {
	 
	protected ComboPopup createPopup() 
	{
		    BasicComboPopup popup = new BasicComboPopup( comboBox ) {
		        
		      public void show() {
		        Dimension popupSize = ((SteppedComboBox)comboBox).getPopupSize();
		        popupSize.setSize( popupSize.width,
		          getPopupHeightForRowCount( comboBox.getMaximumRowCount() ) );
		        Rectangle popupBounds = computePopupBounds( 0,
		          comboBox.getBounds().height, popupSize.width, popupSize.height);
		        scroller.setMaximumSize( popupBounds.getSize() );
		        scroller.setPreferredSize( popupBounds.getSize() );
		        scroller.setMinimumSize( popupBounds.getSize() );
		        list.invalidate();            
		        int selectedIndex = comboBox.getSelectedIndex();
		        if ( selectedIndex == -1 ) {
		          list.clearSelection();
		        } else {
		          list.setSelectedIndex( selectedIndex );
		        }            
		        list.ensureIndexIsVisible( list.getSelectedIndex() );
		        setLightWeightPopupEnabled( comboBox.isLightWeightPopupEnabled() );

		        show( comboBox, popupBounds.x, popupBounds.y );
		      }
		    };
		    popup.getAccessibleContext().setAccessibleParent(comboBox);
		    return popup;
	}
}

und dann noch die SteppedComboBox welche von JComboBox abgeleitet ist

Code:
public class SteppedComboBox extends JComboBox {
	  protected int popupWidth;
	  
	  public SteppedComboBox(ComboBoxModel aModel) {
	    super(aModel);
	    //setUI(new SteppedComboBoxUI());
	    popupWidth = 0;
	  }

	  public SteppedComboBox(final Object[] items) {
	    super(items);
	    //setUI(new SteppedComboBoxUI());
	    popupWidth = 0;
	  }
	  
	  public SteppedComboBox(Vector items) {
	    super(items);
	    //setUI(new SteppedComboBoxUI());
	    popupWidth = 0;
	  }
	  
	  
	  public void setPopupWidth(int width) {
	    popupWidth = width;
	  }
	  
	  public Dimension getPopupSize() {
	    Dimension size = getSize();
	    if (popupWidth < 1) popupWidth = size.width;
	    return new Dimension(popupWidth, size.height);
	  }
	}


So nun noch eine Klasse zum Ausführen und fertig ist es:

Code:
public class MyJCB extends JFrame{

	private SteppedComboBox jCB;
	private String[] inhalt = {"1 -- das ist der Text","2 -- das ist der zweite","3 -- das ist der dritte"};
	
	public MyJCB() 
	{
		jCB = new SteppedComboBox(inhalt);
		jCB.setBounds(10, 10, 50, 21);
		jCB.setRenderer(new MyCellRenderer(jCB.getRenderer()));
		jCB.setPopupWidth(300);
		this.setSize(200, 200);
		this.setLayout(null);
		this.add(jCB);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setVisible(true);
	}
	
	public static void main(String[] args) {
		new MyJCB();
	}
}

Hilfe für diesen Code habe ich hier gefunden: www.codeguru.com/java/articles/163.shtml

Danke an alle die Versucht haben mir zu helfen
 

Ariol

Top Contributor
Ich hab beim Googlen was gefunden:
http://forums.java.net/jive/message.jspa?messageID=61262


Hab das dann mal eingebaut und etwas angepasst:
Code:
import java.awt.Dimension;

import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JPopupMenu;
import javax.swing.event.PopupMenuEvent;
import javax.swing.event.PopupMenuListener;

public class OwnJComboBox extends JComboBox implements PopupMenuListener
{
	private Dimension popupSize = getPreferredSize();
	
	public OwnJComboBox(Object[] items)
	{
		super(items);
		addPopupMenuListener(this);
	}

	public Dimension getPopupSize()
	{
		return popupSize;
	}
	
	public void setPopupSize(Dimension popupSize)
	{
		this.popupSize = popupSize;
	}
	
	public void popupMenuCanceled(PopupMenuEvent e)
	{}

	public void popupMenuWillBecomeInvisible(PopupMenuEvent e)
	{}

	public void popupMenuWillBecomeVisible(PopupMenuEvent e)
	{
		JComboBox box = (JComboBox) e.getSource();
		Object comp = box.getUI().getAccessibleChild(box, 0);
		if (comp instanceof JPopupMenu)
		{
			JPopupMenu popup = (JPopupMenu) comp;
			JComponent scrollPane = (JComponent) popup.getComponent(0);
			Dimension size = scrollPane.getPreferredSize();
			
			size = getPopupSize();
			scrollPane.setSize(size);
			scrollPane.setPreferredSize(size);
			scrollPane.getLayout().preferredLayoutSize(scrollPane);
			System.out.println(scrollPane.getComponentCount());
		}
	}

}

Alles nicht gerade sauber und der Text wird zumindest bei mir nicht richtig angezeigt, aber zumindest mal ein Anfang ^^


EDIT: @outbreaker:Schön, dass du was gefunden hast. Bei deiner Lösung kann es aber passieren, dass die Combobox nicht mehr ins L&F passt, wenn du das einmal ändern willst.
Soll deiner Lösung jetzt aber keinen Abbruch tun.
:wink:
 
G

Guest

Gast
Hi,

finde ich gut, dass Du andere an deiner Lösung teilhaben läßt und dich nicht einfach nicht mehr meldest. :toll:

Gruß monet
 

outbreaker

Bekanntes Mitglied
ist für mich selbstverständlich :wink:
habe selber schon oft in Foren gelesen und gedacht schön und wo ist nun die Lösung zu dem Problem :?:
Nur ein "hat sich Erleding habe Problem gelöst" hilft ja anderen nicht weiter
:wink:
 
G

Guest

Gast
Nur ein "hat sich Erleding habe Problem gelöst" hilft ja anderen nicht weiter

Sehe ich genauso. Man verlangt ja hier nicht von jemanden, dass er einen kompletten Code heraus-
gibt. Ich betrachte so etwas immer als einen Denkanstoß für eigene Programme. Manchmal kann
auch nur ein kleiner Codeschnipsel schon eine Lösung für sein eigenes Prog. sein oder man
erkennt einen neuen Ansatz, der einem noch nicht eingefallen ist. :###

Weiter so,

Gruß monet
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Swing Auswahl einer JComboBox für eine andere JComboBox übernehmen AWT, Swing, JavaFX & SWT 4
S Andere Elemente in JComboBox anzeigen AWT, Swing, JavaFX & SWT 2
G JComboBox soll beim Öffnen eine andere JComboBox öffnen AWT, Swing, JavaFX & SWT 3
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
gamillton Swing JComboBox mit extra Inhalt + breiteres Popupmenü AWT, Swing, JavaFX & SWT 0
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

Ähnliche Java Themen

Neue Themen


Oben