如果Enum!= Admin,JavaFX setCellFactory

时间:2017-12-24 13:43:20

标签: javafx

我在TableView中遇到限制问题。

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

但是在我的Enum和tableview colum中我有3个选项:SuperAdmin,Admin和Lider。如果value = SuperAdmin,我不想在rowcell中创建组合框。

有什么想法吗? :)

2 个答案:

答案 0 :(得分: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();
        }
    });

答案 1 :(得分: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();}   
                    });
            }
        });