Toolkit.getDesktopProperty
メソッドで取得できる標準 AWT デスクトッププロパティーについて次に説明します。
各デスクトッププロパティーは固有の文字列で指定され、この文字列がそのプロパティーの「名前」になります。
ここでは、AWT がサポートするが、(通常、適切なメソッドまたはクラスがないために) ほかで文書化されていないデスクトッププロパティーについて説明します。
ほかで説明されているデスクトッププロパティーは、その説明が存在するメソッドまたはクラスと密接に関連しています。
デスクトッププロパティーはベースとなるプラットフォーム設定を抽象化するため、それらがサポートされない環境では利用できない場合があります。何らかの理由でデスクトッププロパティーが利用できない場合は、実装は null
を返します。
次の表は、ここで説明するデスクトッププロパティーとそれらの値の型の概要です。
プロパティー名 | 値の型 | サマリー説明 |
---|---|---|
awt.font.desktophints | java.util.Map | フォントスムージング (テキストアンチエイリアス) 設定。 |
sun.awt.enableExtraMouseButtons | java.lang.Boolean | 追加のボタンからのマウスイベントを生成するかどうかを制御します |
モダンデスクトップはさまざまな形式のテキストアンチエイリアス (フォントスムージング) をサポートします。
これらは、プラットフォーム固有の重量コンポーネントによって適用されます。ただし、アプリケーションが、レンダリング面に同じテキストアンチエイリアスを使用してテキストを、または Graphics2D
メソッドを使用して軽量 (非プラットフォーム) コンポーネントをレンダリングする場合があります。これは、ネイティブのデスクトップコンポーネントやほかの Swing コンポーネントと矛盾なく表示される必要がある Swing コンポーネントを作成する場合に特に重要です。
Graphics2D
に直接適用できる 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
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アプリケーションの起動時に設定されたあとでこの値を変更することはできません。