Установить 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>
Что так же, как делать это с помощью кода...