resize - hbox - javafx pane border
Cómo cambiar el tamaño del contenido de JavaFX ScrollPane para que se ajuste al tamaño actual (2)
Establecer el fitToHeight
o fitToWidth
través de XML
o CSS
:
FXML:
<ScrollPane fx:id="myScrollPane" fitToHeight="true" fitToWidth="true" />
CSS:
.my-scroll-pane {
-fx-fit-to-height: true;
-fx-fit-to-width: true;
}
Tengo un BorderPane
con un ScrollPane
como elemento central. Cambia el tamaño automáticamente para llenar la pantalla. Dentro del ScrollPane
hay un HBox
que no tiene contenido pero es un objetivo de arrastrar y soltar. Por lo tanto, quiero que llene su ScrollPane
principal.
¿Cuál es la forma preferida de hacer esto?
Lo que he intentado hasta ahora es anular el método ScrollPane.resize(...)
para cambiar el tamaño del HBox
pero parece bastante complicado y poco ortodoxo.
editar: para agregar un código útil a esto, así puedo solucionar el problema, pero creo que debe haber una forma mejor de hacerlo:
@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);
}
Código tomado en parte desde aquí: Cómo acceder a las barras de desplazamiento de un ScrollPane
Tratar
ScrollPane scrollPane = new ScrollPane();
scrollPane.setFitToHeight(true);
scrollPane.setFitToWidth(true);
sin anular el método resize()
.