基于行值的 TableView 单元格中的 JavaFX add/remove 按钮

JavaFX add/remove button in TableView cell based on row value

这段代码中有一个 TavbleView,最后一列有按钮可以对列进行操作,查看和清除。如果给定的行处于已知状态,则清除按钮只应存在或启用(两者都可以)。这是始终显示两个按钮的代码,现在编码为当“canClear”属性 为 false 时,不采取任何操作:

    private void addActionsToTable() {

        TableColumn<searchResults, Void> actionColumn = new TableColumn("Action");

        actionColumn.setCellFactory(col -> new TableCell<searchResults, Void>() {
            private final HBox container;

            {
                Button viewBtn = new Button("View");
                Button clearBtn = new Button("Clear");

                viewBtn.setOnAction(new EventHandler<ActionEvent>() {
                    @Override
                    public void handle(ActionEvent event) {
                        searchResults data = getTableView().getItems().get(getIndex());
                        gotoView(data.getLogNo());
                    }
                });

                clearBtn.setOnAction(new EventHandler<ActionEvent>() {
                    @Override
                    public void handle(ActionEvent event) {
                        searchResults data = getTableView().getItems().get(getIndex());

                        String logNo = data.getLogNo();
                        String serialNumber = data.getSerial();
                        
                        Boolean canClear = data.getCanClear();
                        if(canClear)
                        {
                            // Take action that has been cut for simplicity
                        }
                    }
                });

                container = new HBox(5, viewBtn, clearBtn);
            }

            @Override
            public void updateItem(Void item, boolean empty) {
                super.updateItem(item, empty);
                if (empty) {
                    setGraphic(null);
                } else {
                    setGraphic(container);
                }
            }
        });

        SearchTable.getColumns().add(actionColumn);

        actionColumn.setPrefWidth(175);
    }

当 data.getCanClear() 为 false 时,需要做什么才能禁用或不显示清除按钮?

假设您的 searchResults(原文如此)class 有一个 BooleanProperty canClearProperty() 方法:

    actionColumn.setCellFactory(col -> new TableCell<searchResults, Void>() {
        private final HBox container;
        private final Button clearButton ;

        {
            Button viewBtn = new Button("View");
            clearBtn = new Button("Clear");

            viewBtn.setOnAction(new EventHandler<ActionEvent>() {
                @Override
                public void handle(ActionEvent event) {
                    searchResults data = getTableView().getItems().get(getIndex());
                    gotoView(data.getLogNo());
                }
            });

            clearBtn.setOnAction(new EventHandler<ActionEvent>() {
                @Override
                public void handle(ActionEvent event) {
                    searchResults data = getTableView().getItems().get(getIndex());

                    String logNo = data.getLogNo();
                    String serialNumber = data.getSerial();
                    
                    Boolean canClear = data.getCanClear();
                    if(canClear)
                    {
                        // Take action that has been cut for simplicity
                    }
                }
            });

            container = new HBox(5, viewBtn, clearBtn);
        }

        @Override
        public void updateItem(Void item, boolean empty) {
            clearButton.disableProperty().unbind();
            super.updateItem(item, empty);
            if (empty) {
                setGraphic(null);
            } else {
                clearButton.disableProperty().bind(
                    getTableView().getItems().get(getIndex())
                        .canClearProperty().not());
                setGraphic(container);
            }
        }
    });