我正在尝试使用javaFX(2.2)开发桌面应用程序,并且在使其真正发挥自己的作用时遇到了一些困难。作为该框架的新用户,我可能未按预期使用它。

我想要的是一种dashbord,在ScrollPane中具有多个JavaFX或自定义控件。我目前有几个看起来像这样的 View :

<AnchorPane id="userContent" xmlns:fx="http://javafx.com/fxml" fx:controller="squalp.view.OrgViewController">
    <children>
        <ScrollPane fx:id="scrollPane" styleClass="transparent" hbarPolicy="NEVER" vbarPolicy="AS_NEEDED" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
            <content>
                <VBox fx:id="vBox" styleClass="transparent" alignment="TOP_LEFT" focusTraversable="true">
                    <children>
                        <Label text="Label" />
                        <Button fx:id="bTest" text="Test" onAction="#test"/>
                        <TreeView fx:id="orgTree" focusTraversable="true" />
                    </children>
                </VBox>
            </content>
        </ScrollPane>
    </children>
</AnchorPane>

只要我继续使用简单的控件,没问题,项目就可以正确地一个接一个地放置在VBox中。

但是当使用TreeViews或TableViews时,我只能使控件具有固定的高度,这意味着除了主要控件之外,控件底部还有额外的空间或新的滚动条。我想要实现的是使控件适应当前的内容高度。

例如,Qt的QML具有childrenHeight属性,这正是我想要的。我认为必须以某种方式计算此内容的高度,因为组件滚动条确实可以适应内容。

我不得不对表 View 使用一种解决方法:
table.setPrefHeight(list.size() * rowHeight + headerHeight);

但我找不到跟踪树 View 上显示项目的方法。

有谁知道我该怎么做才能解决这个问题?还是我真的没有像应该那样使用框架?

提前致谢。

编辑:问题的直观描述:

Case 1

在这里,我的树 View 的高度设置为默认值。没有足够的项目来填充树 View :如果我想在下面放置另一个组件,将会有一个空白;如果我的场景不够大,即使所有可显示的内容都是可见的,也会出现ScrollPane的滚动条。

Case 2

如果要展开我的树状 View 的项目,那么现在有太多了。尽管我已经有了一个带有滚动窗格的可滚动 View ,但它们并不能一次全部可见,并且会显示treeview的滚动条。

我想让我的TreeView适应其内容高度(如果折叠,则减小高度,如果展开,则增大高度),以便能够一个接一个地放置多个组件,并使用ScrollPane滚动它们。滚动条。

由于TreeView组件本身具有滚动条,因此必须在某个点计算其可见内容的高度(因为滚动条基本上使用基于contentHeight / componentHeight的比率)。该信息似乎在 public API中不可用,但我想知道是否是否要开发一个扩展TreeView的自定义类,是否可以将组件绑定(bind)到其“可见高度”。

最佳答案

也许有适当的方法可以实现您的目标,但是我可以建议使用类似于tableview的方法。

orgTree.prefHeightProperty().bind(orgTree.impl_treeItemCountProperty()
        .multiply(treeRowHeight)); // treeRowHeight maybe 24.

请注意,这只是使用不建议使用的内部仅供使用的方法的一种解决方法,该方法可能会在将来的版本中删除。

09-08 08:34
查看更多