2017-12-24 9 views
0

내 TableView에서 제한 사항에 문제가 있습니다.JavaFX setCellFactory Enum! = Admin

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

하지만 내 열거 형 및 tableview 열에는 SuperAdmin, Admin 및 Lider 옵션이 있습니다. value = SuperAdmin이라면 rowcell에서 콤보 박스를 생성하고 싶지 않습니다.

아이디어가 있으십니까? :)

+0

사용자 정의'cellFactory'를 사용하여 사용자 정의 세포를 만들기 : 두 가지 방법이있다. 이미 API를 사용하고있는 기존 코드가 없습니다. – fabian

답변

1

주석에 fabian이 제안한대로이 기능을 처리 할 수있는 사용자 정의 테이블 셀을 사용할 수 있습니다. 그것은이 방식으로 작동

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