JavaFX 2.0:我需要做些什么来对表中的行选择更改做出反应?

mar*_*rie 3 javafx-2

我想做一个非常简单和常见的事情,但是没有办法用JavaFX做到这一点.我有一个包含两列的TableView,并且如果选择了至少一行,则想要启用一个按钮.如果没有选择行,我想再次禁用该按钮.

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

Bre*_*dan 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);
            }
        }

    });
Run Code Online (Sandbox Code Playgroud)

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

  • 您可以使用[Bindings](http://docs.oracle.com/javafx/2/api/javafx/beans/binding/Bindings.html#size%28javafx.collections.ObservableList%29)类来执行基于条件的绑定在列表大小. (2认同)

Tob*_*iug 6

使用Property的一行中的另一个解决方案:

myButton.disableProperty().bind(myTable.getSelectionModel().selectedItemProperty().isNull());
Run Code Online (Sandbox Code Playgroud)

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