在JavaFX中编辑TableView

时间:2014-08-20 20:59:27

标签: java javafx tableview tablecolumn

有谁知道如何更改TableView中的值? 我使用SceneBuilder开发,所以我担心,任何没有SceneBuilder的教程都无法帮助我。

我尝试将代码放入initialize方法,该方法在没有SceneBuilder的程序中工作。 我还尝试在SceneBuilder中设置方法“setOnEditCommit”,但是即使单击TableColumn中的行,该方法也没有启动。

3 个答案:

答案 0 :(得分:1)

谢谢大家。

最后,错误是我没有setEditable(true);在TableView 中,但在TableColumn中我有。

答案 1 :(得分:0)

您需要创建一个控制器类。在场景构建器中,您需要在场景构建器中单击控制器(左下角),然后键入要进行的控制器类的名称。然后,点击"查看"然后单击"示例控制器骨架。"将其复制到与您在控制器窗格中设置的名称相同的java类。

答案 2 :(得分:0)

我在初始化方法中尝试了这个:

@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);
}