今回は、起動しているPCの画面サイズを取得する実装を行います。なかなかJavaFXならではの実装にたどり着きませんが、必要な実装ですのでやります。
画面サイズの取得
画面サイズを取得する前に、予備知識として記載します。
Javaの画面関連のパッケージはjava.awtというものですが、OSを起動した時に画面を表示するのに使用している(グラフィック担当)サーバーがあり、それをXサーバー(X-Server)と言います。X-Window Systemのことです、常駐アプリで「表示してください」というリクエストに応えるので「サーバー」です。
java.awtはX-Serverに依存
以前、CUIでラズパイを起動してからJavaFXで画面を表示しようと試みたところJavaFXはGUIモードでないと起動できないことを知りました。。。
つまりX-Serverが動かないとJavaFXも動かない・・・ということです。
画面サイズを取得する
画面サイズを取得するのに「java.awt」を使用します。
そして、実際に使用するクラスはGraphicsEnvironmentです。
テスト駆動なので。。。
まずは、テストケースから入ります。
シンプルな内容なのでテストもシンプルです。
<仕様>
画面のサイズを取得しMainクラスのフィールドにセットする
このメソッドを使用します。
これだけです。
なので作成するテストケースは下のようになります。
/** 画面サイズの取得テスト */ @Test public void testInitWindowInfo() { // privateメソッドの呼び出し try { // メソッドの取得 Method mes = target.getClass().getDeclaredMethod("initWindowInfo"); // メソッドのアクセス範囲をpublicに変更 mes.setAccessible(true); // メソッドの実行(引数も返り値もない mes.invoke(target); } catch (NoSuchMethodException | SecurityException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InvocationTargetException e) { // TODO Auto-generated catch block e.printStackTrace(); } // テストの起動確認 assertFalse(target.getWindowHeight() == 0); assertFalse(target.getWindowWidth() == 0); }
そして、テストケースを作成する最中に実装も終わっていました。
/** コンストラクタ */ public Main() { prop = new Properties(); windowWidth = 0; windowHeight = 0; }
こんな感じです。
次回は、JavaFXの画面作成に着手したいと思います。
でわでわ。。。