수색…


StackPane

StackPane 의 자식을 back-to-front 스택에 배치합니다.

아이의 Z 순서는, 아이리스트 ( getChildren 호출에 의해 액세스 할 수있는)의 순서로 정의됩니다. 제 0의 아이는 스택의 맨 아래, 마지막 아이는 스택의 맨 위에 있습니다.

스택 팬은 각 자식의 크기를 조정하여 자체 내용 영역을 채 웁니다. 아이를 사이즈 변경 할 수 없기 때문에 (사이즈 변경이 불가능하거나 최대 사이즈로 할 수 없기 때문에) StackPane 의 area를 전부 칠할 수없는 경우는, StackPane 페인의 alignmentProperty 디폴트는 Pos.CENTER. 사용해 영역 내에 배치됩니다 Pos.CENTER.

// Create a StackPane
StackPane pane = new StackPane();

// Create three squares
Rectangle rectBottom = new Rectangle(250, 250);
rectBottom.setFill(Color.AQUA);
Rectangle rectMiddle = new Rectangle(200, 200);
rectMiddle.setFill(Color.CADETBLUE);
Rectangle rectUpper = new Rectangle(150, 150);
rectUpper.setFill(Color.CORAL);

// Place them on top of each other
pane.getChildren().addAll(rectBottom, rectMiddle, rectUpper);

여기에 이미지 설명을 입력하십시오.

HBox 및 VBox

HBoxVBox 레이아웃은 매우 비슷하며 둘 다 한 줄로 자녀를 배치합니다.

공통 특성

HBox 또는 VBox 에 테두리 및 / 또는 패딩 세트가 있으면 해당 내용이 해당 인세 트 내에 HBox 됩니다.

아동의 가시적 인 재산 가치에 관계없이 각 관리 된 아동을 배치합니다. 관리되지 않는 자식은 무시됩니다.

내용의 정렬은 alignment 속성에 의해 제어되며, 기본값은 Pos.TOP_LEFT 입니다.

HBox

HBox 는 자식을 왼쪽에서 오른쪽으로 가로로 한 행에 배치합니다.

HBox 는 자식 (크기 재조정 할 수있는 경우) 을 원하는 너비 s로 크기 조정하고 fillHeight 속성을 사용하여 높이를 조정하여 높이를 채울지 또는 높이를 원하는대로 유지할지 결정합니다 (fillHeight 기본값은 true).

HBox 만들기

// HBox example
HBox row = new HBox();
Label first = new Label("First");
Label second = new Label("Second");
row.getChildren().addAll(first, second);

HBox 예제

VBox

VBox 는 위에서 아래로 하나의 수직 열에 자식을 배치합니다.

VBox 는 자식의 크기 를 원하는 높이 로 조절하고 fillWidth 속성을 사용하여 너비를 조정하여 너비를 채우거나 너비를 원하는대로 유지할지 결정합니다 (fillWidth의 기본값은 true).

VBox 만들기

// VBox example
VBox column = new VBox();
Label upper = new Label("Upper");
Label lower = new Label("Lower");
column.getChildren().addAll(upper, lower);

VBox 예제

BorderPane

BorderPane 는 5 개의 다른 영역으로 구분됩니다.

BorderPane의 여러 영역

테두리 영역 ( Top , Right , Bottom , Left )은 내용에 따라 크기가 지정됩니다. 기본적으로 그들은 필요한 것만 취할 수있는 반면, Center 영역은 나머지 공간을 차지합니다. 경계 영역이 비어 있으면 공간을 차지하지 않습니다.

각 영역에는 하나의 요소 만 포함될 수 있습니다. 이 메소드는 setTop(Node) , setRight(Node) , setBottom(Node) , setLeft(Node) , setCenter(Node) 메소드를 사용하여 추가 할 수 있습니다. 다른 레이아웃을 사용하여 둘 이상의 요소를 단일 영역에 배치 할 수 있습니다.

//BorderPane example
BorderPane pane = new BorderPane();

Label top = new Label("Top");

Label right = new Label("Right");

HBox bottom = new HBox();
bottom.getChildren().addAll(new Label("First"), new Label("Second"));

VBox left = new VBox();
left.getChildren().addAll(new Label("Upper"), new Label("Lower"));

StackPane center = new StackPane();
center.getChildren().addAll(new Label("Lorem"), new Label("ipsum"));

