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
Essayer
ScrollPane scrollPane = new ScrollPane();
scrollPane.setFitToHeight(true);
scrollPane.setFitToWidth(true);
sans redéfinir la méthode resize()
.
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;
}