質問編集履歴

1 自分なりに少し考えてみました

nuiri1343

nuiri1343 score 52

2017/12/03 19:32  投稿

javaFXで、GUIクラスではないメインクラスで計算の処理などをしたい。
###前提・実現したいこと
通常のGUIクラスでは、基本的にGUIクラスが視点になってプログラムが動いていくことと思います。
GUIクラスが画面にボタンを配置し、GUIクラスが受け取った値を、計算するメソッドを持つクラスに投げて、
計算結果をGUIクラスが受け取り、その値によって、画面の表示を変更する
といった具合に。
GUIクラスが主人公で進んでいくような感じだと思います。
しかし、そうではなく、計算するメソッドを持つ側のクラスが主人公になって進むような
プログラムの書き方はできないでしょうか?
メインラインはGUIとは全く関係のないクラスで進み、ユーザとの情報のやり取りがしたいときに
GUIクラスの応じたメソッドを呼び出すことで画面を変化させる
というように。
通常の、
```java
import javafx.application.Application;
import javafx.stage.*;
import javafx.scene.*;
import javafx.scene.control.*;
public class HelloWorld extends Application{
@Override
public void start(Stage stage){
 Label label = new Label("HelloWorld!!");
 stage.setScene(new Scene(label));
 stage.show();
}
}
```
このようなJavaFXプログラムだと、コマンドプロンプトで実行する際は
java HelloWorld
というようにすると思います。
しかしこれはGUIクラス視点です。
```java
public class Main{
public static void main(String[] args){
 
 //とりあえず初期画面表示
 //helloworldって画面いっぱいに表示しておく感じで。
 
 //画面上のどこかをクリックされたら、クリックされた座標のx座標とy座標を足す
 int z = x + y;
 //zをデータベースに登録する
 
 //次はaかbを選択してほしいので、画面にaとbという名前のボタン2つを配置させる。
 //aならばz*2を、bならばz/2をデータベースに新たに登録する
}
}
```
例えば上記のようなプログラムを作りたかったとします。
これをコマンドプロンプトで実行するときは、もちろんjava Mainです。
データベース登録処理とかは今回はどうでもいいのですが、
このような、GUI表示とは関係ない処理はMainクラスに書いて、
且つメインクラス視点で物事が進んでいくようにプログラムを書きたいです。
どうやって書いたらいいでしょうか?
アドバイスなどいただけましたら幸いです。
どうかよろしくお願いいたします
どうかよろしくお願いいたします
###追記
回答してくださった方のお話を参考に、初心者なりに色々と考えてみました。
Mainクラスと、JavaFXクラスを別スレッドにして、
例えば、ボタンが押されるのを待っている状態ならば、
JavaFXクラスではボタンを表示しておいて、ボタンが押されたら特定の変数が変化するようにしておいて、
Mainクラスでは、特定の変数が変化するまで、Whileループで待っているという状態にしたら、
目的の動作は得られるのでしょうか?
マルチスレッドにしないと、Mainクラスがwhileループに入った段階で、その処理につきっきりになるのか、GUIのボタンを押すことができなくなってしまいました。
このやり方で、達成できるのか、それと問題があるのかどうかを教えてください
  • Java

    18659 questions

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

  • JavaFX

    540 questions

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

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る