jComboBox itemlänge

Status
Nicht offen für weitere Antworten.

Imunar

Mitglied
Guten Morgen, ich habe mal wieder eine kleine Frage.
ist es möglich mit einer jComboBox die Einträge während des Dropdown komplett anzeigen zu Lassen aber nach der auswahl die Combox weiterhin in der Festgelegten größe behlten?

Also vergleichsweise bei HTML Dropdownboxen (im NICHT IE)
die die auswahlliste selber auf die maximale breite einstellt.

(finde heute natürlich kein beispiel dafür =_= )
[edit: hier ist zwar mit ein wenig hantiert worden aber die thematik stellt es gut da:
geht das dort auch mit java?
Drop down <select /> with fixed width
]

gibt es da auch eine Lösung unter Java?
Denn die Combobox soll eine feste Breite haben dennoch aber die Einträge beim auswählen komplett enzeigen.

Mfg
Imunar
 
Zuletzt bearbeitet:

KrokoDiehl

Top Contributor
Moin.
Ich hatte so ein Problem auch mal und bin auf keine einfache Lösung gestoßen (was nicht heißen soll, dass es keine gibt).
Die JComboBox benutzt intern eine Implementierung von ComboPopup. Das ganze läuft aber über die ComboBoxUI Klasse. Also mein Fazit: Das ComboPopup ist tief drin und es gibt keinen Setter oder dergleichen um es einfach auszutauschen. Ich denke man muss eine eigene ComboBoxUI-Klasse schreiben, zumindest sehe ich keinen direkteren Weg. In der Implementierung von BasicComboPopup (ein ComboPopup) habe ich den Code gesehen, der die Größe des Popups berechnet, und darin die Größe der JComboBox benutzt, aber keine weitere Einflussnahme entdeckt.

Vielleicht kann man aber von außen her etwas machen, indem man z.B. einen PopupMenuListener an die Combobox hängt und darauf reagiert. Ich habe das aber nie probiert.
 

Imunar

Mitglied
Moin.
Ich hatte so ein Problem auch mal und bin auf keine einfache Lösung gestoßen (was nicht heißen soll, dass es keine gibt).
Die JComboBox benutzt intern eine Implementierung von ComboPopup. Das ganze läuft aber über die ComboBoxUI Klasse. Also mein Fazit: Das ComboPopup ist tief drin und es gibt keinen Setter oder dergleichen um es einfach auszutauschen. Ich denke man muss eine eigene ComboBoxUI-Klasse schreiben, zumindest sehe ich keinen direkteren Weg. In der Implementierung von BasicComboPopup (ein ComboPopup) habe ich den Code gesehen, der die Größe des Popups berechnet, und darin die Größe der JComboBox benutzt, aber keine weitere Einflussnahme entdeckt.

Vielleicht kann man aber von außen her etwas machen, indem man z.B. einen PopupMenuListener an die Combobox hängt und darauf reagiert. Ich habe das aber nie probiert.

danke,
uff das hört sich nicht nach einer schnellen lösung an. aber werde ich mir bei zeiten ansehen...
dachte das es bei java evlt ne build in lösung gibt...
mal schaun ob es es hinbekomme.

Bin aber auch für weitere vorschläge sehr Dankbar

Imu
 

KrokoDiehl

Top Contributor
Imunar hat gesagt.:
Bin aber auch für weitere vorschläge sehr Dankbar
...da schließe ich mich an :)
Aktuell ist das Problem über eine eigene Komponente gelöst, die wie eine ComboBox reagiert. Aber es gab noch weitere Gründe für diese eigene Implementierung, daher bringt die dir sicher nichts.
 

Michael...

Top Contributor
Hatte in der Mittagspause zu viel Zeit und hab mal ein bisschen rumprobiert. Bin noch nicht ganz an das gewünschte Ergebnis ran gekommen.
- man müsste noch ein paar Anpassungen machen, damit das ganze auch mit LayoutManagern geht.
- wenn man ins Textfeld clickt funktioniert das ganze soweit, wenn man aber den Dropdown über den Button öffnet, muss man den Eintrag mit gedrückter Maustaste auswählen

