3

我想做一件非常简单和常见的事情,但找不到使用 JavaFX 的方法。我有一个包含两列的 TableView,如果至少选择了一行,我想启用一个按钮。如果没有选择任何行,我想再次禁用该按钮。

为此,我需要获得一个选择更改事件或类似的东西。不应该有可能在动作上设置 tableView 的 selectionModel 或添加一个监听器吗?我需要做什么?

4

2 回答 2

8

我认为您要做的是将 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);
            }
        }

    });

我原本打算建议将按钮的禁用属性绑定到表视图上大于 2 的选定索引属性大小,但似乎没有提供。如果您愿意,您可以创建自己的 SimpleIntegerProperty 并在列表更改侦听器中更新它,将按钮的禁用属性绑定到您的 SimpleIntegerProperty 的值大于 2。我希望这个答案有帮助!

于 2012-12-06T17:59:52.847 回答
6

使用 Property 的另一种解决方案:

myButton.disableProperty().bind(myTable.getSelectionModel().selectedItemProperty().isNull());

这样,当至少选择了一行时,该按钮将启用

于 2014-04-14T12:24:04.907 回答