我想做一个非常简单和常见的事情,但是没有办法用JavaFX做到这一点.我有一个包含两列的TableView,并且如果选择了至少一行,则想要启用一个按钮.如果没有选择行,我想再次禁用该按钮.
为此,我需要获得一个选择更改事件或类似的东西.不应该有可能在动作中设置tableView的selectionModel或添加一个监听器吗?我需要做什么?
我想你想要做的是将ListChangeListener添加到TableView选择模型的选定索引上.它应该是这样的......
tableView.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE); // just in case you didnt already set the selection model to multiple selection.
tableView.getSelectionModel().getSelectedIndices().addListener(new ListChangeListener<Integer>()
{
@Override
public void onChanged(Change<? extends Integer> change)
{
if (change.getList().size() >= 2)
{
button.setDisable(false);
}
else
{
button.setDisable(true);
}
}
});
Run Code Online (Sandbox Code Playgroud)
我原本打算建议将按钮的disable属性绑定到表视图上大于2的选定索引属性大小,但似乎没有提供.如果你愿意,你可以创建自己的SimpleIntegerProperty并在列表更改侦听器内更新它,将按钮的disable属性绑定到大于2的SimpleIntegerProperty的值.我希望这个答案是有用的!
使用Property的一行中的另一个解决方案:
myButton.disableProperty().bind(myTable.getSelectionModel().selectedItemProperty().isNull());
Run Code Online (Sandbox Code Playgroud)
这样,当选择了至少一行时,启用该按钮