pane.setTop(top);        //The text "Top"
pane.setRight(right);    //The text "Right"
pane.setBottom(bottom);  //Row of two texts
pane.setLeft(left);      //Column of two texts
pane.setCenter(center);  //Two texts on each other

FlowPane

FlowPane 은 이용 가능한 수평 또는 수직 공간을 기반으로 행이나 열의 노드를 배치합니다. 수평 공간이 모든 노드의 너비의 합계보다 작 으면 노드는 다음 줄로 래핑됩니다. 수직 공간이 모든 노드의 높이의 합계보다 작 으면 노드를 다음 열로 래핑합니다. 다음 예제는 기본 가로 레이아웃을 보여줍니다.

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.FlowPane;
import javafx.stage.Stage;

public class Main extends Application {
    @Override
    public void start(Stage primaryStage) throws Exception{
        FlowPane root = new FlowPane();
        for (int i=1; i<=15; i++) {
            Button b1=new Button("Button "+String.valueOf(i));
            root.getChildren().add(b1); //for adding button to root
        }
        Scene scene = new Scene(root, 300, 250);
        primaryStage.setTitle("FlowPane Layout");
        primaryStage.setScene(scene);
        primaryStage.show();
    }
    public static void main(String[] args) {
        launch(args);
    }
}

영상

기본 FlowPane 생성자 :

FlowPane root = new FlowPane();

추가 FlowPane 생성자 :

FlowPane() //Creates a horizontal FlowPane layout with hgap/vgap = 0 by default.
FlowPane(double hgap, double gap) //Creates a horizontal FlowPane layout with the specified hgap/vgap.
FlowPane(double hgap, double vgap, Node... children) //Creates a horizontal FlowPane layout with the specified hgap/vgap.
FlowPane(Node... children) //Creates a horizontal FlowPane layout with hgap/vgap = 0.
FlowPane(Orientation orientation) //Creates a FlowPane layout with the specified orientation and hgap/vgap = 0.
FlowPane(Orientation orientation, double hgap, double gap) //Creates a FlowPane layout with the specified orientation and hgap/vgap.
FlowPane(Orientation orientation, double hgap, double vgap, Node... children) //Creates a FlowPane layout with the specified orientation and hgap/vgap.
FlowPane(Orientation orientation, Node... children) //Creates a FlowPane layout with the specified orientation and hgap/vgap = 0.

레이아웃에 노드를 추가하면 부모 Pane add() 또는 addAll() 메서드가 사용됩니다.

Button btn = new Button("Demo Button");    
root.getChildren().add(btn); 
root.getChildren().addAll(…); 

기본적으로 FlowPane 자식 노드를 왼쪽에서 오른쪽으로 배치합니다. 흐름 정렬을 변경하려면 Pos 유형의 열거 형 값을 전달하여 setAlignment() 메서드를 호출합니다.

일반적으로 사용되는 유동 정렬 :

root.setAlignment(Pos.TOP_RIGHT);     //for top right
root.setAlignment(Pos.TOP_CENTER);    //for top Center
root.setAlignment(Pos.CENTER);        //for Center
root.setAlignment(Pos.BOTTOM_RIGHT);  //for bottom right

GridPane

GridPane 는 그 자식을, 유연한 행과 열의 그리드 내에 배치합니다.

GridPane의 아이

아이는 GridPaneGridPane 장소에 배치 할 수있어 복수의 행이나 열 (디폴트의 스팬은 1)에 걸칠 가능성이있어 그리드 내의 배치는 레이아웃 제약에 의해 정의됩니다.

강제 기술
columnIndex 자녀의 레이아웃 영역이 시작되는 열.
rowIndex 아이의 레이아웃 영역이 시작되는 행.
columnSpan 아이의 레이아웃 영역이 수평에 걸치는 렬수.
rowSpan 아이의 레이아웃 영역이 수직 방향에 걸치는 행의 수.

그리드 패널이 컨텐츠를 수용하기 위해 그리드를 자동으로 확장 / 축소하기 때문에 전체 행 / 열 수를 미리 지정할 필요가 없습니다.

GridPane에 아이를 추가한다

