Установить SelectionModel для TableView в FXML

Я хочу установить SelectionModel TableView из FXML, но я не могу найти, как это сделать. Я уже попробовал следующее:

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 ответ

Решение

Если это возможно на 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)

Это происходит потому, что адаптер компонента пытается рефлексивно найти в классе javafx.scene.control.TableView$TableViewSelectionModel valueOf из javafx.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> 

Что так же, как делать это с помощью кода...

Другие вопросы по тегам