如何调整JavaFX ScrollPane内容以适应当前大小
我有一个以ScrollPane
作为中心元素的BorderPane
。 它自动resize以填满屏幕。 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); }
代码部分取自: 如何访问ScrollPane的滚动条
尝试
ScrollPane scrollPane = new ScrollPane(); scrollPane.setFitToHeight(true); scrollPane.setFitToWidth(true);
而不会覆盖resize()
方法。
通过XML
或CSS
设置fitToHeight
或fitToWidth
属性:
FXML:
<ScrollPane fx:id="myScrollPane" fitToHeight="true" fitToWidth="true" />
CSS:
.my-scroll-pane { -fx-fit-to-height: true; -fx-fit-to-width: true; }