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% 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.
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.