首页 > 解决方案 > 现在如何在 JavaFX 10 中从 TableView 获取 TableHeaderRow?

问题描述

我想在表格视图中自定义表格标题。这个例子在 javaFx8 中运行良好。

  TableViewSkin<?> skin = ( TableViewSkin<?> )getSkin();
  TableHeaderRow tableHeader = skin.getTableHeaderRow();
  NestedTableColumnHeader rootHeader = tableHeader.getRootHeader();

  tableHeader.setReordering( false );

现在,我将 jre 更改为 Java 10,并进行了所有拼图更改,这样所有内部 api 都无法再访问了。所以 getTableHeaderRow() / getRootHeader() / setReordering() 方法现在是私有的,所以访问它们的唯一方法是通过反射,我不想使用,因为我不是他们的朋友。

那么有没有办法在 JavaFx10 中自定义表头?

在我看来,Oracle 很容易做出这些更改,但它们并没有为我们的开发人员提供使用新 API 解决此类问题的解决方案,它们只是将所有内容设为私有或受保护。

我们正在做很多自定义控件并使用很多“内部”api,现在我们付出了巨大的努力来运行从 Java 8 到 Java 10 的正常工作代码。

标签: javafxtableviewjava-platform-module-systemjava-10tableheader

解决方案


skin.getTableHeaderRow()protected access,但我在某处看到了这个:

TableHeaderRow headerRow = (TableHeaderRow) tableView.lookup("TableHeaderRow");

推荐阅读