2013-07-27 2 views
0

Я хочу, чтобы вставить ScrollPane в FlowPane:Добавить ScrollPane в FlowPane

public FlowPane infrastructurePane() 
    { 

     final FlowPane flow = new FlowPane(); 
     flow.setPadding(new Insets(5, 5, 5, 5)); 
     flow.setVgap(5); 
     flow.setHgap(5); 
     flow.setAlignment(Pos.CENTER); 

     final ScrollPane scroll = new ScrollPane(); 

     scroll.setHbarPolicy(ScrollPane.ScrollBarPolicy.AS_NEEDED); // Horizontal scroll bar 
     scroll.setVbarPolicy(ScrollPane.ScrollBarPolicy.AS_NEEDED); // Vertical scroll bar 
     scroll.setContent(flow); 
     scroll.viewportBoundsProperty().addListener(new ChangeListener<Bounds>() 
     { 
      @Override 
      public void changed(ObservableValue<? extends Bounds> ov, Bounds oldBounds, Bounds bounds) 
      { 
       flow.setPrefWidth(bounds.getWidth()); 
      } 
     }); 

     //flow.setPrefWrapLength(170); // preferred width allows for two columns 
     flow.setStyle("-fx-background-color: white;"); 

     for (int i = 0; i < 28; i++) 
     { 
      flow.getChildren().add(generateRectangle()); 
     } 

     String cssURL = "/com/dx57dc/css/ButtonsDemo.css"; 
     String css = this.getClass().getResource(cssURL).toExternalForm(); 
     flow.getStylesheets().add(css); 

     return flow; 

    } 

    public Rectangle generateRectangle() 
    { 

     Rectangle rect2 = new Rectangle(10, 10, 10, 10); 
     rect2.setId("app"); 
     rect2.setArcHeight(8); 
     rect2.setArcWidth(8); 
     //rect2.setX(10); 
     //rect2.setY(160); 
     rect2.setStrokeWidth(1); 
     rect2.setStroke(Color.WHITE); 
     rect2.setWidth(220); 
     rect2.setHeight(180); 

     return rect2; 
    } 

Но когда я запускаю код, который я не могу видеть ScrollPane. Можете ли вы рассказать мне, что мне не хватает в моем коде, чтобы пропустить прокрутку FlowPane?

EDIT

enter image description here

ответ

3

Accroding на код, который вы хотите "Добавить FlowPane в ScrollPane" право? Прокрутка не может быть видна, потому что она определена в методе инфраструктурыPane() локально, но не добавлена ​​в сцену. Верните прокрутку в этот метод. Также вам нужно установить prefHight для поточной панели при изменении порта представления. Также вы можете использовать стек стек в качестве верхнего контейнера. . Здесь полная демо:

public class FlowInScroll extends Application { 

    @Override 
    public void start(Stage stage) throws Exception { 
     StackPane root = new StackPane(); 
     root.getChildren().addAll(infrastructurePane()); 
     Scene scene = new Scene(root); 
     stage.setScene(scene); 
     stage.show(); 
    } 

    public ScrollPane infrastructurePane() { 

     final FlowPane flow = new FlowPane(); 
     flow.setPadding(new Insets(5, 5, 5, 5)); 
     flow.setVgap(5); 
     flow.setHgap(5); 
     flow.setAlignment(Pos.CENTER); 

     final ScrollPane scroll = new ScrollPane(); 

     scroll.setHbarPolicy(ScrollPane.ScrollBarPolicy.AS_NEEDED); // Horizontal scroll bar 
     scroll.setVbarPolicy(ScrollPane.ScrollBarPolicy.AS_NEEDED); // Vertical scroll bar 
     scroll.setContent(flow); 
     scroll.viewportBoundsProperty().addListener(new ChangeListener<Bounds>() { 
      @Override 
      public void changed(ObservableValue<? extends Bounds> ov, Bounds oldBounds, Bounds bounds) { 
       flow.setPrefWidth(bounds.getWidth()); 
       flow.setPrefHeight(bounds.getHeight()); 
      } 
     }); 

     //flow.setPrefWrapLength(170); // preferred width allows for two columns 
     flow.setStyle("-fx-background-color: yellow;"); 

     for (int i = 0; i < 28; i++) { 
      flow.getChildren().add(generateRectangle()); 
     } 

     String cssURL = "/com/dx57dc/css/ButtonsDemo.css"; 
     String css = this.getClass().getResource(cssURL).toExternalForm(); 
     flow.getStylesheets().add(css); 

     return scroll; 
    } 

    public Rectangle generateRectangle() { 

     Rectangle rect2 = new Rectangle(10, 10, 10, 10); 
     rect2.setId("app"); 
     rect2.setArcHeight(8); 
     rect2.setArcWidth(8); 
     //rect2.setX(10); 
     //rect2.setY(160); 
     rect2.setStrokeWidth(1); 
     rect2.setStroke(Color.WHITE); 
     rect2.setWidth(220); 
     rect2.setHeight(180); 

     return rect2; 
    } 

    public static void main(String[] args) { 
     launch(args); 
    } 
} 
+1

мне удается заполнить сцену с ScrollPane этим кодом: 'Rectangle2D primaryScreenBounds = Screen.getPrimary() getVisualBounds(); scroll.setPrefSize (primaryScreenBounds.getWidth(), primaryScreenBounds.getHeight()); 'Но это лучший способ? –

+0

@PeterPenzov. Попробуйте scroll.setFitToWidth (true) и scroll.setFitToHeight (true). Также попробуйте установить прокрутку в StackPane вместо VBox. –

+0

Я попытался добавить scroll.setFitToWidth (true); scroll.setFitToHeight (true); но он не работает. С приведенным выше кодом я получаю желаемый результат. –

 Смежные вопросы

  • Нет связанных вопросов^_^