我有一个BorderPane
,其中ScrollPane
为中心元素。它会自动调整大小以填充屏幕。 ScrollPane
内部是HBox
,没有任何内容,但是是一个拖放目标。因此,我希望它填充其父ScrollPane
。
这样做的首选方式是什么?
我到目前为止所尝试的内容是重写ScrollPane.resize(...)
方法来调整HBox
的大小,但它似乎相当复杂且非正统。
编辑:要为此添加一些有用的代码,这就是我可以解决问题的方法,但我相信必须有更好的方法来实现这一点:
@Override
public void resize(double width, double height) {
super.resize(width, height);
double scrollBarHeight = 2;
double scrollBarWidth = 2;
for (final Node node : lookupAll(".scroll-bar")) {
if (node instanceof ScrollBar) {
ScrollBar sb = (ScrollBar) node;
if (sb.getOrientation() == Orientation.HORIZONTAL) {
System.out.println("horizontal scrollbar visible = " + sb.isVisible());
System.out.println("width = " + sb.getWidth());
System.out.println("height = " + sb.getHeight());
if(sb.isVisible()){
scrollBarHeight = sb.getHeight();
}
}
if (sb.getOrientation() == Orientation.VERTICAL) {
System.out.println("vertical scrollbar visible = " + sb.isVisible());
System.out.println("width = " + sb.getWidth());
System.out.println("height = " + sb.getHeight());
if(sb.isVisible()){
scrollBarWidth = sb.getWidth();
}
}
}
}
hBox.setPrefSize(width-scrollBarWidth, height-scrollBarHeight);
}
答案 0 :(得分:74)
尝试
ScrollPane scrollPane = new ScrollPane();
scrollPane.setFitToHeight(true);
scrollPane.setFitToWidth(true);
不覆盖resize()
方法。
答案 1 :(得分:20)
通过fitToHeight
或fitToWidth
设置XML
或CSS
属性:
FXML:
<ScrollPane fx:id="myScrollPane" fitToHeight="true" fitToWidth="true" />
CSS:
.my-scroll-pane {
-fx-fit-to-height: true;
-fx-fit-to-width: true;
}