3

我想从 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>

这些都不起作用。

任何帮助是极大的赞赏!

4

1 回答 1

8

如果在 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$TableViewSelectionModelof valueOfjavafx.scene.control.SelectionMode.MULTIPLE但没有找到。

这里有一张未解决的 JIRA 票证。

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

...
<?language javascript?>

    <TableView fx:id="table" prefHeight="200.0" prefWidth="200.0" >
        <columns >
          <TableColumn fx:id="col" prefWidth="75.0" text="C1" />
        </columns>
    </TableView>
    <fx:script>          
          table.getSelectionModel().setSelectionMode(javafx.scene.control.SelectionMode.MULTIPLE);
    </fx:script> 

这与通过代码执行此操作相同...

于 2014-12-27T18:07:38.293 回答