6

しばらくの間、TreeView 列のサイズをコンテンツに合わせて自動調整する方法を見つけようとしています。これは以前にも尋ねられましたが、応答は最小限であり、受け入れられませんでした.

[テーブルビューのjavafx列の自動調整サイズ

興味深いことに、私が探している動作は、TableView で列のサイズ変更行をダブルクリックしたときに発生するものとまったく同じです。ただし、JavaFX ソース コードを調べたときに、これがどのように発生するかを理解できませんでした。

JavaFX TableView/TableColumn/TableColumnHeader で列のサイズ変更行のダブルクリック動作がどのように/どこで処理されるかを知っている人はいますか?

可能であれば、サイズ変更行をダブルクリックしたときに何が起こるかを、最初に列が自動的にレンダリングするようにしたいと思います。これが、利用可能な事前に作成された列サイズ制約ポリシーの 1 つではないことは、私には理解できません。

4

3 に答える 3

6

JavaFX8で私のために働く解決策:

columnResizePolciyに設定CONSTRAINED_RESIZE_POLICY

<TableView fx:id="table" >
    <columnResizePolicy>
        <TableView fx:constant="CONSTRAINED_RESIZE_POLICY" />
    </columnResizePolicy>
</TableView>
于 2015-09-01T14:09:17.280 に答える
3

obj が宣言されていないなど、コードに欠けている部分がいくつかあります。また、そのクラスのどこでも使用しているメソッドが見つかりません。私は 1.8.0_20-ea-b05 を使用しています、または -version が教えてくれます。TableViewSkin で同様の方法を見つけました。

public static void autoSizeTableViewColumns(final TableView<?> tableView) {
    TableViewSkin<?> skin = (TableViewSkin<?>) tableView.getSkin();
    TableHeaderRow headerRow = skin.getTableHeaderRow();
    NestedTableColumnHeader rootHeader = headerRow.getRootHeader();
    for (TableColumnHeader columnHeader : rootHeader.getColumnHeaders()) {
        try {
            TableColumn<?, ?> column = (TableColumn<?, ?>) columnHeader.getTableColumn();
            if (column != null) {
                Method method = skin.getClass().getDeclaredMethod("resizeColumnToFitContent", TableColumn.class, int.class);
                method.setAccessible(true);
                method.invoke(skin,column, 30);
            }
        } catch (Throwable e) {
            e = e.getCause();
            e.printStackTrace(System.err);
        }
    }
}
于 2014-05-16T00:48:51.033 に答える