在FXML中为TableView设置SelectionModel

时间:2014-12-27 14:03:42

标签: javafx tableview javafx-8 selectionmodel

我想从FXML设置TableView的SelectionModel,但我找不到如何做到这一点。我已经尝试了以下内容:

1.只需将其设置为TableView的属性:

<TableView selectionModel="MULTIPLE">

2.设置与ListView相同的属性(参见:https://community.oracle.com/thread/2315611?start=0&tstart=0):

<TableView multiSelect="true">

3.以不同的方式设置属性:

<TableView>
    <selectionModel>
        <TableView fx:constant="MULTIPLE" />
    </selectionModel>
</TableView>

4.另一个版本:

<TableView>
    <selectionModel>
        <SelectionModel fx:constant="MULTIPLE" />
    </selectionModel>
</TableView>

5.选择模型(不同):

<TableView>
    <selectionModel>
        <SelectionModel selectionModel="MULTIPLE" />
    </selectionModel>
</TableView>

这些都不起作用。

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:6)

在FXML上应该可以这样:

<TableView fx:id="table" prefHeight="200.0" prefWidth="200.0" >
    <columns>
      <TableColumn prefWidth="75.0" text="C1" />
    </columns>
    <selectionModel>
        <SelectionMode fx:constant="MULTIPLE"/>
    </selectionModel>
</TableView>

不幸的是,当你运行它时会遇到异常:

java.lang.IllegalArgumentException: Unable to coerce SINGLE to class javafx.scene.control.TableView$TableViewSelectionModel.
at com.sun.javafx.fxml.BeanAdapter.coerce(BeanAdapter.java:495)

这种情况正在发生,因为bean适配器反复尝试在类javafx.scene.control.TableView$TableViewSelectionModel中找到valueOf的{​​{1}},但它找不到它。

here有一张尚未解决的JIRA票证。

根据该报告,我发现的唯一可行解决方案是使用脚本功能:

javafx.scene.control.SelectionMode.MULTIPLE

与通过代码执行相同...