web-dev-qa-db-ja.com

JavaFX 8 HiDPIサポート

Arch Linuxの4k画面で JavaFX Hello Worldの例 を試してみましたが、残念ながらGUIはスケーリングしません。

ドキュメント は言う

Hi-DPIサポート。 JavaFX 8はHi-DPIディスプレイをサポートするようになりました。

では、どうすればアプリケーションのdpiを認識させることができますか?

23
tryzor

さまざまなデバイスでのHi-DPIサポート

Retinaディスプレイを備えたOS X Macの場合、「正しく動作する」はずです。JavaFXはHi-DPI Macを認識しており、UIを適切にスケーリングします。 VBoxの間隔を8に設定すると、それはデバイスに依存しない単位になります。非網膜ディスプレイMacでは8ピクセル、解像度が2倍の網膜ディスプレイでは、間隔は16ピクセルになります。 Retinaディスプレイには2倍のDPIと非Retinaディスプレイの2倍の解像度があるので、デバイスに関係なく、空間の物理的な画面測定は同じになります。

WindowsおよびLinuxデバイスの場合、JavaFX 8u20は現在デフォルトではそのようなデバイスの任意のDPI解像度を計算して適切にスケーリングしないため、満足のいく結果が得られない可能性があります。あなたができることは、ほとんどの測定を csをem単位として (シーンのルートのデフォルトフォントのポイントサイズに基づく)および fxmlの場合も同様 で実行することです。次に、画面のDPI解像度のクエリから決定した内容に応じて、シーンルートのデフォルトフォントのポイントサイズを適切に設定します。詳細とサンプルコードについては、この回答の説明を参照してください: javafx自動サイズ変更とボタンのパディング

Gnome固有

Gnome 3には スケーリング係数の設定 があり、次のコマンドで制御できます。

gsettings set org.gnome.desktop.interface scaling-factor 2

ユーザーのgnomeプロファイル設定を読み取ることでこのスケーリング係数をクエリし、これを画面DPIのクエリと組み合わせて使用​​して、適切なスケーリング係数が上記の手法を使用してスケーリングを適用する方法を調べることができます。

個人的な逸話-数日前にHi-DPIディスプレイでGnome 3スケーリング(CentOS 7と最近のFedoraリリース)を使用してみたところ、Linuxで実行されているアプリケーション全体でのHi-DPIの全体的なサポートがかなりむら。確かに、CentOS 6からサポートを大幅に改善しましたが、ウィンドウツールキット、標準アプリ、サードパーティアプリで高品質のHi-DPIサポートを実現する方法はまだありました。このため、HiDPI Gnomeデスクトップを実行することは、まだまだ最先端ではないことだと私は信じています。この状況は、時間とともに変化すると確信しています。

ビットマップ画像

JavaFXチームリーダーから Hi-DPIに関するブログエントリ

Appleのアプリケーション(網膜ディスプレイを備えたiPhoneとiPadで始まる)では、この問題の解決策は、アプリケーション開発者が各画像アセットに対して1つではなく2つの画像を提供することです。たとえば、スプラッシュスクリーンには、通常の解像度と2倍の解像度の2つの画像が提供されます。ファイルには同じ名前が付けられますが、2xのファイルにはいくつかの規則に従って名前が付けられ、実行時にプラットフォームがRetinaの2xバージョンをシーンの背後で検索します。このようにして、アプリケーションは「fooImage.png」と言いますが、網膜ディスプレイを備えたマシン上では「[email protected]」が代わりに検索されます。

Hi-DPIディスプレイ用のこのビットマップイメージ選択機能が現在Java 8u20にあるかどうか)はわかりません。画面に screen。 getDpi() 、次に適切なビットマップをロードします。

4Kデバイス

4Kはプッシュするピクセルがたくさんあります。 JavaFXは、デフォルトでハードウェア、アクセラレーショングラフィックスパイプラインが利用可能な場合、そのようなグラフィックスパイプラインを使用します。一部のグラフィックスハードウェアは、4Kディスプレイ向けに完全に最適化されていない場合があります(たとえば、十分なビデオRAMがない)。これにより、アプリケーションが機能しないか、パフォーマンスが低下する可能性があります。また、現在、さまざまな4KデバイスでのJavaFXパフォーマンスの調査に多くの労力が費やされているとは思いません。「うまくいく」かもしれませんが、そうではないかもしれません。ターゲットハードウェアでアプリケーションをテストして、そのハードウェアで実行するときのJavaFXアプリケーションの現在の機能を確認する必要があります。上記の提案のいくつかに従って、アプリケーションを微調整する必要がある場合もあります。

JavaFXを使用して4Kビデオを表示しようとすると、JavaFX 8u20で問題が発生することがユーザーから報告されています。

背景

OS XでのHi-DPIのサポートは、(おそらく)ターゲットデバイスが網膜または非網膜ディスプレイであり、一方が他方の正確な2倍のスケールであり、OS Xシステムからの直接サポートを利用できるため、(おそらく)Windows/Linuxデバイスよりもシンプルでした。網膜のスケーリングを達成するのに役立ちます。 Windows/Linuxでおそらく必要なのは、2倍以外のファクターでスケーリングする機能であり、これは(現在未処理でスケジュールされている)機能リクエストでカバーされます RT-32521 DPIベースのグローバル座標スケーリングをサポートしますデフォルト 。通常、整数でスケーリングすると、目に見える最良の結果が得られます。

その他のリソース

Hi-DPIデバイスのコーディングの完全なガイドは、この特定の回答の範囲外です。さまざまなWebリソースをググって詳細情報を取得できます。

JavaFXのHi-DPIサポートについてさらに質問がある場合は、 openjfx-dev JavaFX開発者メーリングリスト で質問することをお勧めします。

Wiki Answer

この回答には、矛盾やエラーが発生する可能性があり、時間の経過とともに日付が変わる場合があります。回答コミュニティwikiを作成しました。特定の修正、デバイスとOSの制限、またはJavaFXでのHi-DPIのサポートモデルのサポートに気付いている場合は、この回答を編集するか、 OpenJFX wiki に移動してください。 )。

33
jewelsea

私も同じ問題に直面しました。私は自分のSurface Pro 3でjavaFXアプリケーションを構築しましたが、スケーリングしませんでしたが、fxmlアプリはスケーリングしました。次に、jre8u221をインストールして、提案された更新バージョンを置き換えます。問題を修正しました

1