Toolkit.getDesktopProperty
メソッドで取得できる標準AWTデスクトップ・プロパティについて次に説明します。
各デスクトップ・プロパティは固有の文字列で指定され、この文字列がそのプロパティの「名前」になります。
ここでは、AWTがサポートするが、(通常、適切なメソッドまたはクラスがないために)ほかで文書化されていないデスクトップ・プロパティについて説明します。
ほかで説明されているデスクトップ・プロパティは、その説明が存在するメソッドまたはクラスと密接に関連しています。
デスクトップ・プロパティはベースとなるプラットフォーム設定を抽象化するため、それらがサポートされない環境では利用できない場合があります。何らかの理由でデスクトップ・プロパティが利用できない場合は、実装はnull
を返します。
次の表は、ここで説明するデスクトップ・プロパティとそれらの値の型の概要です。
プロパティ名 | 値の型 | サマリー説明 |
---|---|---|
awt.font.desktophints | java.util.Map | フォント・スムージング(テキスト・アンチエイリアス)設定。 |
sun.awt.enableExtraMouseButtons | java.lang.Boolean | 追加のボタンからのマウス・イベントを生成するかどうかを制御します |
モダン・デスクトップはさまざまな形式のテキスト・アンチエイリアス(フォント・スムージング)をサポートします。
これらは、プラットフォーム固有の重量コンポーネントによって適用されます。ただし、アプリケーションが、レンダリング面に同じテキスト・アンチエイリアスを使用してテキストを、または Graphics2D
メソッドを使用して軽量(非プラットフォーム)コンポーネントをレンダリングする場合があります。これは、ネイティブのデスクトップ・コンポーネントやほかのSwingコンポーネントと矛盾なく表示される必要があるSwingコンポーネントを作成する場合に特に重要です。
RenderingHints
のMap
です。
複数のヒントが必要な場合があるため、これは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);
}
Map
ですRenderingHints.Key
のインスタンスであり、値がそのキーの正当な値であるようなRenderingHints
のMap
になります。 Graphics2D
にそのヒントのデフォルト値以外の値が設定されている場合に必要です。マップにデフォルト値が含まれていなかった場合は、addRenderingHints(Map)
は以前のヒントを残しますが、それがデスクトップ設定に対応していない可能性があります。
アプリケーションはsetRenderingHints(Map)
を使用してすべてのヒントを再初期化できますが、これは無関係なヒントにも影響します。
"awt.font.desktophints" + "." + GraphicsDevice.getIDstring();
アプリケーションは、これらのプロパティの変更を待機することもできます。
しかし、これはきわめてまれな構成であるため、開発を容易にするために、単一のデスク・トップ全体の設定のみがサポートされている場合は、デバイス別の設定に対する照会はnullを返します。したがって、デバイス別の設定があるかどうかを判別するには、デバイス別のプロパティ名を使用して、任意の画面デバイスに対してnull以外の戻り値があることを判定すれば十分です。
このプロパティは、追加のマウス・ボタン(ボタンが存在し、ベースとなるオペレーティング・システムで有効にされている場合)からのイベントを処理して{@code EventQueue}に送信することが許可されているかどうかを判定します。
値は、アプリケーションの開始前に"sun.awt.enableExtraMouseButtons"プロパティ値をjavaに渡すことによって変更できます。これは次のコマンドで実行できます。
java -Dsun.awt.enableExtraMouseButtons=false Applicationアプリケーションの起動時に設定されたあとでこの値を変更することはできません。