質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaFX

JavaFXとは、Java仮想マシン上で動作するリッチインターネットアプリケーション (RIA) のGUIライブラリです。Swingとは異なり、FXMLと呼ばれる XMLとCSSを併用してデザインを記述します。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

1回答

6980閲覧

JavafxでのGUI作成にて、画面遷移の方法

javasyosinnsya1

総合スコア26

JavaFX

JavaFXとは、Java仮想マシン上で動作するリッチインターネットアプリケーション (RIA) のGUIライブラリです。Swingとは異なり、FXMLと呼ばれる XMLとCSSを併用してデザインを記述します。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2017/06/06 02:39

編集2017/06/06 06:28

JavafxのGUIで五目並べのアプリケーションを作っているのですが
タイトル画面からゲーム画面に遷移する方法が分かりません。
何か良い方法がありましたら教えてください。
よろしくお願い致します。
(なお、タイトル画面、ゲーム画面共にまだまだ未完成の状態となっております)

java

1コード(タイトル画面) 2import javafx.application.Application; 3import javafx.event.ActionEvent; 4import javafx.event.EventHandler; 5import javafx.scene.Scene; 6import javafx.scene.control.Alert; 7import javafx.scene.control.Button; 8import javafx.scene.control.Label; 9import javafx.scene.layout.BorderPane; 10import javafx.stage.Stage; 11 12public class samaple extends Application{ 13 14 private Label lb; 15 private Button bt1, bt2; 16 17 public static void main(String[] args) 18 { 19 launch(args); 20 } 21 22 @Override 23 public void start(Stage stage) throws Exception { 24 // TODO 自動生成されたメソッド・スタブ 25 26 lb = new Label(" 五目並べ"); 27 bt1 = new Button("ルール説明"); 28 bt2 = new Button("スタート"); 29 30 BorderPane bp = new BorderPane(); 31 32 bp.setTop(lb); 33 bp.setBottom(bt1); 34 bp.setCenter(bt2); 35 36 bt1.setOnAction(new SampleEventHandler()); 37 38 Scene sc = new Scene(bp, 300, 200); 39 40 stage.setScene(sc); 41 stage.setTitle("五目並べ"); 42 stage.show(); 43 44 45 } 46 47 class SampleEventHandler implements 48 EventHandler<ActionEvent> 49 { 50 public void handle(ActionEvent e) 51 { 52 Alert al = new Alert(Alert.AlertType.INFORMATION); 53 al.setTitle("ルール説明"); 54 al.getDialogPane() 55 .setHeaderText(" ルール説明\n1:五目並べのルール"); 56 al.show(); 57 58} 59} 60 61コード(ゲーム画面) 62import javafx.application.Application; 63import javafx.scene.Scene; 64import javafx.scene.control.Button; 65import javafx.scene.layout.GridPane; 66import javafx.stage.Stage; 67 68public class sample2 extends Application 69{ 70 private Button[][] bt = new Button[5][5]; 71 72 public static void main(String[] args) 73 { 74 launch(args); 75 } 76 @Override 77 public void start(Stage stage) throws Exception 78 { 79 for(int m=0; m<bt.length; m++){ 80 for(int c=0; c<bt[m].length; c++){ 81 bt[m][c] = new Button(Integer.toString(c) + Integer.toString(m)); 82 } 83 } 84 GridPane gp = new GridPane(); 85 86 for(int m=0; m<bt.length; m++){ 87 for(int c=0; c<bt.length; c++){ 88 gp.add(bt[m][c], m, c); 89 } 90 } 91 92 Scene sc = new Scene(gp, 248, 200); 93 stage.setScene(sc); 94 stage.setTitle("五目並べ"); 95 stage.show(); 96 } 97}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2017/06/06 02:45

何か作っているものがあるのであればそのソースコードや画面情報をご提示ください。これだけでは判断材料が何もありません。調べた物事があるのであればそちらも併せてご提示願います。
guest

回答1

0

ベストアンサー

いくつものApplicationクラスを一つのアプリケーションに定義して動かしたことはないのですが、多分そんな方法はJavaFXランタイムを混乱させる気がするので止した方が無難だと思います。

さて・・・

JavaFXではシーングラフの構造などあらゆるものがJavaFXプロパティーとして提供されており、大抵のものは更新可能です。例えばSceneにはシーングラフのルートノードを表すrootプロパティーがあります。これをそっくり入れ替える処理を書けばシーン上の表示内容が入れ替わります。

java

1// importは省略 2public class Test3 extends Application { 3 @Override 4 public void start(Stage stage) throws Exception { 5 stage.setTitle("title"); 6 7 // rootノード(1) 8 Button button1 = new Button("TO GAME"); 9 Pane root1 = new Pane(button1); 10 root1.setStyle("-fx-background-color: blue;"); 11 12 // rootノード(2) 13 Button button2 = new Button("TO MAIN"); 14 Pane root2 = new Pane(button2); 15 root2.setStyle("-fx-background-color: red;"); 16 17 Scene scene = new Scene(root1, 200, 200); 18 stage.setScene(scene); 19 stage.show(); 20 21 button1.setOnAction(ev -> scene.setRoot(root2)); 22 button2.setOnAction(ev -> scene.setRoot(root1)); 23 } 24}

またstageのsceneプロパティーも変更可能なのでSceneレベルからごっそり取り替えることも可能です。

ステージ(=ウィンドウ)・シーンの大きさなどが同じ場合はrootノードのみ取り替えた方が素直だと思います。大きさが違うなら、シーンを取り換えるとともにstageの位置(あるいは全画面モードなど)も切り替えることになるでしょう。

なお上記に示したコードは単純にrootノードを切り替えることができることを示したに過ぎません。実際はroot1、root2に対するコントローラークラスを別途定義したりすることになるかと思いますが、その詳細はここでは長くなるので省略します。

投稿2017/06/06 08:56

KSwordOfHaste

総合スコア18394

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問