Swing JComboBox in JTable AutoComplete + Tab

fireflyer

Mitglied
Hallo zusammen,

ich hänge nun schon seit mehreren Tagen an einem Problem. Ich möchte das Verhalten einer JComboBox in einer JTable zu einer der normalen JComboBox angleichen.

Etwas genauer:
Bei einer normalen ComboBox kann man einträge mit den Pfeiltasten im PopDown-Menu selektieren. Bei jeder Selektion wird der Wert in der EditorComponent mit verändert. Sobald man also TAB drückt wechselt der Focus und der zuvor angewählte Wert bleibt in der ComboBox stehen.

In der JTable wird nun bei der ComboBox folgende ClientProperty gesetzt:
Java:
comboBox.putClientProperty("JComboBox.isTableCellEditor", Boolean.TRUE);

Dadurch verändert sich dieses Verhalten. Nun werden die Werte nicht mehr automatisch in der EditorComponent aktualisiert, die Folge wenn man nun weiter tabbt wird der selektierte Wert (im PopDown-Menu) nicht übernommen. Ich möchte dieses Verhalten ändern jedoch sind meine Versuche bisher fehlgeschlagen. Hier mal die 2 die ich für am viel versprechensten gehalten hatte.

1. Versuch:
Über KeyBindings. Ich habe versucht die Action "enterPressed" die logischerweise auf der Taste Enter liegt, mit der Tab-Taste zu teilen. Das klappt auch, es wird bei Tab, quasi Enter gedrückt, allerdings ist dann unmöglich aus der Zelle in der Tabelle rauszutabben. Irgendwie wird dadurch die FocusTraversalPolicy der JTable durcheinander gebracht.

2. Versuch:
Da ich keinen Listener finden konnte der bei einer Selektion im DropDown-Menu feuert habe ich mir schnell einen eigenen Renderer geschrieben der genau das erledigt hatte. Das funktioniert auch wunderbar, allerdings zerstöre ich damit die Autovervollständigung. Das geschieht dadurch: Man tippt etwas in die Editierbare Combobox, dadurch wird die Selektion im DropDown-Menu getriggert, diese feuert und in der Editor-Component wird der neue Wert übernommen.

Ich hatte noch ca 8 andere Versuche die aber schon früher gescheitert sind, die naive Methode die ClientProperty einfach wieder auf False zu setzen klappt leider nicht da dann die JComboBox überhaupt nicht mehr funktioniert. Dies war bei den meisten meiner anderen Versuche ebenfalls der Fall.

Ich habe viel Zeit mit Suchen verbracht eine ähnliche Implementierung konnte ich nur hier finden:
Tab in and out JComboBox in JTable : Table Renderer EditorSwing JFCJava
Als ich die Autovervollständigung darin mit implementieren wollte ging das aber leider wieder schief. :(

Hier mal eine kleines Testscript bei der ihr die Problematik hoffentlich gut verstehen könnt. Ihr benötigt dazu allerdings die SwingX-Libary. Zu finden gibts die unter anderem hier: Maven Repository: org.swinglabs » swingx-core
Java:
import java.awt.FlowLayout;

import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JTable;

import org.jdesktop.swingx.autocomplete.AutoCompleteDecorator;
import org.jdesktop.swingx.autocomplete.ComboBoxCellEditor;

public class TableComboBox extends JFrame {
	private static final long serialVersionUID = 4313249824505939683L;

	private JTable table;
	private JComboBox cbox, tcbox;
	
	private Object[][] data = {{"A", "B", "C"},{"D", "E", "F"}};
	private String[] cols = {"c1", "c2"};
	
	public static void main(String[] args) {
		new TableComboBox();
	}
	
	public TableComboBox() {
		table = new JTable(data, cols);
		this.cbox = new JComboBox(new Object[] {"Ernie", "Bert", "Cookie"});
		this.tcbox = new JComboBox(new Object[] {"Ernie", "Bert", "Cookie"});
		
		this.cbox.setEditable(true);
		this.tcbox.setEditable(true);
		
		AutoCompleteDecorator.decorate(cbox);
		AutoCompleteDecorator.decorate(tcbox);
		
		
		table.getColumnModel().getColumn(0).setCellEditor(new ComboBoxCellEditor(tcbox));
		
		this.init();
	}
	
	private void init() {
		this.setLayout(new FlowLayout());
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		this.add(this.cbox);
		this.add(this.table);
		
		
		this.pack();
		this.setVisible(true);
	}
}

Ich hoffe ihr habt irgend eine Lösung oder einen Ansatz für mich. Das wäre echt super wenn ich das mit eurer Hilfe irgendwie schaffen würde :)

Viele Grüße,
fireflyer
 
Zuletzt bearbeitet von einem Moderator:

fireflyer

Mitglied
Hi,

darauf habe ich doch schon selbst referenziert? Mit dem AutoCompleteDecorator funktioniert das leider nicht :/

Viele Grüße,
fireflyer
 

fireflyer

Mitglied
Okay ich glaube ich habe eine Lösung gefunden. Sie scheint bei mir auf den ersten Blick zu funktionieren. Sie ist sicherlich nicht schön, aber egal.

