web-dev-qa-db-fra.com

Comment redimensionner le contenu de JavaFX ScrollPane pour l'adapter à la taille actuelle

J'ai un BorderPane avec un ScrollPane comme élément central. Il se redimensionne automatiquement pour remplir l'écran. À l'intérieur du ScrollPane se trouve un HBox qui n'a pas de contenu mais 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 remplacer la méthode ScrollPane.resize(...) pour redimensionner le HBox mais cela semble plutôt compliqué et peu orthodoxe.

edit: Pour ajouter du code utile à cela, voici comment je peux contourner le problème, mais je pense qu'il doit y avoir un meilleur moyen 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 extrait d'ici: Comment accéder aux barres de défilement d'un ScrollPane

47
Lennert

Essayer

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

sans redéfinir la méthode resize().

76
Uluk Biy

Définition de l'attribut fitToHeight ou fitToWidth via 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;
}
21
NDY