読者です 読者をやめる 読者になる 読者になる

ひらおかゆみのなげやりブログ

もう、なげやりです…

JavaFXで画面解像度を調べてみる

コンピュータ

ご無沙汰してます。

これはJavaFX Advent Calendar 2015の18日目のエントリです。

昨日は@skrbさんの「黒字に黄色のクローラー」でした。明日はお誕生日枠の@aoetkさんです。本当は私も明日誕生日なのですけど、BBA言う人がいるので…

さて、今回はJavaFXのドキュメントから偶然見つけたjavafx.stage.Screenクラスを調べてみました。このクラスは、

  • 公開APIである(非公開APIにもScreenクラスがあってメソッドも違う)
  • メインディスプレイと、環境によっては他のディスプレイの情報も取れる
  • 取れる情報は、DPI、ディスプレイの幅と高さ、表示領域(タスクバーを除いた領域)の幅と高さ、など

という特徴があります。JavaFX 2.0の頃からあるようですが、その割には情報が少ないと思うのは、私だけでしょうか?

以前、JavaFXのHiDPI対応について調べたことがあり、気になったので実験してみました。ScreenクラスからDPI、ディスプレイの幅と高さ、表示領域の幅と高さの計5項目を取得してGridPaneで表示するサンプルを作成してみました。その結果が以下の通りです。

f:id:yumix_h:20151218224027p:plain

私はSurface Pro 3を使っているのですが、そうするとディスプレイの幅と高さは2160×1440ピクセルとなっていいはず。はて…

ちなみに、上記の値を1.5倍(150%)すると、2160×1440ピクセルになります。Surface Pro 3はデフォルトで拡大率150%でした。実行環境はJava 8 Update 66だったので、HiDPI対応で拡大率が考慮されていると考えて良さそうです。

念のため、Java 8 Update 51を再度インストールして、HiDPI非対応の場合も試してみました。

f:id:yumix_h:20151218224948p:plain

Surface Pro 3の実際の幅と高さになりました。あと、細かいことですがウィンドウのレイアウトも少し変わりました(余白がいくらか小さくなっている)。

この結果から、Java 8 Update 60で本当にDevice Independent Pixel(DIP)対応が(拡大率125%に対応していないとは言え)入ったことが分かります。

今年はWebViewで遊んでみようと思ったら、思わぬところで脱線してしまいました修論やり直しの件は触れるな)。でも、WebViewはちょうど1年前にやったからいいよね?