75

DPIが150を超えるモニター(Macbook Proなど)を使用している場合は、問題が発生する可能性もあります。JavaSwingアプリのフォントが小さすぎて、高DPIモニターには対応できず、フォントサイズをまったく変更できません(It Windows DPIを直接無視し、非常に元のDPI-> 96のみを表示します)。画面の解像度を変更する以外に何もできません。これにより、LCDのすべてがぼやけてしまう可能性があります。

はい、私は高DPIモニター、1920x1080解像度の15.6フィートのラップトップを持っています。Matlab、Burpsuiteなどの一部のJavaデスクトップアプリは私のラップトップでは非常に小さく見えます。私は非常に長い間インターネットを検索してきましたが、それでも問題の方法を見つけることができません。を介してJREフォントを変更できることは知ってJRE_HOME/lib/font/fontconfig.properties.srcいますが、JavaデスクトップフォントのデフォルトのフォントサイズまたはDPIを設定する場所が見つかりません。

問題には解決策がありませんか?高DPIモニターはありますか?そのようなアプリをどうしますか?Swingは高DPIユーザーをあきらめますか?

4

6 に答える 6

39

私は現在、Windowsでこの問題を調査しています。これが私が見つけたものです:

ほとんどのSwingLook&Feelsは、スケーラブルであると想定されていても、Nimbusでさえも、高DPIをまったくサポートしていません。Nimbusが最終的に高いDPIスケーリングを提供する可能性があるという古いブログ投稿をいくつか見つけましたが、明らかにそれは実現しませんでした。

唯一の例外はシステムLAFですが、そのデフォルトフォントは、すべてのDPI設定で、実際のシステムフォントサイズよりも約10%小さくなっています。さらに、システムはここで説明されているように明示的に選択する必要があります:http: //docs.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html

Swingで設定できる単一のスケーリング係数もありません。特定のLAFは、スケーリングを処理するためのコードを提供する必要があります。ですから、あなたができる最善のことは、システムを選択し、それが十分に良いことを願うことです。

ただし、JavaFXは、システム上で150%まで正しく自動的にスケーリングします。可能であれば、JavaFXを使用してGUIを構築することをお勧めします。

編集:いくつかの小さなテストプログラムを作成し、さまざまなGUIフレームワーク、Swingテーマ、およびDPI設定の比較スクリーンショットを撮りました。これは、この質問を読んでいる人々にとって有益かもしれません:http: //kynosarges.org/GuiDpiScaling.html

于 2013-05-08T08:13:38.103 に答える
12

簡単な答え:JRE9以降で実行する必要があります。

長い答え:
これは、Javaランタイムがそれ自体を「DPI対応」であると宣言したが、AWTおよびSwingでは実際にはサポートしていなかったためです。Javaアプリケーションは、適切にスケーリングされるのではなく、ピクセルに基づいてサイズ設定およびレンダリングされました。これには、HiDPIディスプレイが含まれます。とにかく、これは最近解決されました。問題JEP263:WindowsおよびLinux上 のHiDPIグラフィックスとアップグレードを参照してください。

したがって、フォントサイズを大きくしても機能しません(残りの部分は大きくならないため)。jvm引数-Dsun.java2d.dpiaware=falseは機能しません(実際にはサポートされていないため)。マニフェストファイルとレジストリの編集(Windowsの場合)は機能しません。

解決策:この機能を実際にサポートしているため、JRE9以降で実行する必要があります。

于 2017-07-31T23:58:47.927 に答える
6

この回答により、4K画面のUbuntuラップトップの問題が解決しました。

アプリケーションの構成ファイルに-Dsun.java2d.uiScale=2.5Javaパラメーターを追加しましたが、実行すると、アプリケーションは適切にスケーリングされ、使用可能になります。

于 2020-08-05T11:22:59.300 に答える
3

私の実験によると、 Linuxでは、Swingのルックアンドフィールでスケーリングを行うことはできないようです。ただし、VNC、 vncdeskを含むハックを使用してそれを行うことは可能です。gradle --guiこれがvncdeskで実行するための私の設定です:

.vncdesk/1/settings.ini

[desktop]
width = 1050
height = 650

[window]
title = gradle
name = gradle in vncdesk
class = GradleInVncdesk
scale_factor = 2

.vncdesk/1/startup

#!/bin/sh
cd "$INVOCATION_DIR"
matchbox-window-manager&
exec gradle --gui "$@"
于 2016-01-23T16:23:18.660 に答える
3

Linux(Gtk)では、アプリを起動する前に、以下を使用してAppsDPIをスケーリングすることでこれを回避できるようです。

export GDK_SCALE=2

(モニターの解像度を下げることもできますが、それはまったく解決策ではありません)。

于 2020-11-28T08:49:08.363 に答える
2

私はこれらの指示に従ってそれを解決することができました:リンク

ドイツ語ですが、重要なものを翻訳します。

このレジストリキーを作成します。

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\SideBySide]
"PreferExternalManifest"=dword:00000001

次の内容でマニフェストファイルを作成します。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">

<dependency>
  <dependentAssembly>
    <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*">
    </assemblyIdentity>
  </dependentAssembly>
</dependency>

<dependency>
  <dependentAssembly>
    <assemblyIdentity type="win32" name="Microsoft.VC90.CRT" version="9.0.21022.8" processorArchitecture="amd64" publicKeyToken="1fc8b3b9a1e18e3b">
    </assemblyIdentity>
  </dependentAssembly>
</dependency>

<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
  <security>
    <requestedPrivileges>
      <requestedExecutionLevel level="asInvoker" uiAccess="false"/>
    </requestedPrivileges>
  </security>
</trustInfo>

<asmv3:application>
  <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
    <ms_windowsSettings:dpiAware xmlns:ms_windowsSettings="http://schemas.microsoft.com/SMI/2005/WindowsSettings">false</ms_windowsSettings:dpiAware>
  </asmv3:windowsSettings>
</asmv3:application>

</assembly>

java.exeとjavaw.exeが含まれているbinディレクトリにコピーし、名前を付けjava.exe.manifestますjavaw.exe.manifest(内容は同じですが名前が異なる2つのファイルがあります)。

HTH。

ベルント

于 2016-12-27T19:03:29.413 に答える