So passen Sie die Größe von JavaFX ScrollPane-Inhalten an die aktuelle Größe an

Ich habe einBorderPane mit einerScrollPane als zentrales Element. Die Größe wird automatisch angepasst, um den Bildschirm auszufüllen. In derScrollPane ist einHBox Das hat keinen Inhalt, ist aber ein Drag-and-Drop-Ziel. Deshalb möchte ich, dass es sein Elternteil ausfülltScrollPane.

Was ist der bevorzugte Weg, um dies zu tun?

Was ich bisher ausprobiert habe, ist das Überschreiben derScrollPane.resize(...) Methode zur Größenänderung derHBox aber es scheint ziemlich kompliziert und unorthodox.

edit: Um hier nützlichen Code hinzuzufügen, kann ich das Problem auf diese Weise umgehen, aber ich glaube, es muss einen besseren Weg geben, dies zu tun:

@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);
}

Code teilweise hier entnommen:So greifen Sie auf die Bildlaufleisten eines Bildlauffensters zu

Antworten auf die Frage(2)

Ihre Antwort auf die Frage