我想下面的代碼轉換爲是通用的Java類型,以避免手動重新代碼編輯上提交的每個新的表格列...的JavaFX的TableView - 通用OnEditCommit
colOccurrences.setOnEditCommit(
new EventHandler<TableColumn.CellEditEvent<Damageloop, Float>>() {
@Override
public void handle(TableColumn.CellEditEvent<Damageloop, Float> t) {
((Damageloop)t.getTableView().getItems().get(
t.getTablePosition().getRow())).setOccurrences(t.getNewValue());
}
});
我有嘗試添加以下代碼被分配給每個表列的自定義細胞工廠類...
TableColumn<S, T> col = super.getTableColumn();
col.setOnEditCommit(
new EventHandler<CellEditEvent<S, T>>() {
@Override
public void handle(CellEditEvent<S, T> t) {
TableColumn<S, T> col = t.getTableColumn();
int row = t.getTablePosition().getRow();
ObservableValue<T> ov = col.getCellObservableValue(row);
if (ov instanceof WritableValue) {
((WritableValue<T>)ov).setValue(t.getNewValue());
}
}
});
這成功地設置所編輯的單元格的底層觀察到的值。但是,當我打電話時...
TableView.getSelectionModel().getSelectedItem()
在代碼的進一步部分中,仍舊返回舊的未編輯值。但是,如果更新我的編輯通用承諾包括以下內容...
TableColumn<S, T> col = super.getTableColumn();
col.setOnEditCommit(
new EventHandler<CellEditEvent<S, T>>() {
@Override
public void handle(CellEditEvent<S, T> t) {
TableColumn<S, T> col = t.getTableColumn();
int row = t.getTablePosition().getRow();
ObservableValue<T> ov = col.getCellObservableValue(row);
if (ov instanceof WritableValue) {
((WritableValue<T>)ov).setValue(t.getNewValue());
}
//NEW ADDITION TO EVENT HANDLER
Date date;
date = (Date) t.getNewValue();
((Damageloop) t.getTableView().getItems().get(t.getTablePosition().getRow())).setDamageloopworkshopduedate(date);
}
});
的TableView.getSelectionModel()。getSelectedItem()代碼將返回正確的更新後的值。
任何人都可以告訴我爲什麼oberservable值沒有更新支持列表嗎?或更恰當地如何將我的事件處理程序中的新增功能轉換爲使用泛型?
請張貼的屬性包括的getter/setter /屬性的getter形式'Damageloop'類和'cellValueFactory'在使用該屬性的一個... – fabian
注意的代碼你的整個第一塊可以簡單地降低到'colOccurrences .setOnEditCommit(t - > t.getRowValue()。setOccurrences(t.getNewValue()));' –