2017-12-24 9 views
0

私のTableViewには制限があります。Enum!= Adminの場合はJavaFX setCellFactory

userRule.setCellValueFactory(cellData -> cellData.getValue().userRuleProperty()); 

    userRule.setCellFactory(ComboBoxTableCell.forTableColumn(FXCollections 
      .observableArrayList(RuleEnum.Admin.toString(), RuleEnum.Lider.toString()))); 
    userRule.setEditable(true); 
     userRule.setOnEditCommit(event -> { 
       AdminSQL sql = new AdminSQL(); 
       try { 
        sql.changeRule(userTable.getSelectionModel().getSelectedItem().getUserLp(), event.getNewValue().toString()); 
       } catch (SQLException e) {System.out.println(e.getMessage());e.printStackTrace();} 
     }); 

しかし、私の列挙型にし、テーブルビューのcolumに私は3つのオプションがあります:SuperAdmin、Adminとリデルを。 value = SuperAdminの場合は、rowcellにコンボボックスを作成したくない。

:)

+0

は、カスタム 'cellFactory'を使用して、カスタムセルを作成します。既にあなたのためにそれを行うAPIに既存のコードはありません... – fabian

答えて

1

ファビアンはコメントに示唆しているように、この機能を処理できるカスタムテーブルセルを使用できます。二つの方法があります:

userRule.setCellFactory(new ComboBoxTableCell<>(/* add the items here*/){ 
      @Override 
      public void updateItem(RuleEnum item, boolean empty) { 
       super.updateItem(item, empty); 
       if(empty){ 
        setText(null); 
        setGraphic(null); 
       }else if (RuleItem.SuperAdmin.equals(item)){ 
        setEditable(false); 
       }else { 
        setEditable(true); 
       } 
      } 
     }); 

または

userRule.setCellFactory(new ComboBoxTableCell<>(/* add the items here*/){ 
     @Override 
     public void startEdit() { 
      RuleEnum ruleEnum = getTableRow().getItem().getEnum(); // insert your method here 
      if(RuleEnum.SuperAdmin.equals(ruleEnum)){ 
       return; 
      } 
      super.startEdit(); 
     } 
    }); 
0

それはあまりにもこのように動作します

userRule.setEditable(true); 
     userRule.setOnEditStart(e ->{ 
      if(e.getOldValue().equals(RuleEnum.SuperAdmin.toString())) { 
       userRule.setCellFactory(ComboBoxTableCell.forTableColumn(FXCollections 
         .observableArrayList(RuleEnum.Admin.toString(), RuleEnum.Lider.toString()))); 
        userRule.setOnEditCommit(event -> { 
          AdminSQL sql = new AdminSQL(); 
          try { 
           sql.changeRule(userTable.getSelectionModel().getSelectedItem().getUserLp(), event.getNewValue().toString()); 
          } catch (SQLException e1) {System.out.println(e1.getMessage());e1.printStackTrace();} 
        }); 
      } 
     }); 
関連する問題