###前提・実現したいこと
javaFXにて、GUIプログラムをつくりたいのですが、
他の普通のコントロールクラスから、こういう画面を表示してくれという指示が来たら
それを受けたApplicationを継承したクラスが表示する
という流れのプログラムを作りたいです。
例えば、HelloWorldいうLabelを表示するプログラムを、メインクラスが表示しろと指示したら表示するようにしたいです。
どうすればいいのでしょうか?
###該当のソースコード
これがGUI表示クラスです。
java
1import javafx.application.Application; 2import javafx.stage.Stage; 3import javafx.scene.Scene; 4import javafx.scene.control.*; 5import javafx.scene.text.*; 6 7 8public class HelloWorld extends Application{ 9 10 private Stage stage; 11 12 @Override 13 public void start(Stage pStage){ 14 stage = newStage; 15 stage.setTitle("HelloWorld!!"); 16 stage.setWidth(540); 17 stage.setHeight(220); 18 19 Label label = new Label("Hello, JavaFX!!"); 20 label.setFont(new Font(80)); 21 stage.setScene(new Scene(label)); 22 stage.show(); 23 } 24}
これがメインクラスです。
コマンドプロンプトでは、java Mainと実行したいです。
java
1public class Main{ 2 3 public static void main(String[] args){ 4 5 String s = new java.util.Scanner(System.in).nextLine(); 6 7 if(s.equals("a")){ 8 //helloworldという画面を表示する 9 //ここに上記のGUIクラスを呼び出すメソッド?とかを書けばいいのでしょうか・・・? 10 }else{ 11 System.out.println("HelloWorld!!"); 12 } 13 } 14}
###補足情報(言語/FW/ツール等のバージョンなど)
アドバイスでもかまいませんのでよろしくお願いいたします。
アプリケーションのライフサイクルをもう少し詳しくきかせてほしいです。メインクラスが一旦JavaFXアプリケーションを起動したら、メインクラスはそれ以上なにもせずにあとはJavaFXに全ての制御をまかせてよいのですか?
ありがとうございます。いえ、例えば、ハローワールドではなくボタンを出現させて、選んでもらい、その後の処理はメインクラスで行ったり、その後の計算結果を画面で出したりなど。あくまでもメインなのはメインクラスでGUIクラスは画面表示に専念する感じで行きたいです。
そうでしたか。そのようなことをやったことがないので大丈夫かどうか自信ないです。ちなみに「ボタンを表示」が必ず行われるならモジュールの階層を逆転して設計した方が自然と思います。つまりあくまでJavaFXをメインに据えた方が設計しやすいと思います。
メインクラスをメインに据えることはできないのでしょうか?
GUIを出した後に何をしたいかによると思います。ユーザーとのインタラクションは画面が出ているのですからGUI側で行うのが自然に思えます。であればmainスレッドではUI以外のことをするわけですが、何をするとお考えでしょうか?そのあたりをもう少し具体的に質問に書いていただけるとよいと思います。プログラムの流れを簡単に表現する感じです。
