이번에는 로그인 기능을 만들어 보겠습니다.
이번 포스트의 핵심은 fxml 파일을 두개 사용하는 것입니다. 즉, 이번 포스트를 통해서 여러개의 fxml 파일을 사용하는 방법을 알게 될 수 있습니다.
자료구조는 다음과 같습니다.
Main.java
MainController.java
Login.fxml
Main.fxml
1. Main.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | package application; import javafx.application.Application; import javafx.fxml.FXMLLoader; import javafx.stage.Stage; import javafx.scene.Parent; import javafx.scene.Scene; import javafx.scene.layout.BorderPane; public class Main extends Application { @Override public void start(Stage primaryStage) { try { Parent root = FXMLLoader.load(getClass().getResource("/application/Login.fxml")); Scene scene = new Scene(root); scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm()); primaryStage.setScene(scene); primaryStage.show(); } catch(Exception e) { e.printStackTrace(); } } public static void main(String[] args) { launch(args); } } | cs |
이번에는 첫번째 scene 이 Login.fxml 이 되도록 코딩하였습니다.
처음 앱을 실행하면 Login.fxml scene 이 표시되는 것입니다.
2. Login.fxml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | <?xml version="1.0" encoding="UTF-8"?> <?import javafx.scene.text.*?> <?import javafx.scene.control.*?> <?import java.lang.*?> <?import javafx.scene.layout.*?> <?import javafx.scene.layout.AnchorPane?> <AnchorPane prefHeight="300.0" prefWidth="300.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="application.MainController"> <children> <Button layoutX="114.0" layoutY="204.0" mnemonicParsing="false" onAction="#Login" text="Login"> <font> <Font size="18.0" /> </font> </Button> <TextField fx:id="txtUserName" layoutX="48.0" layoutY="105.0" promptText="UserName"> <font> <Font size="18.0" /> </font> </TextField> <PasswordField fx:id="txtPassword" layoutX="48.0" layoutY="150.0" promptText="Password"> <font> <Font size="18.0" /> </font> </PasswordField> <Label fx:id="lblStatus" alignment="CENTER" layoutY="35.0" prefHeight="19.0" prefWidth="300.0" text="Status" textFill="#d31c1c"> <font> <Font size="18.0" /> </font> </Label> </children> </AnchorPane> | cs |
컨트롤러는 MainController 에 연결합니다. 로그인 버튼에 On Action 을 설정 합니다.
3. MainController.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | package application; import java.io.IOException; import javafx.event.ActionEvent; import javafx.fxml.FXML; import javafx.fxml.FXMLLoader; import javafx.scene.Parent; import javafx.scene.Scene; import javafx.scene.control.Label; import javafx.scene.control.TextField; import javafx.stage.Stage; public class MainController { @FXML private Label lblStatus; @FXML private TextField txtUserName; @FXML private TextField txtPassword; public void Login(ActionEvent event) throws Exception{ if(txtUserName.getText().equals("user") && txtPassword.getText().equals("pass")){ lblStatus.setText("Login Success"); Stage primaryStage = new Stage(); Parent root = FXMLLoader.load(getClass().getResource("/application/Main.fxml")); Scene scene = new Scene(root); scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm()); primaryStage.setScene(scene); primaryStage.show(); }else{ lblStatus.setText("Login Failed"); } } } | cs |
Login 메소드를 확인 하시면 userName 과 password 가 일치하면 새로운 stage 가 생성되도록 코딩했습니다.
stage 는 자바에서 frame 개념과 같다고 보시면 됩니다.
scene 는 자바에서 component 개념과 같다고 보시면 될겁니다. 아마도 ㅋㅋㅋ
즉, 위 코딩을 해석하면 입력된 값이 user 와 pass 인 경우 새로운 창이 생성되는 것이고, 그렇지 않으면 로그인 실패라는 문구가 라벨에 표시되는 것입니다.
4. Main.fxml
이건 올릴 필요가 거의 없지만, 일단 포스트 자체에 백업을 해둔다는 개념도 있기때문에 업로드 해놨습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <?xml version="1.0" encoding="UTF-8"?> <?import javafx.scene.text.*?> <?import javafx.scene.control.*?> <?import java.lang.*?> <?import javafx.scene.layout.*?> <?import javafx.scene.layout.AnchorPane?> <AnchorPane prefHeight="300.0" prefWidth="300.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8" fx:controller="application.MainController"> <children> <Label layoutX="88.0" layoutY="98.0" text="Main Windows"> <font> <Font size="18.0" /> </font> </Label> </children> </AnchorPane> | cs |
어플리케이션 실행 화면
'Java > JavaFx' 카테고리의 다른 글
JavaFx 12. ComboBox 사용하기 (0) | 2016.08.17 |
---|---|
JavaFx 11. ImageView 사용하기 (0) | 2016.08.17 |
JavaFx 08. 계산기 만들기 (2) | 2016.08.17 |
JavaFx 07. CSS 스타일 하기 (0) | 2016.08.12 |
JavaFx 06. Scene Builder 로 events 설정하기 (0) | 2016.08.12 |