User interface 可编辑JFX TableView存在问题
我对可编辑的TableView有点问题。我想显示数据库中的数据,并能够编辑,然后将其保存回数据库 现在,我可以编辑它了。我有一个if语句,它检查值是否为空(空白或空白),它工作正常,如果值为空,DB中的项不会得到更新User interface 可编辑JFX TableView存在问题,user-interface,javafx,tableview,User Interface,Javafx,Tableview,我对可编辑的TableView有点问题。我想显示数据库中的数据,并能够编辑,然后将其保存回数据库 现在,我可以编辑它了。我有一个if语句,它检查值是否为空(空白或空白),它工作正常,如果值为空,DB中的项不会得到更新 我的问题是空白值仍然显示。如果我再次单击进行编辑,它将显示正确的值。这是一个问题的图片 下面是在我的视图类中创建表的方法 private TableView<Teacher> createTable(){ TableView table = new
我的问题是空白值仍然显示。如果我再次单击进行编辑,它将显示正确的值。这是一个问题的图片
下面是在我的视图类中创建表的方法 private TableView<Teacher> createTable(){
TableView table = new TableView();
table.setEditable(true);
table.setPrefWidth(500);
table.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
nameColumn = new TableColumn<>("Jméno");
surnameColumn = new TableColumn<>("Příjmení");
nickColumn = new TableColumn<>("Nick");
table.getColumns().addAll(nameColumn, surnameColumn, nickColumn);
int columnCount = table.getColumns().size();
double columnSize = Math.floor(table.getPrefWidth() / columnCount);
nameColumn.setPrefWidth(columnSize);
surnameColumn.setPrefWidth(columnSize);
nickColumn.setPrefWidth(columnSize);
nameColumn.setCellValueFactory(new PropertyValueFactory<>("name"));
surnameColumn.setCellValueFactory(new PropertyValueFactory<>("surname"));
nickColumn.setCellValueFactory(new PropertyValueFactory<>("nick"));
List<Teacher> list = new TeacherDao().getAllTeachers();
ObservableList<Teacher> observableList = FXCollections.observableArrayList(list);
table.setItems(observableList);
return table;
}
好吧,我设法解决了这个问题,如果有人好奇
public class TeacherTableView extends TableView {
private TableColumn<Teacher, String> nameColumn, surnameColumn, nickColumn;
TeacherTableView() {
createTable();
onEditAction();
}
private void createTable(){
setEditable(true);
setPrefWidth(500);
getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
nameColumn = new TableColumn<>("Jméno");
surnameColumn = new TableColumn<>("Příjmení");
nickColumn = new TableColumn<>("Nick");
getColumns().addAll(nameColumn, surnameColumn, nickColumn);
int columnCount = getColumns().size();
double columnSize = Math.floor(getPrefWidth() / columnCount);
nameColumn.setPrefWidth(columnSize);
nameColumn.setCellValueFactory(cdf -> cdf.getValue().nameProperty());
nameColumn.setCellFactory(TextFieldTableCell.forTableColumn());
nameColumn.setEditable(true);
surnameColumn.setPrefWidth(columnSize);
surnameColumn.setCellValueFactory(cdf -> cdf.getValue().surnameProperty());
surnameColumn.setCellFactory(TextFieldTableCell.forTableColumn());
surnameColumn.setEditable(true);
nickColumn.setPrefWidth(columnSize);
nickColumn.setCellValueFactory(cdf -> cdf.getValue().nickProperty());
nickColumn.setCellFactory(TextFieldTableCell.forTableColumn());
nickColumn.setEditable(true);
List<Teacher> list = new TeacherDao().getAllTeachers();
ObservableList<Teacher> observableList = FXCollections.observableArrayList(list);
setItems(observableList);
}
private void onEditAction(){
nameColumn.setOnEditCommit(this::updateCol);
surnameColumn.setOnEditCommit(this::updateCol);
nickColumn.setOnEditCommit(this::updateCol);
}
private void updateCol(TableColumn.CellEditEvent<Teacher, String> col) {
String newValue = col.getNewValue();
if (CheckString.isNotBlank(newValue)) {
(col.getTableView().getItems().get(
col.getTablePosition().getRow())
).setName(col.getNewValue());
Teacher teacher = (Teacher) getSelectionModel().getSelectedItem();
int id = teacher.getUser_id();
new TeacherDao().updateTeacherNick(id, newValue);
} else {
col.getTableView().refresh();
}
}
}
公共类TeacherTableView扩展了TableView{
私有表列名称列、姓氏列、nickColumn;
TeacherTableView(){
createTable();
onEditAction();
}
私有void createTable(){
可编辑设置(真);
设置宽度(500);
getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
nameColumn=新的TableColumn(“Jméno”);
姓氏列=新表列(“Příjmení”);
nickColumn=新表列(“Nick”);
getColumns().addAll(nameColumn、nameColumn、nickColumn);
int columnCount=getColumns().size();
double columnSize=Math.floor(getPrefWidth()/columnCount);
nameColumn.setPrefWidth(columnSize);
nameColumn.setCellValueFactory(cdf->cdf.getValue().nameProperty());
nameColumn.setCellFactory(TextFieldTableCell.forTableColumn());
nameColumn.setEditable(true);
name column.setPrefWidth(columnSize);
namesColumn.setCellValueFactory(cdf->cdf.getValue().namesProperty());
姓氏column.setCellFactory(TextFieldTableCell.forTableColumn());
name column.setEditable(true);
nickColumn.setPrefWidth(列大小);
nickColumn.setCellValueFactory(cdf->cdf.getValue().nickProperty());
nickColumn.setCellFactory(TextFieldTableCell.forTableColumn());
nickColumn.setEditable(真);
List List=new TeacherDao().getAllTeachers();
ObservableList ObservableList=FXCollections.observableArrayList(列表);
集合项目(可观察列表);
}
私有void onEditAction(){
setOnEditCommit(this::updateCol);
setOnEditCommit(this::updatecl);
setOnEditCommit(this::updateCol);
}
私有void updateCol(TableColumn.CellEditEvent列){
字符串newValue=col.getNewValue();
if(CheckString.isNotBlank(newValue)){
(col.getTableView().getItems().get(
col.getTablePosition().getRow())
).setName(col.getNewValue());
教师=(教师)getSelectionModel().getSelectedItem();
int id=teacher.getUser_id();
new TeacherDao().updateTech(id,newValue);
}否则{
col.getTableView().refresh();
}
}
}
else
(col.getTableView().getItems().get(
col.getTablePosition().getRow())
).setName(col.getOldValue());
public class TeacherTableView extends TableView {
private TableColumn<Teacher, String> nameColumn, surnameColumn, nickColumn;
TeacherTableView() {
createTable();
onEditAction();
}
private void createTable(){
setEditable(true);
setPrefWidth(500);
getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
nameColumn = new TableColumn<>("Jméno");
surnameColumn = new TableColumn<>("Příjmení");
nickColumn = new TableColumn<>("Nick");
getColumns().addAll(nameColumn, surnameColumn, nickColumn);
int columnCount = getColumns().size();
double columnSize = Math.floor(getPrefWidth() / columnCount);
nameColumn.setPrefWidth(columnSize);
nameColumn.setCellValueFactory(cdf -> cdf.getValue().nameProperty());
nameColumn.setCellFactory(TextFieldTableCell.forTableColumn());
nameColumn.setEditable(true);
surnameColumn.setPrefWidth(columnSize);
surnameColumn.setCellValueFactory(cdf -> cdf.getValue().surnameProperty());
surnameColumn.setCellFactory(TextFieldTableCell.forTableColumn());
surnameColumn.setEditable(true);
nickColumn.setPrefWidth(columnSize);
nickColumn.setCellValueFactory(cdf -> cdf.getValue().nickProperty());
nickColumn.setCellFactory(TextFieldTableCell.forTableColumn());
nickColumn.setEditable(true);
List<Teacher> list = new TeacherDao().getAllTeachers();
ObservableList<Teacher> observableList = FXCollections.observableArrayList(list);
setItems(observableList);
}
private void onEditAction(){
nameColumn.setOnEditCommit(this::updateCol);
surnameColumn.setOnEditCommit(this::updateCol);
nickColumn.setOnEditCommit(this::updateCol);
}
private void updateCol(TableColumn.CellEditEvent<Teacher, String> col) {
String newValue = col.getNewValue();
if (CheckString.isNotBlank(newValue)) {
(col.getTableView().getItems().get(
col.getTablePosition().getRow())
).setName(col.getNewValue());
Teacher teacher = (Teacher) getSelectionModel().getSelectedItem();
int id = teacher.getUser_id();
new TeacherDao().updateTeacherNick(id, newValue);
} else {
col.getTableView().refresh();
}
}
}