一部の Swing アプリケーションに Hi-DPI サポートを追加しようとしていますが、自分のニーズを満たす十分なソリューションを見つけることができませんでした。複数のルック アンド フィールをサポートする必要があるため、状況は私が見つけた他の投稿よりもかなり複雑に思えます (「フォント サイズに合わせて UI サイズを調整する」ことを提案する傾向があります)。
いくつかの実験ではUIManager
、アプリケーションを Hi-DPI フレンドリーにするための良いスタートを切るために微調整できる多くのメトリックが含まれていることがわかりました。( UIManager-Defaultsユーティリティは、これらを調査するのに非常に役立ちます!) 私が見つけたのは、L&F が互いに完全に異なる動作をしているように見えるということです:
Windows L&F は適切な (完全ではない) デフォルトのフォント サイズを提供し、組み込みのアイコン (チェックボックスやウィンドウ アイコンなど) は適切なサイズに設定されていますが、他の多くの指標はまだうまくいきません。
UIManager
Metal では、フォントを個別に更新できます。ちょっとした作業で、組み込みのIconUIResource
s を一致するようにスケーリングできます。Nimbus では、単一のデフォルト フォントを更新するだけで、他のフォントが適切な位置に収まります... しかし、組み込みのアイコンをスケーリングし、コンボ ボックス、ラジオ ボタン (など) を正常にレンダリングする方法は、私には理解できません!
いろいろ試してみて感じたのは、L&F 固有の特定の微調整のリストを個別に作成できるはずだということです。Font
これには、 、Icon
、Integer
およびのデフォルトを微調整する可能性がありますDimension
。
誰かがこれに対する良い解決策を思いつきましたか?
UIDefaults
標準的な L&F の調整が必要な決定的なリストを共有できる人はいますか?
Metal と Windows を一貫してサポートするソリューションに満足しています。
このようなソリューションは再利用可能で、さまざまな Swing アプリで同じ問題を解決できると思います。そのようなユーティリティがまだ存在していないように見えることに驚いています。(そうでない場合は教えてください!)もちろん、このアプローチですべてが解決されるわけではありません(たとえば、setPreferredSize
などの呼び出しを手動でスケーリングする必要があります。また、複数の L&F を既にサポートしているアプリは、とにかくそれを呼び出すことを避ける傾向があります。)それでも、多くのアプリが良いスタートを切ることができると思います.
JDK-9が完全なHi-DPI サポートを約束していることは承知していますが、それほど長く待つことはできません。