새로운 추가하려면 Node A를들 GridPane 아이들의 레이아웃 제약의 정적 인 방법을 사용하여 설정해야합니다 GridPane 클래스를 한 후 그 아이들은에 추가 할 수 있습니다 GridPane 인스턴스입니다.

GridPane gridPane = new GridPane();

// Set the constraints: first row and first column
Label label = new Label("Example");
GridPane.setRowIndex(label, 0);
GridPane.setColumnIndex(label, 0);
// Add the child to the grid
gridpane.getChildren().add(label);

GridPane 는 다음 단계들을 결합하기위한 편리한 방법을 제공합니다 :

gridPane.add(new Button("Press me!"), 1, 0); // column=1 row=0

GridPane 클래스는 또한 자식 요소의 행 및 열 간격 을 설정하는 정적 setter 메서드를 제공합니다.

Label labelLong = new Label("Its a long text that should span several rows");
GridPane.setColumnSpan(labelLong, 2);
gridPane.add(labelLong, 0, 1);  // column=0 row=1

열과 행의 크기

기본적으로 행과 열의 크기는 콘텐츠에 맞게 조정됩니다. 행과 열 크기를 명시 적으로 제어 해야하는 경우 RowConstraintsColumnConstraints 인스턴스를 GridPane 추가 할 수 있습니다. 이 두 제약 조건을 추가하면 첫 번째 열이 100 픽셀이고 두 번째 열이 200 픽셀 길이가되도록 위의 예제 크기가 조정됩니다.

gridPane.getColumnConstraints().add(new ColumnConstraints(100));
gridPane.getColumnConstraints().add(new ColumnConstraints(200));

디폴트에서는, GridPane 사이즈가 바람직한 사이즈보다 큰 경우에도, GridPane 는 행 / 열의 크기를 바람직한 사이즈로 변경합니다. 동적 열 / 행 크기 를 지원하기 위해 두 contstaints 클래스는 min size, max size 및 preferred size라는 세 가지 속성을 제공합니다.

또한 ColumnConstraintssetHGrow 제공하고 RowConstraints성장 및 축소의 우선 순위에 영향주는 setVGrow 메소드를 제공합니다. 세 가지 미리 정의 된 우선 순위는 다음과 같습니다.

  • 평상시 . 항상 : 늘리거나 줄이기 위해 항상 늘리거나 줄이는 다른 레이아웃 영역과 함께 공간의 증가 또는 감소를 공유하십시오.
  • 우선 순위 . 중간 단계 : 늘리거나 축소 한 다른 레이아웃 영역이 항상 존재하지 않거나 레이아웃 영역이 증가되거나 감소 된 공간을 모두 흡수하지 못하면 공간의 증가 또는 감소를 공유합니다. 다른 레이아웃 영역은 가끔 있습니다.
  • Priority.NEVER : 영역에서 사용할 수있는 공간이 증가하거나 감소 할 경우 레이아웃 영역이 절대로 커지지 않습니다.
ColumnConstraints column1 = new ColumnConstraints(100, 100, 300);
column1.setHgrow(Priority.ALWAYS);

위에 정의 된 열은 최소 크기가 100 픽셀이며 최대 300 픽셀 너비에 도달 할 때까지 항상 커질 것입니다.

또한 행과 열의 크기 조정 비율 을 정의 할 수도 있습니다. 다음의 예에서는, 최초의 열이 격자 팬의 폭의 40 %를 차지하고, 두 번째 열이 60 %를 채우는 GridPane 정의합니다.

GridPane gridpane = new GridPane();
ColumnConstraints column1 = new ColumnConstraints();
column1.setPercentWidth(40);
ColumnConstraints column2 = new ColumnConstraints();
column2.setPercentWidth(60);
gridpane.getColumnConstraints().addAll(column1, column2);

격자 셀 내부의 요소 정렬

배향의 Node (S)는 사용에 의해 정의 될 수 setHalignment (가로)의 방법 ColumnConstraints 클래스 setValignment (세로)의 방법 RowConstraints 클래스.

ColumnConstraints column1 = new ColumnConstraints();
column1.setHalignment(HPos.RIGHT);

RowConstraints row1 = new RowConstraints();
row1.setValignment(VPos.CENTER);

TilePane

