web-dev-qa-db-ja.com

任意のJavaアプリでアンチエイリアスを有効にするにはどうすればよいですか?

多くのJavaアプリはデフォルトでアンチエイリアスフォントを使用しませんが、Swingがそれらを提供する機能があります。任意のJavaアプリケーションを強制する方法AAフォントを使用しますか?(実行中のアプリケーションと開発中のアプリケーションの両方)

50
rcreswick

ソースにアクセスできる場合は、mainメソッドでこれを行うことができます。

  // enable anti-aliased text:
  System.setProperty("awt.useSystemAAFontSettings","on");

または、(およびソースにアクセスできない場合、またはこれが簡単な場合)コマンドラインに次のオプションを追加することで、上記のシステムプロパティをjvmに渡すだけです。

-Dawt.useSystemAAFontSettings=on
72
rcreswick

Java 6/7の最新バージョンのSwingコントロールは、システム全体の設定に自動的に準拠する必要があります(Windows OSでWindows L&Fを使用している場合、テキストをClearTypeでレンダリングする必要があります。その設定をシステム全体で有効にします。)したがって、おそらく1つの解決策は、ネイティブのルックアンドフィールを有効にすることです。

開発中のアプリケーションで、独自のテキストを直接レンダリングする場合は、次のようなことも行う必要があります(Graphics.drawTextまたはフレンドを呼び出す前のある時点):

if (desktopHints == null) { 
    Toolkit tk = Toolkit.getDefaultToolkit(); 
    desktopHints = (Map) (tk.getDesktopProperty("awt.font.desktophints")); 
}
if (desktopHints != null) { 
    g2d.addRenderingHints(desktopHints); 
} 

リファレンス: http://weblogs.Java.net/blog/chet/archive/2007/01/font_hints_for.html

7
Luke Usherwood

記録のために、私は自分のWindows 7マシンで、

  • これをコードで使用しない場合、Nice ClearTypeサブピクセルレンダリングが表示されます。
  • しかし、これを使用すると、非常に醜い古典的な白黒のアンチエイリアスが得られます。

したがって、このコードは慎重に使用する必要があります。デフォルトでエイリアシングを適切に処理するOpenJDKのバージョンにすべてのLinuxユーザーが更新すると、必要がなくなると思います。

6
Al-Khwarizmi

情報をありがとう。私自身、これについて疑問に思っていました。私はSoapUI(www.eviware.com)を使用していますが、デフォルトではAAテキストを使用しません。起動するバッチファイルに-Dawt.useSystemAAFontSettings = on -Dswing.aatext = trueを追加しましたが、違いはありませんでした。推測、私は彼らのフォーラムで尋ねなければなりません。

0
anjanb