2016-10-09 46 views
2

我正在開發一款用於JavaFX培訓的小軟件。Android中的重量:JavaFX中的重量

在Android中,在LinearLayout的內部,我可以通過設置變量android:weight="someValue"來擴大視圖以填充整個可用空間,不幸的是我無法實現這是JavaFX。

我試過用max/min/pref高度,但它沒有工作。

任何幫助將非常感激。

回答

2

使用VBox/HBox可以設置孩子到Priority.ALWAYSvgrow/hgrow靜態屬性(或其中的一些),這使得那些Node小號成長當父增長(假設他們可以調整大小)。

private static Region createRegion(String color) { 
    Region region = new Region(); 
    region.setStyle("-fx-background-color: "+color); 
    return region; 
} 

@Override 
public void start(Stage primaryStage) { 
    VBox vbox = new VBox(
      createRegion("red"), 
      createRegion("blue"), 
      createRegion("green") 
    ); 
    for (Node n : vbox.getChildren()) { 
     VBox.setVgrow(n, Priority.ALWAYS); 
    } 

    Scene scene = new Scene(vbox); 

    primaryStage.setScene(scene); 
    primaryStage.show(); 
} 

要控制孩子的相對權重,你可以使用一個GridPane代替,並設置ColumnConstraints/RowConstraintspercentWidth/percentHeight性能。

@Override 
public void start(Stage primaryStage) throws IOException { 
    GridPane root = new GridPane(); 

    root.getColumnConstraints().addAll(DoubleStream.of(30, 2, 68) 
      .mapToObj(width -> { 
       ColumnConstraints constraints = new ColumnConstraints(); 
       constraints.setPercentWidth(width); 
       constraints.setFillWidth(true); 
       return constraints; 
      }).toArray(ColumnConstraints[]::new)); 

    RowConstraints rowConstraints = new RowConstraints(); 
    rowConstraints.setVgrow(Priority.ALWAYS); 

    root.getRowConstraints().add(rowConstraints); 

    root.addRow(0, Stream.of("red", "green", "blue").map(s -> createRegion(s)).toArray(Node[]::new)); 

    Scene scene = new Scene(root); 

    primaryStage.setScene(scene); 

    primaryStage.show(); 
} 
+0

謝謝!太棒了 – Matteo