Я пытаюсь получить доступ к горизонтальному ScrollBar
для VirtualFlow
, который является внутренним контролем для TableView
. Моя рабочая среда:
- OS - Windows 10
- IDE - Eclipse v. 2020-03 (4.15.0)
- JDK - jdk-10.0. 2
- Компилятор - maven-compiler-plugin 3.8.1 (m2E для Eclipse)
Приведенный ниже код пытается получить доступ к VirtualFlow
(который является полем с именем flow
в TableViewSkinBase
, родительской обложке для TableView)
, а затем для доступа к горизонтальной ScrollBar
:
private void xxx() {
final TableView<R> tableView = new TableView<>();
final TableViewSkin<R> skin = (TableViewSkin<R>) tableView.getSkin();
try {
final Field flowField = TableViewSkinBase.class.getDeclaredField("flow");
flowField.setAccessible(true);
final Method hbarMethod = VirtualFlow.class.getDeclaredMethod("getHbar");
hbarMethod.setAccessible(true);
final VirtualFlow<IndexedCell<R>> flow = (VirtualFlow<IndexedCell<R>>) flowField.get(skin);
ScrollBar hbar = (ScrollBar) flowField.get(flow);
}
catch (NoSuchMethodException | SecurityException | NoSuchFieldException | IllegalArgumentException | IllegalAccessException ex) {
ex.printStackTrace();
}
}
Фрагмент ниже взят из записи в файле .pom
для плагин компилятора:
<plugin>
<!-- http://maven.apache.org/plugins/maven-compiler-plugin/ -->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>10</source>
<target>10</target>
<compilerArgs>
<arg>--add-opens=javafx.scene.control=ALL-UNNAMED</arg>
<arg>--add-opens=javafx.scene.control.skin=ALL-UNNAMED</arg>
</compilerArgs>
</configuration>
</plugin>
InaccessibleObjectException
добавляется в строку flowField.setAccessible(true)
в блоке try/catch
с сообщением:
Unable to make field javafx.scene.control.skin.VirtualFlow javafx.scene.control.skin.TableViewSkinBase.flow accessible: module javafx.controls does not "opens javafx.scene.control.skin" to unnamed module @418e9723
Я почти уверен, что есть еще здесь больше одной ошибки, и будем благодарны за их указание; был бы полезен пример, основанный на рабочей среде, описанной выше.
Заранее спасибо.