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以外の戻り値があることを判定すれば十分です。
このプロパティは、追加のマウス・ボタン(それらが存在し、基盤となるオペレーティング・システムによって有効になっている場合)からのイベントを処理してEventQueueにポストすることができるかどうかを決定します。
値は、アプリケーションの開始前に"sun.awt.enableExtraMouseButtons"プロパティ値をjavaに渡すことによって変更できます。 これは次のコマンドで実行できます。
java -Dsun.awt.enableExtraMouseButtons=false Applicationアプリケーションの起動時に設定されたあとでこの値を変更することはできません。
trueに設定されている場合
MouseEventオブジェクトを作成するのは依然として合理的です。マウスに3つ以上のボタンがある場合、0からgetNumberOfButtons()までの範囲のボタンを使用することもできます。
Robot.mousePress()およびRobot.mouseRelease()メソッドを使用する場合は標準のボタン・マスクを使用し、マウスに3つ以上のボタンがある場合は、既存の拡張マウス・ボタンにマスクを使用することもできます。 そうすれば、マウスに3つ以上のボタンがある場合、1からgetNumberOfButtons()までの範囲のボタンに対応するボタン・マスクを使用することができます
falseに設定されている場合
MouseEventオブジェクトを作成することは合法です: NOBUTTON、BUTTON1、BUTTON2およびBUTTON3
InputEvent.BUTTON1_DOWN_MASK, InputEvent.BUTTON2_DOWN_MASK, InputEvent.BUTTON3_DOWN_MASK
trueに設定されています。
バグを報告する、または機能強化を提案する
さらにAPIリファレンスと開発者ドキュメントについては、概念的な概要、用語の定義、回避策、および作業コードの例など、より詳細な開発者向けの説明が含まれている「Java SEドキュメンテーション」を参照してください。
Javaは、米国およびその他の国におけるOracleおよび/またはその関連会社の商標または登録商標です。
Copyright © 1993, 2018, Oracle and/or its affiliates, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
All rights reserved. 使用は「ライセンス条項」と「ドキュメンテーション再配布ポリシー」に従います。