I have a BorderPane
with a ScrollPane
as the center element. It resizes automatically to fill the screen. Inside the ScrollPane
is a HBox
that has no content but is a drag-and-drop target. Therefore I want it to fill its parent ScrollPane
.
What is the preferred way to do this?
What I have tried so far is overriding the ScrollPane.resize(...)
method to resize the HBox
but it seems rather complicated and unorthodox.
edit: To add some useful code to this, this is how I can workaround the problem, but I believe there has to be some better way to do this:
@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 partly taken from here: How to access the Scrollbars of a ScrollPane
Try
ScrollPane scrollPane = new ScrollPane();
scrollPane.setFitToHeight(true);
scrollPane.setFitToWidth(true);
without overriding the resize()
method.
Setting the fitToHeight
or fitToWidth
attribute through XML
or CSS
:
FXML:
<ScrollPane fx:id="myScrollPane" fitToHeight="true" fitToWidth="true" />
CSS:
.my-scroll-pane {
-fx-fit-to-height: true;
-fx-fit-to-width: true;
}
来源:https://stackoverflow.com/questions/17568688/how-to-resize-javafx-scrollpane-content-to-fit-current-size