1. BorderPane
상,하, 좌, 우, 중앙에 컨트롤을 배치하는 레이아웃
package layouts;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;
public class BorderPane01 extends Application{
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
Button[] buttons = new Button[5];
String[] strings = {"TOP", "LEFT", "CENTER", "RIGHT", "BOTTOM"};
for(int i = 0; i < buttons.length; i++) {
buttons[i] = new Button(strings[i]);
}
buttons[0].setPrefSize(400, 100); // buttons[0]의 size 가로 400, 세로 100
buttons[1].setPrefHeight(100); // buttons[1]의 height 높이 100
buttons[4].setPrefWidth(400); // buttons[4]의 width 넓이 400
BorderPane border = new BorderPane(); // borderPane 생성
border.setTop(buttons[0]); // border top buttons[0] 배치
border.setLeft(buttons[1]); // border left buttons[1] 배치
border.setCenter(buttons[2]); // border center buttons[2] 배치
border.setRight(buttons[3]); // border right buttons[3] 배치
border.setBottom(buttons[4]); // border bottom buttons[4] 배치
primaryStage.setScene(new Scene(border, 400, 300)); // 윈도우창 scene에 border배치 가로 400, 세로 300 사이즈
primaryStage.setTitle("BoderPaneEx"); // 제목
primaryStage.show();
}
}
2. FlowPane
행으로 컨트롤을 배치하고, 공간이 부족하면 새 행에 배치하는 컨테이너
package layouts;
import java.util.ArrayList;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.FlowPane;
import javafx.stage.Stage;
public class FlowPane01 extends Application{
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
Button button1 = new Button("버튼1");
Button button2 = new Button("버튼2");
Button button3 = new Button("버튼3");
Button button4 = new Button("버튼4");
Button button5 = new Button("버튼5");
Button button6 = new Button("버튼6");
// FlowPane: 행 배치 구조, Scene의 사이즈에 맞춰서 자동으로 다음 행에 배치됨
FlowPane flow = new FlowPane();
flow.getChildren().add(button1);
flow.getChildren().addAll(button2, button3, button4, button5);
flow.getChildren().add(button6);
ArrayList<Button> buttons = new ArrayList<>();
for(int i = 0; i < 15; i++) {
buttons.add(new Button("버튼" +(i+7)));
flow.getChildren().add(buttons.get(i));
}
primaryStage.setScene(new Scene(flow, 500, 50));
primaryStage.setTitle("FlowPaneEx");
primaryStage.show();
}
}
3. GridPane
그리드로 배치하되 셀의 크기가 고정적이지 않은 레이아웃
package layouts;
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.PasswordField;
import javafx.scene.control.TextField;
import javafx.scene.layout.FlowPane;
import javafx.scene.layout.GridPane;
import javafx.stage.Stage;
public class GridPane02 extends Application{
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
Label label1 = new Label("아이디");
Label label2 = new Label("비밀번호");
TextField id = new TextField();
PasswordField pw = new PasswordField();
GridPane.setConstraints(label1, 0, 0); // 0열 0행
GridPane.setConstraints(label2, 0, 1); // 0열 1행
GridPane.setConstraints(id, 1, 0); // 1열 0행
GridPane.setConstraints(pw, 1, 1); // 1열 1행
GridPane grid = new GridPane();
grid.getChildren().addAll(id, pw, label1, label2);
grid.setVgap(20); // 수직 gap
grid.setHgap(40); // 수평 gap
// new Insets(TOP, RIGHT, BOTTOM, LEFT)
grid.setPadding(new Insets(50, 0, 0, 30));
FlowPane flow = new FlowPane();
flow.getChildren().add(new Button("0열 2행 병합한 자리에 생성한 버튼")); // "0열 2행 병합"이 입력된 버튼
flow.setPrefSize(250, 20); // 버튼 사이즈
flow.setStyle("-fx-background-color: #6EE3F7"); // 배경 색상
flow.setAlignment(Pos.CENTER); // 정렬
grid.add(flow, 0, 2, 2, 1); // 병합
Scene scene = new Scene(grid, 300, 200); // 사이즈
primaryStage.setTitle("GridPaneEx2"); // 제목
primaryStage.setScene(scene);
primaryStage.show(); // 화면 출력
}
}
4. AnchorPane
좌표를 이용해서 좌상단(0,0)을 기준으로 컨트롤 배치
package layouts;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.AnchorPane;
import javafx.stage.Stage;
public class AnchorPane01 extends Application{
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
Button[] buttons = new Button[4];
String[] strings = {"TOP", "LEFT", "RIGHT", "BOTTOM"};
for(int i = 0; i < buttons.length; i++) {
buttons[i] = new Button(strings[i]);
}
AnchorPane.setTopAnchor(buttons[0], 10.0);
AnchorPane.setLeftAnchor(buttons[1], 50.0);
AnchorPane.setRightAnchor(buttons[2], 80.0);
AnchorPane.setBottomAnchor(buttons[3], 10.0);
AnchorPane anchor = new AnchorPane();
anchor.getChildren().addAll(buttons[0], buttons[1], buttons[2], buttons[3]);
Scene scene = new Scene(anchor, 400, 300); // 윈도우창 scene에 anchor배치 가로 400, 세로 300 사이즈
primaryStage.setTitle("AnchorPane"); // 제목
primaryStage.setScene(scene);
primaryStage.show();
}
}
5. StackPane
컨트롤을 겹쳐서 배치하는 레이아웃
package layouts;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.StackPane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;
public class StackPane01 extends Application{
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
Rectangle rec = new Rectangle(100, 100, Color.WHITE);
Label label = new Label("사각형 안 텍스트");
StackPane stack = new StackPane();
stack.getChildren().addAll(rec, label);
primaryStage.setTitle("StackPaneEx1");
primaryStage.setScene(new Scene(stack, 400, 300));
primaryStage.show();
}
}
package layouts;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.image.ImageView;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class StackPane02 extends Application{
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
Label label = new Label("스마일 이미지");
BorderPane border = new BorderPane();
border.setBottom(label);
ImageView iv = new ImageView("/img/smilerere.png");
StackPane stack = new StackPane();
stack.getChildren().addAll(iv, border);
primaryStage.setTitle("StackPane Ex2");
primaryStage.setScene(new Scene(stack, 300, 200));
primaryStage.show();
}
}
6. HBox, VBox
수평과 수직으로 컨트롤을 배치하는 컨테이너 자식 컨트롤의 크기를 재조정한다.
HBox: 컨트롤의 높이를 확장, 폭은 유지, 수평으로 컨트롤 배치하는 컨테이너
package layouts;
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Pane;
import javafx.stage.Stage;
public class HBox01 extends Application{
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
Pane p1 = new Pane(); // 아무것도 없는 레이아웃, 기능이 없음
Pane p2 = new Pane();
Pane p3 = new Pane();
p1.setMaxHeight(100);
p2.setMaxHeight(100);
p3.setMaxHeight(100);
//Preferred
p1.setPrefWidth(120);
p2.setPrefWidth(120);
p3.setPrefWidth(120);
p1.setStyle("-fx-background-color: green");
p2.setStyle("-fx-background-color: red");
p3.setStyle("-fx-background-color: black");
HBox box = new HBox();
box.getChildren().addAll(p1, p2, p3);
box.setSpacing(10); // 간격
// box.setPadding(new Insets(40));
box.setAlignment(Pos.CENTER);
primaryStage.setScene(new Scene(box, 600, 300));
primaryStage.setTitle("HBoxEx");
primaryStage.show();
}
}
VBox: 폭을 확장, 높이는 유지, 수직으로 컨트롤 배치하는 컨테이너
package layouts;
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.Pane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
public class VBox01 extends Application{
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
Pane p1 = new Pane(); // 아무것도 없는 레이아웃, 기능이 없음
Pane p2 = new Pane();
Pane p3 = new Pane();
p1.setMaxWidth(100);
p2.setMaxWidth(100);
p3.setMaxWidth(100);
//Preferred
p1.setPrefHeight(120);
p2.setPrefHeight(120);
p3.setPrefHeight(120);
p1.setStyle("-fx-background-color: green");
p2.setStyle("-fx-background-color: red");
p3.setStyle("-fx-background-color: black");
VBox box = new VBox();
box.getChildren().addAll(p1, p2, p3);
box.setSpacing(10); // 간격
box.setPadding(new Insets(40));
box.setAlignment(Pos.CENTER);
primaryStage.setScene(new Scene(box, 600, 300));
primaryStage.setTitle("VBoxEx");
primaryStage.show();
}
}
'오늘의 공부 & 기록' 카테고리의 다른 글
3월 22일 javaFx (0) | 2023.03.22 |
---|---|
3월 21일 javafx (0) | 2023.03.21 |
3월 17일 javaFX (0) | 2023.03.17 |
3월 16일 JDBC (0) | 2023.03.16 |
이클립스 프로젝트 인텔리제이로 가져올 때 설정 (0) | 2023.03.15 |