Vielleicht hilft Euch der Ansatz ja weiter, vielleicht ist er aber auch eine Sackgasse
Java:
import java.awt.Component;

import javax.swing.*;
import javax.swing.event.*;

public class ComboRendererDemo extends JFrame {
	private JComboBox combo;
	private MyComboRenderer renderer;

	public ComboRendererDemo() {
		this.getContentPane().setLayout(null);
		combo = new JComboBox(new String[] { "Option 1", "Option 2",
				"gaaaanz laaaaange Option 3" });
		combo.setBounds(100, 100, 80, 26);
		this.getContentPane().add(combo);
		combo.setRenderer(renderer = new MyComboRenderer());

		combo.addPopupMenuListener(new PopupMenuListener() {

			public void popupMenuCanceled(PopupMenuEvent evt) {}

			public void popupMenuWillBecomeInvisible(PopupMenuEvent evt) {
				setMinComboSize();
			}

			public void popupMenuWillBecomeVisible(PopupMenuEvent evt) {
				if (!popupIsResizing) {
					popupIsResizing = true;
					setPrefComboSize();
					combo.showPopup();
					popupIsResizing = false;
				}
			}
		});
	}
	
	private boolean popupIsResizing = false;

	private void setMinComboSize() {
		combo.setSize(80, 26);
		combo.validate();
	}

	private void setPrefComboSize() {
		combo.setSize(renderer.getList().getPreferredSize().width + 30, combo
				.getPreferredSize().height);
		combo.validate();
	}

	public static void main(String[] args) {
		JFrame frame = new ComboRendererDemo();
		frame.setBounds(0, 0, 500, 300);
		frame.setLocationRelativeTo(null);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
	}

	class MyComboRenderer extends DefaultListCellRenderer {
		private JList list;

		public Component getListCellRendererComponent(JList list, Object value,
				int index, boolean isSelected, boolean cellHasFocus) {
			this.list = list;
			return super.getListCellRendererComponent(list, value,
					index, isSelected, cellHasFocus);
		}

		public JList getList() {
			return list;
		}
	}
}
 

Imunar

Mitglied
Moin,

ich glaube der Thread ist ein wenig überholt
(letzter Beitrag 1009)

Ich hatte es damals auf eine ähnlich Art und weise gelöst.

Gruß
Imu
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
G JComboBox XYZ uses unchecked or unsafe operations Allgemeine Java-Themen 1
FrittenFritze Problem mit einer JComboBox, Event temporär deaktivieren Allgemeine Java-Themen 11
P Variablen Auf durch for-Schleife generierte JComboBox zugreifen Allgemeine Java-Themen 3
S Unchecked cast from Component to JComboBox<String> Allgemeine Java-Themen 3
Luk10 Frage zu JComboBox und GridLayout Allgemeine Java-Themen 3
C Swing JComboBox - Problem mit der Darstellung des Inhaltes Allgemeine Java-Themen 9
MQue JComboBox in JTable Allgemeine Java-Themen 4
G JComboBox getSelectedItem Zeit Allgemeine Java-Themen 5
D Locale mit JCombobox umschalten Allgemeine Java-Themen 19
E JComboBox Allgemeine Java-Themen 3
V JComboBox und Wertevergleich. Allgemeine Java-Themen 2
D JComboBox - SelectedIndex Allgemeine Java-Themen 6
P JComboBox Array unterscheiden Allgemeine Java-Themen 3
E JComboBox und JTextFeld mischen Allgemeine Java-Themen 2
T JComboBox simulieren Allgemeine Java-Themen 9
C JCombobox ImageIcon & Text Allgemeine Java-Themen 2
G JComboBox mit aufklappbarem JPanel? Allgemeine Java-Themen 13
G JComboBox mit Werten aus einer Access Datenbank füllen Allgemeine Java-Themen 18
B JComboBox-Eintrag ohne Enter aktualisieren Allgemeine Java-Themen 2
C Serialisierung von JComboBox Allgemeine Java-Themen 4

Ähnliche Java Themen

Neue Themen


Oben