Установите 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>

Ничего из этого не работает.

Любая помощь приветствуется!


person bashoogzaad    schedule 27.12.2014    source источник


Ответы (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> 

Это то же самое, что делать это по коду...

person José Pereda    schedule 27.12.2014
comment
Спасибо за ваш ответ, Хосе Переда! Пока это не будет решено, я просто установлю эту часть в коде. - person bashoogzaad; 04.01.2015
comment
Или сделайте это в методе инициализации вашего контроллера. - person keiki; 10.01.2015