Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
User interface 可编辑JFX TableView存在问题_User Interface_Javafx_Tableview - Fatal编程技术网

User interface 可编辑JFX TableView存在问题

User interface 可编辑JFX TableView存在问题,user-interface,javafx,tableview,User Interface,Javafx,Tableview,我对可编辑的TableView有点问题。我想显示数据库中的数据,并能够编辑,然后将其保存回数据库 现在,我可以编辑它了。我有一个if语句,它检查值是否为空(空白或空白),它工作正常,如果值为空,DB中的项不会得到更新 我的问题是空白值仍然显示。如果我再次单击进行编辑,它将显示正确的值。这是一个问题的图片 下面是在我的视图类中创建表的方法 private TableView<Teacher> createTable(){ TableView table = new

我对可编辑的TableView有点问题。我想显示数据库中的数据,并能够编辑,然后将其保存回数据库

现在,我可以编辑它了。我有一个if语句,它检查值是否为空(空白或空白),它工作正常,如果值为空,DB中的项不会得到更新

我的问题是空白值仍然显示。如果我再次单击进行编辑,它将显示正确的值。这是一个问题的图片

下面是在我的视图类中创建表的方法

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