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