我有一个JFX树表视图,其中一列包含每行的JFXButton,该按钮包含一个setOnAction处理程序,它在单击时改变按钮的文本 . 但是,如果我的树表视图中的项目数量足够大,必须在列表中上下滚动,那么当我选择一个按钮时,它也会更改当前视图窗口之外的其他按钮的文本(不调用这些按钮的处理程序方法),然后当我向下滚动列表时,其他按钮将更改其文本,而我没有点击它们 .
See screenshots for better understanding
Before Scrolling (我选择了前3项)
After Scrolling out of View (我从未接触过3个新项目)
After Scrolling Back Up (图片1中我原创作品的不同选择)
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;
});
}