2013-07-10 43 views
38

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 ScrollPaneHBox 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

+0

Đó 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

Trả lời

62

Hãy thử

ScrollPane scrollPane = new ScrollPane(); 
scrollPane.setFitToHeight(true); 
scrollPane.setFitToWidth(true); 

mà không trọng dụng phương pháp resize().

+1

Đúng như tôi nghĩ, có một cách rõ ràng mà tôi không tìm thấy. Cảm ơn rất nhiều cho câu trả lời của bạn! – Lennert

+0

Phương thức truy cập cho setFitToHeight và setFitToWidth trong xml là gì? – Andrew121007

+6

@ Andrew121007 nó là '' –

17

Thiết lập thuộc tính fitToHeight hoặc fitToWidth qua XML hoặc CSS:

FXML:

<ScrollPane fx:id="myScrollPane" fitToHeight="true" fitToWidth="true" /> 

CSS:

+0

Tôi thích sử dụng ScrollPane thay vì một cái gì đó như .my-scroll-pane để làm cho toàn bộ điều tự động, không FXML thay đổi cần thiết sau đó .. có lẽ nên là một mặc định. – User

+0

@Manius thats true, nhưng bạn nên cẩn thận rằng bạn làm cho nó cụ thể, nếu không tất cả các cửa sổ di chuyển của bạn cư xử như nhau và có lẽ bạn không muốn điều đó. – NDY

+0

Id muốn thêm rằng tùy chọn này có sẵn trong Trình tạo cảnh. Trong bất kỳ Scroll Pane dưới 'layout' -> 'Specific' (thứ hai từ trên xuống) -> Fit To Width/Height. Đã cho tôi một thời gian để tìm hy vọng điều này sẽ giúp một ai đó. –

Các vấn đề liên quan