#1. 仕様
実行すると画面1を開く.
画面1には,画面2へ遷移するボタンとウィンドウを閉じるボタンがある.
画面2には,画面1へ遷移するボタンがある.
#2. ファイル構造
Eclipseでプロジェクトを作成する.
screenTrance ・・・・・・・・・・・・・(1)
└ src ・・・・・・・・・・・・・・・・(2)
└ pkg ・・・・・・・・・・・・ ・ (3)
├ Main.java ・・・・・・・・・(4)
├ MainController.java ・・・・ (5)
├ Screen.java ・・・・・・・・(6)
├ SubController.java ・・・・・(7)
├ mainScreen.fxml ・・・・・・(8)
└ subScreen.fxml・・・・・・・(9)
(1) 作成するプロジェクト
(2) プロジェクト作成時に勝手に作られる,ソースファイル用ディレクトリ
(3) 作成するパッケージ
(4) ソースファイル(次章に記述),初期画面(画面1)起動
(5) ソースファイル(次章に記述),画面1のコントローラー
(6) ソースファイル(次章に記述),画面遷移時の画面起動
(7) ソースファイル(次章に記述),画面2のコントローラー
(8) ソースファイル(次章に記述,SceneBuilderで作成),画面1の内容
(9) ソースファイル(次章に記述,SceneBuilderで作成),画面2の内容
#3. ソースファイル
#3.1. Main.java
package pkg;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
public class Main extends Application {
@Override
public void start(Stage primaryStage) {
try {
//FXMLからのシーングラフの読み込み
FXMLLoader loader = new FXMLLoader(getClass().getResource("mainScreen.fxml"));
Parent root = loader.load();
//シーングラフのルートノードを設定したシーンの作成
Scene scene = new Scene(root, 600, 400);
//ステージへのシーンの設定
primaryStage.setScene(scene);
primaryStage.setTitle("画面1");
primaryStage.show();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
launch(args);
}
}
#3.2. MainController.java
package pkg;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.Button;
public class MainController {
@FXML
private ResourceBundle resources;
@FXML
private URL location;
@FXML
private Button nextButton;
@FXML
private Button closeButton;
@FXML
void OnclickedCloseButton(ActionEvent event) {
closeButton.getScene().getWindow().hide(); //画面を閉じる
}
@FXML
void OnclickedNextButton(ActionEvent event) {
nextButton.getScene().getWindow().hide(); //画面を閉じる
Screen screen = new Screen(); //画面を開く(メソッド呼び出し)の準備
screen.transitionScreen("subScreen.fxml", "画面2"); //画面を開く
}
@FXML
void initialize() {
assert nextButton != null : "fx:id=\"nextButton\" was not injected: check your FXML file 'screen.fxml'.";
assert closeButton != null : "fx:id=\"closeButton\" was not injected: check your FXML file 'screen.fxml'.";
}
}
#3.3. Screen.java
package pkg;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
public class Screen {
public void transitionScreen(String fxmlName, String fxmlTitle) {
try {
//FXMLからのシーングラフの読み込み
FXMLLoader loader = new FXMLLoader(getClass().getResource(fxmlName));
Parent root = loader.load();
//シーングラフのルートノードを設定したシーンの作成
Scene scene = new Scene(root, 600, 400);
//ステージへのシーンの設定
Stage stage = new Stage();
stage.setScene(scene);
stage.setTitle(fxmlTitle);
stage.show();
} catch (Exception e) {
e.printStackTrace();
}
}
}
#3.4. SubController.java
package pkg;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.Button;
public class SubController {
@FXML
private ResourceBundle resources;
@FXML
private URL location;
@FXML
private Button backButton;
@FXML
void OnclickedBackButton(ActionEvent event) {
backButton.getScene().getWindow().hide(); //画面を閉じる
Screen screen = new Screen(); //画面を開く(メソッド呼び出し)の準備
screen.transitionScreen("MainScreen.fxml", "画面1"); //画面を開く
}
@FXML
void initialize() {
assert backButton != null : "fx:id=\"backButton\" was not injected: check your FXML file 'subScreen.fxml'.";
}
}
#3.5. mainScreen.fxml
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.layout.Pane?>
<?import javafx.scene.text.Font?>
<Pane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="pkg.MainController">
<children>
<Button fx:id="nextButton" layoutX="255.0" layoutY="184.0" mnemonicParsing="false" onAction="#OnclickedNextButton" prefHeight="33.0" prefWidth="91.0" text="画面2へ" />
<Button fx:id="closeButton" layoutX="255.0" layoutY="337.0" mnemonicParsing="false" onAction="#OnclickedCloseButton" prefHeight="33.0" prefWidth="91.0" text="閉じる" />
<Label alignment="CENTER" layoutX="255.0" layoutY="23.0" prefHeight="33.0" prefWidth="91.0" text="画面1">
<font>
<Font size="20.0" />
</font>
</Label>
</children>
</Pane>
#3.6. subScreen.fxml
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.layout.Pane?>
<?import javafx.scene.text.Font?>
<Pane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="pkg.SubController">
<children>
<Button fx:id="backButton" layoutX="255.0" layoutY="184.0" mnemonicParsing="false" onAction="#OnclickedBackButton" prefHeight="33.0" prefWidth="91.0" text="画面1へ" />
<Label alignment="CENTER" layoutX="255.0" layoutY="23.0" prefHeight="33.0" prefWidth="91.0" text="画面2">
<font>
<Font size="20.0" />
</font>
</Label>
</children>
</Pane>
#4. 実際の画面の画像
##4.1. 画面1
##4.2. 画面2
Comments
Let's comment your feelings that are more than good