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();
}
}