我想创建以下场景:
+-----------------------------------------------+
|ROOT (=BorderPane) |
| |
| +-------------------------------------------+ |
| |TOOL BAR | |
| |(north) | |
| +-------------------------------------------+ |
| |
| +-------------------------------------------+ |
| |MyConfigurationComponent extends BorderPane| |
| |(center) | |
| | +-------------------------+ +---------+ | |
| | |ScrollPane | | | | |
| | |(center) | | | | |
| | | +---------------------+ | | | | |
| | | | | | | | | |
| | | | | | | SIDE | | |
| | | | CANVAS | | | PANE | | |
| | | | | | | (right) | | |
| | | | | | | | | |
| | | | | | | | | |
| | | +---------------------+ | | | | |
| | | | | | | |
| | +-------------------------+ +---------+ | |
| | | |
| +-------------------------------------------+ |
| |
+-----------------------------------------------+
我想让ScrollPane
尽可能大。这意味着ScrollPane
应该增长并填充整个区域,无论场景大小如何。
由于TOOL BAR
和SIDE PANE
都有固定(首选)宽度和高度,我认为ScrollPane
会拉伸并填充整个剩余区域。
但事实并非如此。 ScrollPane
以某种方式神奇地将其最小尺寸设置为大约40x40。拉伸高度以匹配SIDE PANEL
的高度,但宽度仍然相同,似乎没有任何东西可以改变它。
事实上,使ScrollPane
更大的唯一一件事就是明确地将minWidth设置为某个值(即400)。但这并没有解决ScrollPane
的自动抵抗问题。
当我将背景颜色设置为MyConfigurationComponent
时,我可以看到背景颜色按预期填充整个区域(因此问题不在于MyConfigurationComponent
)。看起来它的中心子项(ScrollPane
)被渲染为左,右子项(SIDE PANEL
)作为中心,因为右侧的所有剩余区域都是空白的(但是具有背景,所以它仍然是MyConfigurationComponent
!)。
min
,pref
和max
的{{1}}尺寸设为特定值ScrollPane
和fitToWidth
设置为true fitToHeight
与ScrollPane
一起包裹,并将锚定到所有四个方面AnchorPane
并将优先级设置为allways 将ScrollPane
的宽度减去MyConfigurationComponent
的宽度绑定到SIDE PANEL
。在很多方面都错了。
ScrollPane
<BorderPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8.0.60" xmlns:fx="http://javafx.com/fxml/1" fx:controller="cz.upol.fapapp.cfa.gui.frame.FxCFAConfigFrameController">
<top>
<ToolBar>
<Button text="Some button" />
</ToolBar>
</top>
<center>
<MyConfigurationComponent fx:id="configComp" />
</center>
</BorderPane>
<BorderPane xmlns="http://javafx.com/javafx/8.0.60" xmlns:fx="http://javafx.com/fxml/1">
<center>
<ScrollPane fx:id="scrollPane">
<content>
<Canvas width="2000" height="2000" />
</content>
</ScrollPane>
</center>
<right>
<VBox prefWidth="100.0" BorderPane.alignment="CENTER_RIGHT">
<children>
<Label text="Colors" />
<ComboBox fx:id="cmbColors" prefWidth="100.0" />
<!-- ... -->
<Separator prefHeight="15.0" prefWidth="100.0" />
<Button mnemonicParsing="false" text="Action 1" />
<Button mnemonicParsing="false" text="Action 2" />
</children>
</VBox>
</right>
</BorderPane>
的中心扩展其大小以填充内容,不是吗?BorderPane
内的BorderPane
以某种方式造成的吗?答案 0 :(得分:0)
您可以将其放在代码中的start方法中:
stage.widthProperty().addListener(event -> {
scrollPane.setPrefWidth(stage.getWidth());
});
stage.heightProperty().addListener(event -> {
scrollPane.setPrefHeight(stage.getHeight());
});
如果这不起作用,我建议也将BorderPane的宽度和高度设置为舞台的尺寸:
stage.widthProperty().addListener(event -> {
scrollPane.setPrefWidth(stage.getWidth());
borderPane.setPrefWidth(stage.getWidth());
});
stage.heightProperty().addListener(event -> {
scrollPane.setPrefHeight(stage.getHeight());
borderPane.setPrefHeight(stage.getHeight());
});
答案 1 :(得分:0)