타일 ​​창 레이아웃은 FlowPane 레이아웃과 유사합니다. TilePane는 각 셀 또는 타일이 같은 크기 인 격자에 모든 노드를 배치합니다. 그것은 수평 또는 수직으로 깔끔한 행과 열의 노드를 정렬합니다.

    import javafx.application.Application;
    import javafx.scene.Scene;
    import javafx.scene.control.Button;
    import javafx.scene.layout.TilePane;
    import javafx.stage.Stage;
    
    public class Main extends Application {
    
        @Override
        public void start(Stage primaryStage) {
            primaryStage.setTitle("TilePane Demo");
            double width = 400;
            double height = 300;
            TilePane root = new TilePane();
            root.setStyle("-fx-background-color:blue");
            // to set horizontal and vertical gap
            root.setHgap(20);
            root.setVgap(50);
            Button bl = new Button("Buttons");
            root.getChildren().add(bl);
            Button btn = new Button("Button");
            root.getChildren().add(btn);
            Button btn1 = new Button("Button 1");
            root.getChildren().add(btn1);
            Button btn2 = new Button("Button 2");
            root.getChildren().add(btn2);
            Button btn3 = new Button("Button 3");
            root.getChildren().add(btn3);
            Button btn4 = new Button("Button 4");
            root.getChildren().add(btn4);
    
            Scene scene = new Scene(root, width, height);
            primaryStage.setScene(scene);
            primaryStage.show();
        }
    
    
        public static void main(String[] args) {
            launch(args);
        }
    }

산출

여기에 이미지 설명을 입력하십시오.

타일 ​​창을 만들려면

TilePane root = new TilePane();

setHgap () 그리고 setVgap () 메서드는 열과 열 사이에 간격을 만드는 데 사용됩니다. 우리는 또한 레이아웃을 사용하여

int columnCount = 2;
root.setPrefColumns(columnCount);

앵커 판

AnchorPane a는 내용을 특정면과의 거리에 배치 할 수있는 레이아웃입니다.

AnchorPane 에는 4 가지 설정 방법과 4 가지 방법이 있습니다. 이러한 메소드의 첫 번째 매개 변수는 자식 Node 입니다. setter의 두 번째 매개 변수는 사용할 Double 값입니다. 이 값은 주어진면에 대한 제한 조건이 없음을 나타내는 null 수 있습니다.

세터 방법 게터 방법
setBottomAnchor getBottomAnchor
setLeftAnchor getLeftAnchor
setRightAnchor getRightAnchor
setTopAnchor getTopAnchor

다음 예제에서는 측면에서 지정된 거리에 노드를 배치합니다.

center 영역은 측면에서 지정된 거리를 유지하도록 크기가 조정됩니다. 창 크기를 조정할 때의 동작을 관찰하십시오.

public static void setBackgroundColor(Region region, Color color) {
    // change to 50% opacity
    color = color.deriveColor(0, 1, 1, 0.5);
    region.setBackground(new Background(new BackgroundFill(color, CornerRadii.EMPTY, Insets.EMPTY)));
}

@Override
public void start(Stage primaryStage) {
    Region right = new Region();
    Region top = new Region();
    Region left = new Region();
    Region bottom = new Region();
    Region center = new Region();
    
    right.setPrefSize(50, 150);
    top.setPrefSize(150, 50);
    left.setPrefSize(50, 150);
    bottom.setPrefSize(150, 50);
    
    // fill with different half-transparent colors
    setBackgroundColor(right, Color.RED);
    setBackgroundColor(left, Color.LIME);
    setBackgroundColor(top, Color.BLUE);
    setBackgroundColor(bottom, Color.YELLOW);
    setBackgroundColor(center, Color.BLACK);
    
    // set distances to sides
    AnchorPane.setBottomAnchor(bottom, 50d);
    AnchorPane.setTopAnchor(top, 50d);
    AnchorPane.setLeftAnchor(left, 50d);
    AnchorPane.setRightAnchor(right, 50d);
    
    AnchorPane.setBottomAnchor(center, 50d);
    AnchorPane.setTopAnchor(center, 50d);
    AnchorPane.setLeftAnchor(center, 50d);
    AnchorPane.setRightAnchor(center, 50d);
    
    // create AnchorPane with specified children
    AnchorPane anchorPane = new AnchorPane(left, top, right, bottom, center);

    Scene scene = new Scene(anchorPane, 200, 200);
    
    primaryStage.setScene(scene);
    primaryStage.show();
} 


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow