본문 바로가기

오늘의 공부 & 기록

3월 20일 javajx

 

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