2016-12-26 17 views
0

編集可能なTableViewには少し問題があります。データベースからデータを表示し、それを編集してDBに保存することもできます。編集可能なJFX TableViewに関する問題

これで編集できます。私は、値が空白(空白または空白)であるかどうかをチェックするif文を持っていて、正しく動作します。値が空白の場合、DBの項目は更新されません。

私の問題は、空白の値がまだ表示されることです。再度編集するときにクリックすると、適切な値が表示されます。 Hereは問題の写真です。

私のビュークラスでテーブルを作成する方法は次のとおりです。

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

ここでは、編集を処理するコントローラクラスの一部です。

private void onEditAction(){ 
    view.getNameColumn().setCellFactory(TextFieldTableCell.forTableColumn()); 
    view.getNameColumn().setOnEditCommit(
      new EventHandler<TableColumn.CellEditEvent<Teacher, String>>() { 
       @Override 
       public void handle(TableColumn.CellEditEvent<Teacher, String> col) { 
        String newValue = col.getNewValue(); 
        if(!(CheckString.isBlank(newValue))) { 
         (col.getTableView().getItems().get(
           col.getTablePosition().getRow()) 
         ).setName(col.getNewValue()); 

         Teacher teacher = view.getTeacherTableView().getSelectionModel().getSelectedItem(); 
         int id = teacher.getUser_id(); 
         new TeacherDao().updateTeacherNick(id, newValue); 
        } 
       } 
      } 
    ); 

    view.getSurnameColumn().setCellFactory(TextFieldTableCell.forTableColumn()); 
    view.getSurnameColumn().setOnEditCommit(
      new EventHandler<TableColumn.CellEditEvent<Teacher, String>>() { 
       @Override 
       public void handle(TableColumn.CellEditEvent<Teacher, String> col) { 
        String newValue = col.getNewValue(); 
        if(!(CheckString.isBlank(newValue))) { 
         (col.getTableView().getItems().get(
           col.getTablePosition().getRow()) 
         ).setName(col.getNewValue()); 

         Teacher teacher = view.getTeacherTableView().getSelectionModel().getSelectedItem(); 
         int id = teacher.getUser_id(); 
         new TeacherDao().updateTeacherNick(id, newValue); 
        } 
       } 
      } 
    ); 

    view.getNickColumn().setCellFactory(TextFieldTableCell.forTableColumn()); 
    view.getNickColumn().setOnEditCommit(
      new EventHandler<TableColumn.CellEditEvent<Teacher, String>>() { 
       @Override 
       public void handle(TableColumn.CellEditEvent<Teacher, String> col) { 
        String newValue = col.getNewValue(); 
        if(!(CheckString.isBlank(newValue))) { 
         (col.getTableView().getItems().get(
           col.getTablePosition().getRow()) 
         ).setName(col.getNewValue()); 

         Teacher teacher = view.getTeacherTableView().getSelectionModel().getSelectedItem(); 
         int id = teacher.getUser_id(); 
         new TeacherDao().updateTeacherNick(id, newValue); 
        } 
       } 
      } 
    ); 
} 

私も追加しようとしましたが、それは助けになりませんでした。

else 
     (col.getTableView().getItems().get(
      col.getTablePosition().getRow()) 
     ).setName(col.getOldValue()); 

答えて

0

まあ、私はここで、それを解決するために管理方法を誰もが好奇心旺盛であれば

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(); 
     } 
    } 
} 
関連する問題