World Of Zono

2017年の4月3日から社会人となる男の奮闘記

JavaFX(社会人74日目)

2017-06-18 15:39:34 | 日記
こんにちは。

今日の東京は雨です。しかも中々激しめの(--〆)。昨日はかなり天気が良かったので今日も晴れるのかな~なんて思っていたらこのざまです。なので今日は家から一歩も出ていません。流石にこの天気で外出しようとするやつはただのアホだ!恐らく晩飯の時以外はこのまま部屋から出ないと思うので今日は早めの投稿をしようと思います。今日の投稿は昨日発見したJavaFXの機能について書こうと思います。

JavaFXとはJavaのGUIフレームワークの一つです。前まではSwingっていうフレームワークが主流だったそうですが、今後はJavaFXが来る!!という記事を見たので学生の頃からボチボチ勉強していました。Swingとの大きな違いは、GUIのデザイン?コントロールの設定?がfxmlというxmlに似たマークアップ言語でパパッと書けるところですね。fxmlで書くぐらいのなら前みたいにプログラム上で設計した方がいい!!と思う人もいると思いますが、SceneBuilderという開発支援ツールを使えば一瞬でFXMLのコードを記述してくれます。VisualStudioでGUIアプリケーションを作ったことがある人がいればそちらを想像していただければいいと思います。それのJavaバージョンです。

このJavaFXにはコントローラークラスというものを用意してあげる必要があります。このコントローラークラスとは、FXMLで記述されたアプリケーションの骨格を制御するクラスです。こいつが無ければGUIを制御することができません(ボタンのアクション処理など)。ここからが昨日発見した画期的な方法。(多分基本的なことだと思いますが僕は今まで知りませんでした...)このJavaFXは、FXMLファイルをロードした時、自動的にコントローラークラスのインスタンスを作ってしまうんですよね。こいつが意外と厄介でした。知らない間にインスタンスが生成されて、GUI内のデータはそのインスタンスしか扱えない。外部からGUI内のデータ取得、操作をしたい場合はどうしたらいいんだ!!とず~と考えていました。そして、その解決策を昨日発見しました。フツーにOraceleが作ったマニュアルに載っていました...。やっぱマニュアルを読むのは大事だな(--〆)。画像を使って詳しく説明したい気持ちは山々なんですが面倒くさい(´◉◞౪◟◉)なので簡単なソースコードだけ載せます。多分、僕と同じところで悩んでいる人がいれば「なるほど!!」となると思います。

Stage stage = new Stage();

try {
   FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("design.fxml"));
   fxmlLoader.setController(this);  ←この一行
   Parent root = fxmlLoader.load();
   Scene scene = new Scene(root);
   stage.setTitle("test");
   stage.setScene(scene);
   stage.show();
  } catch (Exception e) {
   e.printStackTrace();
  }


意外とJavaFXを説明しているサイトではこの部分抜けていますよね。「this」っていうのは自身のインスタンスってこと。つまり、このFXMLを制御するコントローラークラスは自身のインスタンスってことです。なので、このロード兼コントローラークラスをインスタンス化してあげれば、メンバ変数にGUIのデータを保存するだけで外部からデータを取得することができます。この方法を使えば、このインスタンス経由でFXMLで宣言したコントロールにもアクセスすることができるのでいろいろと便利ですYO!!

今日はここでおしまい!!それじゃノシ

参考
https://docs.oracle.com/javase/jp/8/javafx/api/javafx/fxml/doc-files/introduction_to_fxml.html


1728文字
ジャンル:
ウェブログ
コメント   この記事についてブログを書く
この記事をはてなブックマークに追加
« 渋谷...(社会人73日目) | トップ | 頭痛いし喉も痛い(社会人75... »

コメントを投稿


コメント利用規約に同意の上コメント投稿を行ってください。

数字4桁を入力し、投稿ボタンを押してください。

あわせて読む

トラックバック

この記事のトラックバック  Ping-URL
  • 30日以上前の記事に対するトラックバックは受け取らないよう設定されております。
  • 送信元の記事内容が半角英数のみのトラックバックは受け取らないよう設定されております。
  • このブログへのリンクがない記事からのトラックバックは受け取らないよう設定されております。
  • ※ブログ管理者のみ、編集画面で設定の変更が可能です。