본문 바로가기
GUI( JavaFX Scene Builder )/Layout

GUI (2)

by pms93 2022. 8. 11.
package application;

import javafx.application.Application;
import javafx.geometry.Insets;
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 Gui2 extends Application {

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

	@Override
	public void start(Stage primaryStage) throws Exception {
		Label labelA = new Label("Hello world");
		
		// setX, setY를 통해 최초 실행시에 원하는 위치에 Screen을 띄울 수 있다.
		primaryStage.setX(1000);
		primaryStage.setY(2000);
		primaryStage.setScene(new Scene(labelA, 200, 200));
		primaryStage.show();
		
		
		// FlowPane
		// layout의 container
		// 행(가로)로 label을 배치하며 공간이 부족하면 자동으로 새로운 행에 다음 label을 배치한다.
		// 사용자의 창 크기 변경에 따라 유동적으로 나열해준다.
		FlowPane fp = new FlowPane();
		Button button;
		
		for (int i = 0; i < 15; i++) {
			button = new Button("버튼" + (i + 1));
			// FlowPane에 button을 add해야 하며
			// 이와 같이 반복문의 형태가 아닌 경우 및 여러개의 label이 존재 할 시에 addAll 매서드 사용
			fp.getChildren().add(button);
		}
		
		fp.setHgap(10); // 각 label간의 수평간격 설정
		fp.setVgap(10); // 각 label간의 수직간격 설정
		
		primaryStage.setScene(new Scene(fp, 400, 400));
		primaryStage.show();
		
		Label id = new Label("아이디"), pw = new Label("비밀번호");
		
		// text를 입력받을 수 있는 textfield 클래스
		TextField inputId = new TextField();
		// password를 입력받을 수 있는 passwordfield 클래스
		// 여타 사이트처럼 비밀번호 입력시 '●●●'으로 보이게 해준다.
		PasswordField inputPw = new PasswordField();
		
		
		// .setconstraints()메서드는 static 메서드로 인스턴스 없이 바로 사용 가능하다.
		// .setConstraints(라벨 or 입력field, 행, 열)
		GridPane.setConstraints(id, 0, 0);
		GridPane.setConstraints(pw, 0, 1);
		GridPane.setConstraints(inputId, 1, 0);
		GridPane.setConstraints(inputPw, 1, 1);
		GridPane grid = new GridPane();
		// gridPane container를 사용하여 label, 입력field 세팅
		grid.getChildren().addAll(id, pw, inputId, inputPw);
		
		// Padding
		// - 특정 label혹은 입력field등 screen에 배치할 시에 할당받는 공간이 있다.(scene을 통해 설정하는 값 혹은 default값의 크기만큼)
		//   그 공간 내에서의 간격(배치)을 설정할 수 있는 메서드이며 인자값에 Insets를 인스턴스 하여 사용 가능하다.
		//   setPadding(new Insets(상, 우, 하, 좌));
		grid.setPadding(new Insets(50, 0, 0, 80));
		
		primaryStage.setScene(new Scene(grid, 400, 400));
		primaryStage.show();
	}
}

'GUI( JavaFX Scene Builder ) > Layout' 카테고리의 다른 글

VBox  (0) 2022.08.15
HBox  (0) 2022.08.15
AnchorPane  (0) 2022.08.15
GUI (예제) (BorderPane, FlowPane, GridPane)  (0) 2022.08.15
GUI (1)  (0) 2022.08.11