2015-06-17 111 views

回答

21

A Group不可調整大小(意味着它的大小不由其父節點在場景圖中進行管理),並且接受其子節點邊界的並集。 (換句話說,Group的局部邊界將是包含所有子節點邊界的最小矩形)。如果它大於它在其父文件中分配的空間,它將被剪輯。

相比之下,Pane是可調整大小的,所以它的大小由它的父親設置,這基本上決定了它的邊界。

這是一個快速演示。下面是Group的頂部和Pane。兩者都包含一個固定的藍色方塊(100,100)和一個綠色方塊,通過按左/右箭頭鍵移動。請注意,開始時藍色方塊出現在組的左上角,因爲組的局部邊界從其所有子節點的最左上角開始(即,組的局部邊界從右邊的(100, 100)延伸和下)。隨着您將綠色矩形「屏幕外」移動,該組將調整其邊界,以儘可能合併所做的更改,而窗格保持不變。

import javafx.application.Application; 
import javafx.scene.Group; 
import javafx.scene.Scene; 
import javafx.scene.input.KeyEvent; 
import javafx.scene.layout.Pane; 
import javafx.scene.layout.Priority; 
import javafx.scene.layout.VBox; 
import javafx.scene.paint.Color; 
import javafx.scene.shape.Rectangle; 
import javafx.stage.Stage; 

public class GroupVsPaneDemo extends Application { 

    @Override 
    public void start(Stage primaryStage) { 
     Pane pane = new Pane(); 
     Group group = new Group(); 

     VBox.setVgrow(group, Priority.NEVER); 
     VBox.setVgrow(pane, Priority.NEVER); 

     VBox vbox = new VBox(group, pane); 


     Rectangle rect1 = new Rectangle(100, 100, 100, 100); 
     Rectangle rect2 = new Rectangle(100, 100, 100, 100); 
     Rectangle rect3 = new Rectangle(200, 200, 100, 100); 
     Rectangle rect4 = new Rectangle(200, 200, 100, 100); 
     rect1.setFill(Color.BLUE); 
     rect2.setFill(Color.BLUE); 
     rect3.setFill(Color.GREEN); 
     rect4.setFill(Color.GREEN); 

     group.getChildren().addAll(rect1, rect3); 
     pane.getChildren().addAll(rect2, rect4); 

     Scene scene = new Scene(vbox, 800, 800); 
     scene.addEventHandler(KeyEvent.KEY_PRESSED, e -> { 
      double deltaX ; 
      switch(e.getCode()) { 
       case LEFT: 
        deltaX = -10 ; 
        break ; 
       case RIGHT: 
        deltaX = 10 ; 
        break ; 
       default: 
        deltaX = 0 ; 
      } 
      rect3.setX(rect3.getX() + deltaX); 
      rect4.setX(rect4.getX() + deltaX); 
     }); 

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

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

非常感謝你!你的演示是完美的。 – Florian

4

窗格和集團之間的一些重要的不同之處在於:

  • 窗格可以有自己的大小,其中一個小組將在其子的集體邊界和是直接調整大小。
  • 當您想將其節點放置在絕對位置時可以使用窗格。
+0

我想你也可以使用一個組來定位它的子節點在絕對位置('layoutX'和'layoutY'參數工作)。 – gbmhunter

0

此外,請注意,組被設計爲非常輕量級,並且不支持很多樣式。例如,您不能爲組設置邊框或背景顏色。

查看this answer瞭解更多詳情。