Tôi có một BorderPane
với một phần tử trung tâm là ScrollPane
. Nó tự động thay đổi kích thước để lấp đầy màn hình. Bên trong ScrollPane
là HBox
không có nội dung nhưng là mục tiêu kéo và thả. Vì vậy, tôi muốn nó điền vào phụ huynh của nó ScrollPane
.Cách thay đổi kích thước nội dung JavaFX ScrollPane cho vừa với kích thước hiện tại
Cách ưa thích để làm điều này là gì?
Những gì tôi đã thử cho đến nay là ghi đè phương pháp ScrollPane.resize(...)
để đổi kích thước HBox
nhưng có vẻ khá phức tạp và không chính thống.
chỉnh sửa: Để thêm một số mã hữu ích này, đây là cách tôi có thể workaround vấn đề, nhưng tôi tin rằng phải có một số cách tốt hơn để làm điều này:
@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);
}
Mã một phần lấy từ đây: How to access the Scrollbars of a ScrollPane
Đó là ok, tôi chỉ cần đặt một hgrow và vgrow để thỉnh thoảng và nó hoạt động ngay bây giờ – user7867610