我有一个标签页,其中标签页是动态加载的。每个选项卡都有一个锚窗格作为其内容。除了一个小细节之外,这很好用:当我调整主应用程序的大小时,选项卡内容不会调整大小。
所以假设我最大化我的应用程序,标签内容保持其“小”尺寸。考虑到它的根是锚窗格,如何触发标签内容的调整大小?
我是 javafx 世界的新手,在我的无知中,我尝试将锚窗格包装在 hbox 中并将其设置为选项卡的内容无济于事。
有任何想法吗?
将 AnchorPane 约束放入 TabPane(不是 Tabs,请注意),以便它根据其容器 AnchorPane 调整自身大小。
如果您使用的是 SceneBuilder,TabPane 实例的布局部分会为您提供帮助。如果您还动态创建 TabPane,则可以将此常量设置为AnchorPane.setLeftAnchor(theTabPane, ...)
,AnchorPane.setTopAnchor(theTabPane, ...)
等。
这是如何调整组件大小的示例,但想法是相同的。
Rectangle rec = new Rectangle();
rec.widthProperty().bind(stackPane.widthProperty().subtract(50));
rec.heightProperty().bind(stackPane.heightProperty().subtract(50));
您必须获得主舞台的大小,并且.bind(stackPane.heightProperty().subtract(50));
可以动态缩小大小。
但我是这项技术的新手,更有经验的人可以给你更准确的答案。
我目前有一个可行的解决方案,但我很确定这不是最干净的方法:
final Pane root = loader.getRoot();
tbsCore.widthProperty().addListener(new ChangeListener<Number>() {
@Override
public void changed(ObservableValue<? extends Number> arg0, Number arg1, Number newValue) {
root.setPrefWidth(newValue.doubleValue());
}
});
tbsCore.heightProperty().addListener(new ChangeListener<Number>() {
@Override
public void changed(ObservableValue<? extends Number> arg0, Number arg1, Number newValue) {
root.setPrefHeight(newValue.doubleValue());
}
});
请注意,“root”是我要放入选项卡的窗格,而“tbsCore”是 TabPane。
从你说的,我明白你和我今天遇到的问题一样!填充TabPane
窗口的空间很容易,但内容没有调整大小。
找出正在发生的事情的一些提示:
Node
,以查看哪些Node
s 增长,哪些不增长。例如,在调整大小时,您可能会看到 也AnchorPane
正在调整大小,但内容没有。preferredWidth
, preferredHeight
, preferredSize
, maxWidth
,maxHeight
或maxSize
可能阻止Node
生长的。Node
让它或者它的孩子成长。一些例子是:
最后,寻找隐藏Node
在你的代码中!例如,我正在使用以下代码添加GridPane
一个Tab
:
Tab tab = new Tab("Tab Title", new ScrollPane(myHugeGridPane));
而这个“隐藏”的 ScrollPane 就是问题所在。