Comment redimensionner le contenu JavaFX ScrollPane en fonction de la taille actuelle

j'ai un BorderPane avec un ScrollPane comme élément central. Il redimensionne automatiquement pour remplir l'écran. À l'intérieur du ScrollPane se trouve un HBox qui n'a pas de contenu mais qui est une cible de glisser-déposer. Par conséquent, je veux qu'il remplisse son parent ScrollPane .

Quelle est la meilleure façon de procéder?

ce que j'ai essayé jusqu'à présent est de passer outre la méthode ScrollPane.resize(...) pour redimensionner le HBox mais il semble plutôt compliqué et peu orthodoxe.

edit: pour ajouter du code utile à cela, c'est comme ça que je peux contourner le problème, mais je crois qu'il doit y avoir une meilleure façon de le faire:

@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 partiellement tiré d'ici: comment accéder aux barres de défilement d'un ScrollPane

41
demandé sur Community 2013-07-10 14:47:54

2 réponses

Essayer

ScrollPane scrollPane = new ScrollPane();
scrollPane.setFitToHeight(true);
scrollPane.setFitToWidth(true);

sans remplacer la méthode resize() .

68
répondu Uluk Biy 2013-07-10 14:20:39

définissant l'attribut fitToHeight ou fitToWidth par XML ou CSS :

FXML:

<ScrollPane fx:id="myScrollPane" fitToHeight="true" fitToWidth="true" />

CSS:

.my-scroll-pane {
    -fx-fit-to-height: true;
    -fx-fit-to-width: true;
}
17
répondu NDY 2015-04-07 12:11:06