BorderPane
を中心要素として持つScrollPane
があります。画面に合わせて自動的にサイズ変更されます。 ScrollPane
の中には、コンテンツはありませんがドラッグアンドドロップターゲットであるHBox
があります。したがって、その親ScrollPane
を埋めてほしい。
これを行うための好ましい方法は何ですか?
私がこれまでに試したのは、HBox
のサイズを変更するためにScrollPane.resize(...)
メソッドをオーバーライドすることですが、それはかなり複雑で非正統的なようです。
編集:これにいくつかの有用なコードを追加するために、これは私が問題を回避する方法です。しかし、これを行うにはもっと良い方法が必要だと思います。
@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のScrollbarsにアクセスする方法
試してみる
_ScrollPane scrollPane = new ScrollPane();
scrollPane.setFitToHeight(true);
scrollPane.setFitToWidth(true);
_
resize()
メソッドをオーバーライドせずに。
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;
}