[英]Editing TableView in JavaFX
有誰知道如何更改TableView中的值? 我是用 SceneBuilder 開發的,所以恐怕任何沒有 SceneBuilder 的教程都幫不了我。
我試圖將代碼放入 initialize 方法中,該方法在沒有 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);
}
我發現了錯誤。
我忘了將 TableView 設置為可編輯。 TableView 上的setEditable(true)
解決了這個問題。
您需要創建一個控制器類。 在場景構建器中,您需要在場景構建器(左下角)中單擊控制器,然后鍵入您將創建的控制器類的名稱。 然后,單擊“查看”,然后單擊“示例控制器骨架”。 將其復制到與您在控制器窗格中設置的名稱相同的 java 類中。
我在初始化方法中嘗試了這個:
@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);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.