ログインフォームでIDとパスワードを入力してログインした時に,ログイン時の画面(Login.fxml)から別の画面(Menu.fxml)へ遷移します.ウィンドウは,可能であればずっと1つ(新規ウィンドウをいちいち開かない)にしたいです.
この時の遷移の仕方がわかりません.
ログインに成功した場合のif文に遷移する命令を記述するだけでいいのか,それとも遷移先のコントローラーにも何らかの命令(遷移元の情報など)を記述する必要があるのでしょうか?
あと,ログインできるのならばログアウトもできなければならないので,上記とは逆の遷移の場合も同じような記述になるのでしょうか?
あと,メソッドがあるような場合は,メソッドの記述形式や例を挙げてくれるとありがたいです.
ファイル構造
testパッケージ直下に以下のファイル
Login.java
LoginController.java
MenuController.java
Login.fxml
Menu.fxml
(Login.javaのようにMenu.javaも作ったほうがいいんでしょうか・・・?)
プログラムソース(Login.java)
Java
1package testSystem; 2import javafx.application.Application; 3import javafx.fxml.FXMLLoader; 4import javafx.scene.Parent; 5import javafx.scene.Scene; 6import javafx.stage.Stage; 7 8public class Login extends Application { 9 @Override 10 public void start(Stage primaryStage) { 11 try { 12 //FXMLからのシーングラフの読み込み 13 FXMLLoader loader = new FXMLLoader(getClass().getResource("Login.fxml")); 14 Parent root = loader.load(); 15 16 //シーングラフのルートノードを設定したシーンの作成 17 Scene scene = new Scene(root,600,400); 18 //ステージへのシーンの設定 19 primaryStage.setScene(scene); 20 primaryStage.setTitle("ログイン画面"); 21 primaryStage.show(); 22 } catch(Exception e) { 23 e.printStackTrace(); 24 } 25 } 26 public static void main(String[] args) { 27 launch(args); 28 } 29} 30
プログラムソース(LoginController.java)
Java
1package testSystem; 2 3import java.net.URL; 4import java.util.ResourceBundle; 5 6import javafx.beans.binding.BooleanBinding; 7import javafx.event.ActionEvent; 8import javafx.fxml.FXML; 9import javafx.scene.control.Button; 10import javafx.scene.control.Hyperlink; 11import javafx.scene.control.Label; 12import javafx.scene.control.PasswordField; 13import javafx.scene.control.TextField; 14 15public class LoginController { 16 17 @FXML 18 private ResourceBundle resources; 19 20 @FXML 21 private URL location; 22 23 @FXML 24 private TextField id; 25 26 @FXML 27 private PasswordField passwd; 28 29 @FXML 30 private Button loginButton; 31 32 @FXML 33 private Hyperlink createLink; 34 35 @FXML 36 private Label warning; 37 38 @FXML 39 void initialize() { 40 assert id != null : "fx:id=\"id\" was not injected: check your FXML file 'Login.fxml'."; 41 assert passwd != null : "fx:id=\"passwd\" was not injected: check your FXML file 'Login.fxml'."; 42 assert loginButton != null : "fx:id=\"loginButton\" was not injected: check your FXML file 'Login.fxml'."; 43 assert createLink != null : "fx:id=\"createLink\" was not injected: check your FXML file 'Login.fxml'."; 44 assert warning != null : "fx:id=\"warning\" was not injected: check your FXML file 'Login.fxml'."; 45 BooleanBinding idIsEmpty = id.textProperty().isEmpty(); 46 BooleanBinding passwdIsEmpty = passwd.textProperty().isEmpty(); 47 loginButton.disableProperty().bind(idIsEmpty.or(passwdIsEmpty)); 48 } 49 50 @FXML 51 public void OnClick(ActionEvent event) { 52 String idNumber = id.getText(); 53 String password = passwd.getText(); 54 55 if(idNumber.equals("test")&&password.equals("test")) { 56 System.out.print("id:"+idNumber+" pass:"+password+" → "); 57 System.out.println("成功"); 58 id.setText(""); 59 passwd.setText(""); 60 warning.setText("OK");//確認用,通常はここで画面遷移 61 } 62 else { 63 System.out.print("id:"+idNumber+" pass:"+password+" → "); 64 System.out.println("失敗"); 65 id.setText(""); 66 passwd.setText(""); 67 warning.setText("※正しいアカウント情報を入力してください"); 68 } 69 } 70} 71
プログラムソース(MenuController.java)
まあ,テスト用なので遷移先の画面はまだ作っていません.
ただ,ログイン状態からログアウトもできるようにしたいので,こちらからログイン画面(Login.fxml)へ遷移できるようにもしたいです.
Java
1package testSystem; 2 3import java.net.URL; 4import java.util.ResourceBundle; 5 6import javafx.fxml.FXML; 7 8public class MenuController { 9 10 @FXML 11 private ResourceBundle resources; 12 13 @FXML 14 private URL location; 15 16 @FXML 17 void initialize() { 18 } 19} 20 21
回答1件
あなたの回答
tips
プレビュー