Warum verliert JXTable Input wo JTable nicht ist?

8

Wenn ich eine JXTable zum Rendern und Bearbeiten meiner Daten verwende, gehen einige Eingaben in die CellEditors verloren. Wenn ich auf den Größenänderungs-Teiler des JXTable-ColumnHeaders klicke oder die Breite des JFrame ändere, wird der CellEditor beendet, ohne den Wert zu committen. Die Werte werden gespeichert, wenn ich die JTable verwende.

Ich möchte das JXTable wegen seiner anderen Funktionen verwenden, gibt es also eine Möglichkeit, das JXTable zu reparieren?

Beispiel:

%Vor%     
bobndrew 30.01.2015, 12:59
quelle

2 Antworten

3

Beim Debuggen von JXTable und JTable habe ich den Grund für den Verlust von CellEdits gefunden. Der Unterschied liegt in der Methode columnMarginChanged() :

JXTable:

%Vor%

JTable:

%Vor%

Zuerst dachte ich, dass die removeEditor() Methode eine Verbesserung von JTable ist ... Aber dann habe ich das gefunden OpenJDK-Changeset vom September 2010 , das den Fehler behebt " 4330950: Verloren neu eingegebene Daten in der Zelle beim Ändern der Spaltenbreite ". Es scheint, dass Änderungen aus dem JDK nicht auf den SwingX-Quellcode angewendet wurden.

Ich werde meine eigene Antwort akzeptieren, weil der Grund für ein anderes Verhalten jetzt klar ist. Um dies für mich und andere SwingX Benutzer zu beheben, gehe ich zur SwingX Mailingliste und dem Bug Tracker.

    
bobndrew 04.02.2015, 13:31
quelle
1

Wenn Sie sich die Methode frameInit () von JTable ansehen, können Sie sehen, dass sie an alle AWTEvent.WINDOW * -Ereignisse gebunden ist. In JXTable bindet die initActionsAndBindings () -Methode an bestimmte Aktionen (z. B. Wert geändert) und nur an die Tabelle.

Sie müssen Ihren eigenen Listener hinzufügen

%Vor%

und dann müssten einige Funktionen der Tabelle verfügbar gemacht werden, damit das Ereignis die Aktualisierung der Tabelle auslösen kann. Oder vielleicht können Sie von dort aus ein TableModelEvent auslösen.

    
kol 03.02.2015 17:22
quelle

Tags und Links