JTable mit JComboBox als Celleditor, selectedRow falsch!

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hallo,

ich habe hier eine JTable, der ich eine JComboBox als Editor für eine Spalte mitgebe.
Der JComboBox habe einen ItemListener verpasst um auf das Wechseln des Wertes reagieren zu können.

Wenn ich nun auf die entsprechenden Zellen (mit der JComboBox) klicke und mir im ItemListener der JComboBox die selektierte Zeile ausgeben lasse, dann bekomme ich immer die vorherige Zeile, aber nicht die aktuell selektierte Zeile ausgegeben.

Warum ist das so? Bzw. wie komme ich in dem Moment an die richtige Zeile?
Hintergrund ist der, dass ich in der ersten Zelle (nicht sichtbar) ein Objekt habe, dessen Eigenschaften ich entsprechend setzen möchte, nur bei der falschen Reihe ändere ich dann natürlich auch das falsche Objekt.

Hier mal mein Testcode (ohne das Objekt), beinhaltet nur das Setzen des TableModels:
Code:
private void setModel() {
		DefaultTableModel dtm = null;
		
		Vector vCols = new Vector();
		vCols.addElement("Spalte1");
		vCols.addElement("Spalte2");
		vCols.addElement("Spalte3");
		vCols.addElement("Spalte4");
		vCols.addElement("Spalte5");
		
		Vector vRows = new Vector();
		for (int i = 0; i < 10; i++) {
			Vector vTmp = new Vector();
			for (int j = 0; j < 5; j++) {
				vTmp.addElement(String.valueOf(i)+"-"+String.valueOf(j));
			}
			vRows.addElement(vTmp);
		}
		
		dtm = new DefaultTableModel(vRows, vCols);
		tblTest.setModel(dtm);
		
		JComboBox cbTest = new JComboBox();
		cbTest.setFont(new Font("Dialog", Font.PLAIN, 11));
		cbTest.addItemListener(new java.awt.event.ItemListener() {
			public void itemStateChanged(java.awt.event.ItemEvent e) {
				System.out.print("row:");
				System.out.print(tblTest.getSelectedRow());
				System.out.print("=>itemStateChanged():");
				System.out.print(e.getItem()+":");
				System.out.print(e.getStateChange());
				if (e.getStateChange() == e.DESELECTED)
					System.out.println("(DESELECTED)");
				else
					System.out.println("(SELECTED)");
			}
		});
		cbTest.addItem("0-1");
		cbTest.addItem("1-1");
		cbTest.addItem("2-1");
		cbTest.addItem("3-1");
		cbTest.addItem("4-1");
		cbTest.addItem("5-1");
		cbTest.addItem("6-1");
		cbTest.addItem("7-1");
		cbTest.addItem("8-1");
		cbTest.addItem("9-1");
		
		DefaultCellEditor dce = new DefaultCellEditor(cbTest);
		tblTest.getSelectionModel().addListSelectionListener(new javax.swing.event.ListSelectionListener() {
			public void valueChanged(ListSelectionEvent e) {
				System.out.println(e.getFirstIndex()+":"+e.getLastIndex());
				tblTest.setRowSelectionInterval(e.getFirstIndex(), e.getFirstIndex());
			}
		});
		tblTest.getColumnModel().getColumn(1).setCellEditor(dce);
	}

In dem hinzugefügten ListSelectionListener erhalte ich mit e.getFirstIndex() allerdings die richtige Zeile. Nur wird das Event immer erst nach dem der JComboBox ausgeführt.

Gruß Björn
 

HLX

Top Contributor
Anstelle des ListSelectionListener: FocusListener an der Combobox.

Code:
cbTest.addFocusListener(new FocusListener() {

    public void focusGained(FocusEvent e) {
        System.out.println(tblTest.getSelectedRow()); 
        tblTest.setRowSelectionInterval(tblTest.getSelectedRow(), tblTest.getSelectedRow()); 
    }

    public void focusLost(FocusEvent e) {
        // nothing to do 
    };
});
 
G

Guest

Gast
Hallo HLX,

habe das mal geändert, bringt aber keinerlei "Verbesserung".
Das "itemStateChanged" wird vor dem "focusGained" aufgerufen und somit habe ich dann wieder die falsche Zeile.

Kann man die Reihenfolge der Events ändern?
Was mich auch wundert ist die Tatsache, dass anscheinend für die Spalte nur eine JComboBox benutzt wird und nicht pro Zeile eine eigene.

Danke & Gruß Björn
 

HLX

Top Contributor
Hmm, das Problem hatte ich nicht.

