【发布时间】:2014-10-14 09:03:09
【问题描述】:
有谁知道怎么改变TableView中的值? 我是用 SceneBuilder 开发的,所以恐怕没有 SceneBuilder 的任何教程都帮不了我。
我尝试将代码放入初始化方法中,该方法在没有 SceneBuilder 的程序中工作。 我还尝试在 SceneBuilder 中设置一个方法“setOnEditCommit”,但即使单击 TableColumn 中的一行,该方法也没有启动。
编辑:
我在方法初始化中试过这个:
@Override
public void initialize(URL url, ResourceBundle rb) {
...
//initialize TableViewu
javafx.util.Callback<TableColumn, TableCell> cellFactory = new javafx.util.Callback<TableColumn, TableCell>() {
@Override
public TableCell call(TableColumn p) {
return new EditingCell();
}
};
vesniceTableColumn.setCellValueFactory(new PropertyValueFactory<Cil, String>("vesnice"));
souradniceTableColumn.setCellValueFactory(new PropertyValueFactory<Cil, String>("souradnice"));
pocetTableColumn.setEditable(true);
pocetTableColumn.setCellValueFactory(new PropertyValueFactory<Cil, Integer>("pocet"));
pocetTableColumn.setCellFactory(cellFactory);
pocetTableColumn.setOnEditCommit(new EventHandler<TableColumn.CellEditEvent<Cil, Integer>>() {
@Override
public void handle(TableColumn.CellEditEvent<Cil, Integer> t) {
((Cil) t.getTableView().getItems().get(t.getTablePosition().getRow())).setPocet(t.getNewValue());
}
});
tableView.setItems(cilVesnice);
}
或
@Override
public void initialize(URL url, ResourceBundle rb) {
...
//initialize TableViewu
vesniceTableColumn.setCellValueFactory(new PropertyValueFactory<Cil, String>("vesnice"));
souradniceTableColumn.setCellValueFactory(new PropertyValueFactory<Cil, String>("souradnice"));
pocetTableColumn.setEditable(true);
pocetTableColumn.setCellValueFactory(new PropertyValueFactory<Cil, Integer>("pocet"));
pocetTableColumn.setCellFactory(TextFieldTableCell.<Cil, Integer>forTableColumn(new IntegerStringConverter()));
pocetTableColumn.setOnEditCommit(new EventHandler<TableColumn.CellEditEvent<Cil, Integer>>() {
@Override
public void handle(TableColumn.CellEditEvent<Cil, Integer> t) {
((Cil) t.getTableView().getItems().get(t.getTablePosition().getRow())).setPocet(t.getNewValue());
}
});
tableView.setItems(cilVesnice);
}
【问题讨论】:
-
听起来您不明白如何与场景生成器以编程方式(在普通 java 代码中)创建的 FXML 中定义的 JavaFX 组件进行交互?这是正确的吗?
-
我知道如何与JavaFX组件交互,但我不知道如何创建一个函数式方法setOnEditCommit。
-
你能发布一些代码来展示你的尝试吗?
标签: java javafx tableview tablecolumn