2016-08-01 4 views

Antwort

0

Vom TableView documentation:

standardmäßig der TableColumn bearbeiten begehen Handler ist nicht null, mit einem Standard-Handler, der den Eigenschaftswert für den Element in der zur Zeit Ergehens bearbeitet Zeile zu überschreiben versucht . Es ist in der Lage, dies zu tun, wie die Cell.commitEdit(Object) Methode in den neuen Wert übergeben wird, und dies ist übergeben an die Bearbeitung Commit-Handler über die , die gefeuert wird. Es ist einfach eine Frage von TableColumn.CellEditEvent.getNewValue(), um diesen Wert abzurufen.

Es ist sehr wichtig zu beachten, dass, wenn Sie TableColumn.setOnEditCommit(javafx.event.EventHandler) mit Ihrem eigenen EventHandler nennen, dann werden Sie den Standard-Handler zu entfernen. Es sei denn Sie dann das Writeback auf die Eigenschaft (oder die relevanten Daten Quelle) behandeln, wird nichts passieren. Sie können dies umgehen, indem Sie die TableColumnBase.addEventHandler(javafx.event.EventType, javafx.event.EventHandler) Methode verwenden, um ein TableColumn.EDIT_COMMIT_EVENT EventType mit Ihrem gewünschten EventHandler als zweites Argument hinzuzufügen. Mit dieser Methode ersetzen Sie nicht die Standardimplementierung , aber Sie werden benachrichtigt, wenn ein Bearbeitungs-Commit aufgetreten ist.

So standardmäßig Aufruf commitEdit(...) Ursache der TableColumn zu versuchen, den Wert von der Zelle dargestellt zu aktualisieren. Wenn Sie einen Ereignishandler durch Aufrufen von TableColumn.setOnEditCommit(...) festlegen, entfernen Sie das Standardverhalten.

Beachten Sie auch, dass der Standardmechanismus funktioniert, indem das von der Spalte cellValueFactory zurückgegebene Objekt in eine WritableValue umgewandelt und seine Methode setValue() aufgerufen wird. Dies funktioniert (im Wesentlichen) nur, wenn das Backing-Modell für die Tabelle JavaFX properties pattern verwendet. Mit anderen Worten, sollten Sie etwas Gleichwertiges zu

column.setCellValueFactory(cellData -> cellData.getValue().xxxProperty()); 

wo die xxxProperty() Methode im Modell für die Tabelle gibt eine Implementierung von WritableValue (zum Beispiel eines Property Objekt) haben.

+0

Danke, es half mir, das Problem zu beheben, das ich hatte. – miquel09

Verwandte Themen