我有一个JFX树表视图,其中一列包含每行的JFXButton,该按钮包含一个setOnAction处理程序,它在单击时改变按钮的文本 . 但是,如果我的树表视图中的项目数量足够大,必须在列表中上下滚动,那么当我选择一个按钮时,它也会更改当前视图窗口之外的其他按钮的文本(不调用这些按钮的处理程序方法),然后当我向下滚动列表时,其他按钮将更改其文本,而我没有点击它们 .

See screenshots for better understanding


Before Scrolling (我选择了前3项)

Before Scrolling (Selected The Top 3 Items)

After Scrolling out of View (我从未接触过3个新项目)

After Scrolling out of the View (3 items I never selected)

After Scrolling Back Up (图片1中我原创作品的不同选择)

After Scrolling Back to The Top


Cell Factory Setup from my Controller Class

@FXML
protected JFXTreeTableColumn<PlayerTreeObject, String> selectColumn;

//== PUBLIC METHODS ==
@Override
public void initialize(URL location, ResourceBundle resources) {
    //SET CELL VALUE FACTORY
    selectColumn.setCellValueFactory((TreeTableColumn.CellDataFeatures<PlayerTreeObject, String> param) -> null);

    //SETTING CELL FACTORY
    selectColumn.setCellFactory(column -> {
        TreeTableCell<PlayerTreeObject, String> cell = new TreeTableCell<>(){
            final JFXButton selectBtn = new JFXButton(UNSELECTED_BTN_TEXT);

            @Override
            protected void updateItem(String item, boolean empty) {
                super.updateItem(item, empty);
                setText(null);

                if(empty){
                    setGraphic(null);
                }else{
                    selectBtn.setOnAction(event ->
                            handleSelectPlayerButtonClick(selectBtn, getTreeTableRow().getTreeItem().getValue()));
                    setGraphic(selectBtn);
                }
            }
        };

        cell.pseudoClassStateChanged(PseudoClass.getPseudoClass(CssConstants.PSEUDO_CENTERED), true);
        return cell;
    });
}