Java:
JComboBox combobox = new JComboBox();
		combobox.setEditable(true);
		AutoCompleteDecorator.decorate(combobox);
		
		final JList c_list = ((ComboPopup) combobox.getUI().getAccessibleChild(combobox, 0)).getList();
		final JTextField c_field = (JTextField) combobox.getEditor().getEditorComponent();
		
		c_field.addKeyListener(new KeyListener() {
			
			@Override
			public void keyTyped(KeyEvent e) {
			}
			
			@Override
			public void keyReleased(KeyEvent e) {
				if(e.getKeyCode() == KeyEvent.VK_DOWN || e.getKeyCode() == KeyEvent.VK_UP) {
					Object val = c_list.getSelectedValue();
					if(val != null) {
						c_field.setText(String.valueOf(val));
					}
					c_field.selectAll();
				}
			}
			
			@Override
			public void keyPressed(KeyEvent e) {
			}
		});

Vielleicht hat ja jemand einmal das gleiche Problem, dann hilft ihm hoffentlich das hier :)

Viele Grüße,
fireflyer
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Swing JCombobox in einem JTable vorbelegen AWT, Swing, JavaFX & SWT 4
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 JList/JTable mit JButton, JTextField, Image, JComboBox und JLable AWT, Swing, JavaFX & SWT 2
M JComboBox Item-Auswahl in JTable AWT, Swing, JavaFX & SWT 2
H Unterschiedliche JComboBox je JTable Zeile AWT, Swing, JavaFX & SWT 4
D Swing jTable mit jComboBox in einem Coloumn AWT, Swing, JavaFX & SWT 28
S Einzelne JComboBox in JTable austauschen AWT, Swing, JavaFX & SWT 4
S Swing AWT-Exception bei JTable mit JComboBox beim Löschen der letzten Zeile AWT, Swing, JavaFX & SWT 3
C jComboBox in jTable ohne Klick öffnen AWT, Swing, JavaFX & SWT 4
O Swing JComboBox in JTable AWT, Swing, JavaFX & SWT 14
K Swing JComboBox in JTable AWT, Swing, JavaFX & SWT 9
B JComboBox in JTable, Actionlistener AWT, Swing, JavaFX & SWT 10
E Swing JComboBox als CellEditor in JTable zeigt Elemente nicht sofort an AWT, Swing, JavaFX & SWT 5
M Swing jcombobox als jtable-editor: neues Item auswählen AWT, Swing, JavaFX & SWT 4
N jTable mit JComboBox auslesen AWT, Swing, JavaFX & SWT 6
K Swing JTable mit JComboBox AWT, Swing, JavaFX & SWT 10
A JComboBox bei Veränderungen in der JTable mit aktualisieren AWT, Swing, JavaFX & SWT 6
A JComboBox-Zeilen in JTable AWT, Swing, JavaFX & SWT 2
W JComboBox in einer Reihe von JTable AWT, Swing, JavaFX & SWT 7
G Swing JComboBox in JTable beim Aufklappen befüllen AWT, Swing, JavaFX & SWT 3
S JComboBox in JTable wird erst nach klick angezeigt AWT, Swing, JavaFX & SWT 2
O JCombobox in EINER JTable Cell AWT, Swing, JavaFX & SWT 5
G JComboBox und JTable transparent AWT, Swing, JavaFX & SWT 18
D JCombobox in JTable AWT, Swing, JavaFX & SWT 5
J JCombobox in JTable klappt beim ersten Tastendruck zu AWT, Swing, JavaFX & SWT 3
G JTable mit JComboBox als Celleditor, selectedRow falsch! AWT, Swing, JavaFX & SWT 3
A JCombobox in JTable AWT, Swing, JavaFX & SWT 4
S JCbox in Jtable Zelle nur anzeigen , wenn JCombobox ="a AWT, Swing, JavaFX & SWT 3
H JTable und JCombobox ? AWT, Swing, JavaFX & SWT 2
M JComboBox in JTable immer sichtbar AWT, Swing, JavaFX & SWT 16
R JComboBox über ein AstractTableModel in eine JTable packen AWT, Swing, JavaFX & SWT 2
S JTable (Scrollpane und ColumnNames) und JComboBox AWT, Swing, JavaFX & SWT 2
M JTable mit JCombobox eigene Auswahl pro Zeile ? AWT, Swing, JavaFX & SWT 3
TRunKX Kann man ne JCOmboBox in eine JTAble einfügen AWT, Swing, JavaFX & SWT 10
D JTable und JComboBox oder CheckboxGroup AWT, Swing, JavaFX & SWT 6
S JComboBox in JTable AWT, Swing, JavaFX & SWT 8
K JTable als Popup in einer JComboBox? AWT, Swing, JavaFX & SWT 3
B Wert einer JCombobox in einer JTable setzen AWT, Swing, JavaFX & SWT 2
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
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
H Swing jComboBox Ausgabe -1/null AWT, Swing, JavaFX & SWT 4
C Arrow Farbe bei JComboBox 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

Ähnliche Java Themen

Neue Themen


Oben