AWTデスクトップ・プロパティ

Toolkit.getDesktopPropertyメソッドで取得できる標準AWTデスクトップ・プロパティについて次に説明します。

各デスクトップ・プロパティは固有の文字列で指定され、この文字列がそのプロパティの「名前」になります。

ここでは、AWTがサポートするが、(通常、適切なメソッドまたはクラスがないために)ほかで文書化されていないデスクトップ・プロパティについて説明します。

ほかで説明されているデスクトップ・プロパティは、その説明が存在するメソッドまたはクラスと密接に関連しています。

デスクトップ・プロパティはベースとなるプラットフォーム設定を抽象化するため、それらがサポートされない環境では利用できない場合があります。何らかの理由でデスクトップ・プロパティが利用できない場合は、実装はnullを返します。

次の表は、ここで説明するデスクトップ・プロパティとそれらの値の型の概要です。

プロパティ名 値の型 サマリー説明
awt.font.desktophints java.util.Map フォント・スムージング(テキスト・アンチエイリアス)設定。
sun.awt.enableExtraMouseButtons java.lang.Boolean 追加のボタンからのマウス・イベントを生成するかどうかを制御します

デスクトップ・フォントのレンダリングのヒント

デスクトップのプロパティ: "awt.font.desktophints"

モダン・デスクトップはさまざまな形式のテキスト・アンチエイリアス(フォント・スムージング)をサポートします。

これらは、プラットフォーム固有の重量コンポーネントによって適用されます。ただし、アプリケーションが、レンダリング面に同じテキスト・アンチエイリアスを使用してテキストを、または Graphics2Dメソッドを使用して軽量(非プラットフォーム)コンポーネントをレンダリングする場合があります。これは、ネイティブのデスクトップ・コンポーネントやほかのSwingコンポーネントと矛盾なく表示される必要があるSwingコンポーネントを作成する場合に特に重要です。

基本的な使用法

"awt.font.desktophints"という名前の標準デスクトップ・プロパティを使用して、デスクトップ設定にもっともよく一致するレンダリングのヒントを取得できます。戻り値はGraphics2Dに直接適用できる RenderingHintsMapです。

複数のヒントが必要な場合があるため、これはMapです。null以外の場合は、Graphics2Dに直接適用できます。


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

高度な使用上のヒント

変更の待機

アプリケーションは、PropertyChangeListenerを使用してプロパティの変更を待機できます。


tk.addPropertyChangeListener("awt.font.desktophints", pcl); 
まれに、アプリケーションの実行中に、これらの一連のヒントに影響するようなデスクトップ環境の再構成をユーザーが行うことがあり、さらに、多くのデスクトップ環境では、新しい設定に適合するようにこれらの実行中のアプリケーションを動的に再構成することがサポートされているため、変更を待機することをお薦めします。

実行中のアプリケーションの動的再構成が想定されるかどうかを知る直接的な方法はありませんが、ほとんどのモダン・デスクトップ環境がこの機能を提供するので、デフォルトでは想定するべきです。

テキスト測定

テキストは必ず、レンダリングに使用されるのと同じ FontRenderContextを使用して測定する必要があります。テキスト・アンチエイリアスのヒントは、FontRenderContextのコンポーネントです。ヒントが設定されているGraphicsオブジェクトから取得された FontMetricsは、テキストを適切に測定します。これは、このヒントを直接指定するクライアントに固有の要件ではありませんが、FontRenderContextの値は想定してはならないため、ここではそれを示すためだけに説明しています。

グラフィックスの状態の保存と復元

アプリケーションが、これらのヒントを共有Graphicsに一時的に適用し、ヒントがテキスト・レンダリング操作に適用されたあとで、以前の値を復元する必要がある場合があります。次のサンプル・コードは、これを行うための1つの方法を示します。


/**
  * Get rendering hints from a Graphics instance.
  * "hintsToSave" is a Map of RenderingHint key-values.
  * For each hint key present in that map, the value of that
  * hint is obtained from the Graphics and stored as the value
  * for the key in savedHints.
  */
RenderingHints getRenderingHints(Graphics2D g2d,
                                  RenderingHints hintsToSave,
                                  RenderingHints savedHints) {
     if (savedHints == null) {
         savedHints = new RenderingHints(null);
     } else {
         savedHints.clear();
     }
     if (hintsToSave.size() == 0) {
         return savedHints;
     }
     /* RenderingHints.keySet() returns Set<Object> */
     for (Object o : hintsToSave.keySet()) {
         RenderingHints.Key key = (RenderingHints.Key)o;
         Object value = g2d.getRenderingHint(key);
         savedHints.put(key, value);
     }
     return savedHints;
}


Toolkit tk = Toolkit.getDefaultToolkit();
Map map = (Map)(tk.getDesktopProperty("awt.font.desktophints"));
Map oldHints;
if (map != null) {
     oldHints = getRenderingHints(graphic2D, map, null);
     graphics2D.addRenderingHints(map);
     ..
     graphics2D.addRenderingHints(oldHints);
}

詳細

マウスの機能

デスクトップのプロパティ: "sun.awt.enableExtraMouseButtons"

このプロパティは、追加のマウス・ボタン(ボタンが存在し、ベースとなるオペレーティング・システムで有効にされている場合)からのイベントを処理して{@code EventQueue}に送信することが許可されているかどうかを判定します。
値は、アプリケーションの開始前に"sun.awt.enableExtraMouseButtons"プロパティ値をjavaに渡すことによって変更できます。これは次のコマンドで実行できます。

java -Dsun.awt.enableExtraMouseButtons=false Application
アプリケーションの起動時に設定されたあとでこの値を変更することはできません。
現在の値は、getDesktopProperty("sun.awt.enableExtraMouseButtons")メソッドを使用しても照会できます。
プロパティが{@code true}に設定されている場合
プロパティが{@code false}に設定されている場合 このプロパティは、追加のマウス・ボタンの操作の結果としてトリガーされるマウス・イベントを待機する必要がない場合に使用します。このプロパティのデフォルトは{@code true}に設定されています。