Ich nehme an, das erste Anklicken der Combobox soll nicht unbedingt ein "itemStateChanged" hervorrufen. Dann könntest du in der Methode "itemStateChanged" noch weiter eingrenzen:
Code:
if(cbTest.hasFocus()) {
...
}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
E Swing JComboBox als CellEditor in JTable zeigt Elemente nicht sofort an AWT, Swing, JavaFX & SWT 5
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
F Swing JComboBox in JTable AutoComplete + Tab AWT, Swing, JavaFX & SWT 4
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
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
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
I Swing JTable zeichnet kein vertical Grid AWT, Swing, JavaFX & SWT 6
J Drag und drop aus einer JTable - bitte um Unterstützung AWT, Swing, JavaFX & SWT 2
S HPRO und UPRO gemeinsame JTABLE gemeinsamer RENDERER ? AWT, Swing, JavaFX & SWT 1
F Swing JTable - MultiHeader inkl. Eingabemöglichkeit AWT, Swing, JavaFX & SWT 1
S JTable - Feldinhalte anzeigen AWT, Swing, JavaFX & SWT 15
D Swing JTable Spaltenbreite AWT, Swing, JavaFX & SWT 1
W Gibt es einen "automatischen Listener" in Swing oder JTable oder der ATM-Klasse? AWT, Swing, JavaFX & SWT 14
G jTable - getSelectedRow() AWT, Swing, JavaFX & SWT 3
I JTable mit einem Button zu einer Detail Seite springen AWT, Swing, JavaFX & SWT 4
P JTable Listener für die Änderung einzelner Zellen oder Rows AWT, Swing, JavaFX & SWT 2
D Tastaturabfragen CTRL+t, CTRL+E bei eine JTable, bestehend aus JTextAteas AWT, Swing, JavaFX & SWT 4
P Checkboxes in JTable nicht editable AWT, Swing, JavaFX & SWT 9
F Best-Practise: JTable Text in Zelle zu groß AWT, Swing, JavaFX & SWT 2
izoards JTable in CSV File schreiben... AWT, Swing, JavaFX & SWT 23
Kohl Jedes Objekt einer JTable um ein Zeichen verkürzen AWT, Swing, JavaFX & SWT 7
I JTable, DefaultTableModel, zwei Zahlen multiplizieren. AWT, Swing, JavaFX & SWT 26
M JTABLE / wie oft wurde gewürfelt. AWT, Swing, JavaFX & SWT 1
F JTable vergrößern AWT, Swing, JavaFX & SWT 2
H JTable: Diverse NullPointer-Exceptions zur Laufzeit AWT, Swing, JavaFX & SWT 3
J Swing Werte des JTable werden nicht angezeigt AWT, Swing, JavaFX & SWT 9
T Swing JTable cellRenderer mit jpg Hintergrundfarbe lässt sich nicht ändern. AWT, Swing, JavaFX & SWT 1
HoT Einzelne Zelle in JTable Rahmen unten setzen AWT, Swing, JavaFX & SWT 24
B JTable Zellen zusammenfügen AWT, Swing, JavaFX & SWT 3
M Swing Cell Renderer für Zeilenumbruch in JTable AWT, Swing, JavaFX & SWT 0
H JTable im JSplitPane darstellen AWT, Swing, JavaFX & SWT 2
MadMax2506 Swing JTable lädt sehr lange AWT, Swing, JavaFX & SWT 1
D Zeilenumbruch in einer JTable AWT, Swing, JavaFX & SWT 9
R Swing JTable und Spaltenausrichtung AWT, Swing, JavaFX & SWT 8
G JTable füllen AWT, Swing, JavaFX & SWT 1
H JTable TableCellEditor-Problem AWT, Swing, JavaFX & SWT 0
W Swing JTable Zeilenumbruch innerhalb einer Zelle AWT, Swing, JavaFX & SWT 3
J Datensatz in jTable ausgeben AWT, Swing, JavaFX & SWT 3
M Swing Automatischer Editorstart in JTable-Zelle AWT, Swing, JavaFX & SWT 5
ralfb1105 Swing JTable aktualisieren AWT, Swing, JavaFX & SWT 5
adiko01 JTable: Nur markierte Zeilen aus der Tabelle in CSV exportiern AWT, Swing, JavaFX & SWT 9
M JTable.setDefaultRenderer(...) greift nicht AWT, Swing, JavaFX & SWT 0
J JTable: Eingabe in Tabellenzelle korrigieren AWT, Swing, JavaFX & SWT 4
T Problem mit JTable Sortierung AWT, Swing, JavaFX & SWT 2
D JTable nach INSERT aktualisieren /refreshen AWT, Swing, JavaFX & SWT 1
D MySQL Daten in JTable anzeigen AWT, Swing, JavaFX & SWT 2
H Swing Jtable extra spalte AWT, Swing, JavaFX & SWT 6
S Swing Rechteck über JTable zeichnen (per MouseListener) AWT, Swing, JavaFX & SWT 1
S Swing Mal wieder JTable Ansicht aktualisieren AWT, Swing, JavaFX & SWT 10
A JTable mit Daten füllen AWT, Swing, JavaFX & SWT 1
VfL_Freak Swing Einzelne Zeile in jTable selektieren klappt nicht AWT, Swing, JavaFX & SWT 7
N AWT jTable CellRenderer AWT, Swing, JavaFX & SWT 6
T Swing JTable valueChanged datensatz löschen AWT, Swing, JavaFX & SWT 1
0 Swing JTable aus anderer Klasse updaten AWT, Swing, JavaFX & SWT 5
S Jtable defaultRenderer wohin damit ? AWT, Swing, JavaFX & SWT 23
T Swing JTable / FocusListener AWT, Swing, JavaFX & SWT 0
it_is_all Warum wird die JTable im JDialog nicht angezeigt? AWT, Swing, JavaFX & SWT 1
L Swing JTable im Panel darstellen AWT, Swing, JavaFX & SWT 8
T Swing Double Click bei Buttons in JTable AWT, Swing, JavaFX & SWT 9
J addRow bei JTable AWT, Swing, JavaFX & SWT 6
M Jtable gibt -1 wert bei selectedRow und Column AWT, Swing, JavaFX & SWT 3
Meeresgott Swing JTable AWT, Swing, JavaFX & SWT 4
J JTable Selection Listener funktioniert nicht AWT, Swing, JavaFX & SWT 4
C Swing Daten in JTable wiedergeben per TableModel und MVC Pattern AWT, Swing, JavaFX & SWT 16
Z Swing Drag&Drop zwischen JTable und JTree AWT, Swing, JavaFX & SWT 4
Thallius JTable dynamisch Spaltenanzahl verändern AWT, Swing, JavaFX & SWT 2
Thallius JTable dynamisch laden? AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen


Oben