Windows デスクトップ関連のプロパティのサポート

この機能は、次の 2 つの分野に関連します。

ユーザの設定をさらに尊重する

Windows プラットフォームでは、ユーザは、デスクトップのポップアップメニューに表示される「プロパティ」オプション経由で、GUI をカスタマイズできます。Swing の Windows の Look & Feel がユーザの視覚および動作の設定を正しく実装しているかを確認するために、システムレジストリから UI プロパティの値を取得する必要があります。これらのプロパティの値は、java.awt.ToolkitgetDesktopProperty() メソッドで検索可能です。

このメソッドでアクセス可能なプロパティのほとんどは Windows プラットフォームに特有なプロパティであり、「win.」という接頭辞が付いています。サポートされる Windows プロパティ名のリストは、win.propNames プロパティをプログラムで問い合わせて取得できます。

String propnames[] = (String[])Toolkit.getDefaultToolkit().getDesktopProperty("win.propNames");
System.out.println("Supported windows property names:");
for(int i = 0; i < propnames.length; i++) {
System.out.println(propnames[i]);
         }

すべてのプラットフォームでサポートされるプロパティは、接頭辞の「awt.」で始まります。

プログラムでこれらのプロパティに直接アクセスする必要はなく、Windows の Look & Feel が自動的に読み取られ、これらのプロパティがコンポーネントに適切な視覚効果と動作を提供するように解釈されます。

配色に関するプロパティ

ユーザの設定

Java プロパティ名

3D オブジェクトのバックグラウンドカラー "win.3d.backgroundColor" java.awt.Color
3D オブジェクトの強調表示 "win.3d.highlightColor" java.awt.Color
3D オブジェクトのハイライト "win.3d.lightColor" java.awt.Color
3D オブジェクトの陰影 "win.3d.shadowColor" java.awt.Color
アクティブなタイトルバーカラー 1 "win.frame.activeCaptionColor" java.awt.Color
アクティブなタイトルバーカラー 2 "win.frame.activeCaptionGradientColor"(TBI) java.awt.Color
アクティブなタイトルバーのフォントカラー "win.frame.captionTextColor" java.awt.Color
アクティブなウィンドウの境界カラー "win.frame.activeBorderColor" java.awt.Color
アプリケーションのバックグラウンドカラー "win.mdi.backgroundColor" java.lang.Color
デスクトップカラー "win.desktop.backgroundColor" java.awt.Color
アクティブでないタイトルバーカラー 1 "win.frame.inactiveCaptionColor" java.awt.Color
アクティブでないタイトルバーカラー 2 "win.frame.inactiveCaptionGradientColor"(TBI) java.awt.Color
アクティブでないタイトルバーのフォントカラー "win.frame.inactiveCaptionTextColor" java.awt.Color
アクティブでないウィンドウの境界カラー "win.frame.inactiveBorderColor" java.awt.Color
メニューのカラー "win.menu.backgroundColor" java.awt.Color
メニューのフォントカラー "win.menu.textColor" java.awt.Color
メッセージボックスのフォントカラー "win.frame.textColor" java.awt.Color
選択された項目のカラー "win.item.highlightColor" java.awt.Color
選択された項目のフォントカラー "win.item.highlightTextColor" java.awt.Color
ツールヒントのカラー "win.tooltip.backgroundColor" java.awt.Color
ツールヒントのフォントカラー "win.tooltip.textColor" java.awt.Color
ウィンドウカラー "win.frame.backgroundColor" java.awt.Color
ウィンドウのフォントカラー "win.frame.textColor" java.awt.Color
ホットトラッキングのカラー "win.item.hotTrackedColor" java.awt.Color

外形に関するプロパティ

ユーザの設定

Java プロパティ名

アクティブなタイトルバーのサイズ "win.frame.captionHeight" java.lang.Integer
アクティブなウィンドウボーダのサイズ "win.frame.sizingBorderWidth" java.lang.Integer
キャプションボタンのサイズ "win.frame.captionButtonHeight"
"win.frame.captionButtonWidth"
win.frame.captionHeight"
java.lang.Integer
アイコンのサイズ "win.icon.hspacing"
"win.icon.vspacing"
java.lang.Integer
アイコンの横の間隔 "win.icon.hspacing" java.lang.Integer
アイコンの縦の間隔 "win.icon.vspacing" java.lang.Integer
アクティブでないタイトルバーのサイズ "win.frame.captionButtonHeight"
"win.frame.captionButtonWidth"
"win.frame.captionHeight"
java.lang.Integer
アクティブでないウィンドウのボーダのサイズ "win.frame.sizingBorderWidth" java.lang.Integer
メニューのフォントサイズ "win.menu.font"
"win.menu.height"
java.lang.Integer
メニューのサイズ "win.menu.height"
"win.menu.buttonWidth"
java.awt.Integer
パレットタイトルのサイズ "win.frame.smallCaptionHeight"
"win.frame.smallCaptionButtonHeight"
"win.frame.smallCaptionButtonWidth"
java.lang.Integer
スクロールバーの幅 "win.scrollbar.width" java.lang.Integer
スクロールバーの高さ "win.scrollbar.height" java.lang.Integer
選択項目のサイズ "win.menu.height"
"win.menu.buttonWidth"
java.lang.Integer

フォントプロパティ

ユーザの設定

Java プロパティ名

アクティブなタイトルバーのフォント "win.frame.captionFont" java.awt.Font
アイコンのフォント "win.icon.font" java.awt.Font
アクティブでないタイトルバーのフォント "win.frame.captionFont" java.awt.Font
メニューのフォント "win.menu.font" java.awt.Font
メッセージボックスのフォント "win.messagebox.font" java.awt.Font
パレットタイトルのフォント "win.frame.smallCaptionFont" java.awt.Font
選択された項目のフォント "win.menu.font" java.awt.Font
ツールヒントのフォント "win.tooltip.font" java.awt.Font

フォントの互換性

現在、Windows の Look & Feel 内で実行されている Swing プログラムは、Java 定義のシステムフォントではなく、ユーザが設定したシステムフォントで描画します。このため、従来の動作に基づいているプログラムとの間に互換性の問題が発生する可能性があるので (外形上の問題や特定のフォントグリフに依存する地域対応の設定などが原因)、必要に応じてこの機能をオフにする、次の実行時のプロパティが用意されています。

java -Dswing.useSystemFontSettings=false MyJavaProgram

視覚効果に関するプロパティ

ユーザの設定

Java プロパティ名

アイコンのタイトルの折り返し "win.icon.titleWrappingOn" java.lang.Boolean
ウィンドウのドラッグ機能 "win.frame.fullWindowDragOn" java.lang.Boolean
キーボードナビゲーションの表示 "win.menu.keyboardCuesOn"(TBI) java.lang.Boolean
ツールバー/メニューバーのホットトラッキング "win.item.hotTrackingOn" java.lang.Boolean
タイトルバーのグラデーション "win.frame.captionGradientsOn" java.lang.Boolean

音声フィードバックに関するプロパティ

ユーザの設定

Java プロパティ名

デフォルトのサウンド "win.sound.default" java.lang.Runnable
サウンドを閉じる "win.sound.close" java.lang.Runnable
サウンドの最大化 "win.sound.maximize" java.lang.Runnable
サウンドの最小化 "win.sound.minimize" java.lang.Runnable
メニューコマンドのサウンド "win.sound.menuCommand" java.lang.Runnable
メニューポップアップのサウンド "win.sound.menuPopup" java.lang.Runnable
サウンドを開く "win.sound.open" java.lang.Runnable
サウンドを低く復元 "win.sound.restoreDown" java.lang.Runnable
サウンドを高く復元 "win.sound.restoreUp" java.lang.Runnable
システムアスタリスクサウンド "win.sound.asterisk" java.lang.Runnable
システムエクスクラメーションサウンド "win.sound.exclamation" java.lang.Runnable
システム終了サウンド "win.sound.exit" java.lang.Runnable
システムハンドサウンド "win.sound.hand" java.lang.Runnable
システムクエッションサウンド "win.sound.question" java.lang.Runnable
システム開始サウンド "win.sound.start" java.lang.Runnable

サウンドの動的変更

サウンドプロパティに返されるオブジェクトは、そのプロパティ用に現在のオーディオクリップを再生する単なる Runnable です。つまり、サウンドのプロパティ値は現在のサウンド設定へのライブリンクであるため、サウンドに関するプロパティへの動的変更を監視する必要はありません。

入力に関するプロパティ

ユーザの設定

Java プロパティ名

ダブルクリックの間隔 "awt.multiClickInterval" java.lang.Integer
カーソルの点滅間隔 "awt.cursorBlinkRate"(TBI) java.lang.Integer

動的変更に対する応答

JDK 1.3 では、デスクトップに関するプロパティ値の 1 つが変化すると通知を受け取るように登録しておく機能が、AWT によって追加されました。この機能は、java.awt.ToolkitaddPropertyChangeListener() メソッド経由でサポートされます。Swing の Windows の Look & Feel では、この機能を使用して視覚に関するプロパティの動的な変更イベントを監視し、コンポーネントが最新の視覚に関するプロパティ値を持てるように、UI をアンインストールしたり再インストールしたりして、GUI を更新します。この動的な動作は、Windows の Look & Feel を実行中のすべての Swing プログラムで自動的に行われます。

この機構は、GUI の階層を Frame.getFrames() で始めてそこからすべてのウィンドウ/コンテナ/コンポーネントをトラバースすることで、GUI コンポーネントを更新します。トラバースが行われるときにクライアントに表示不能なコンポーネントがある場合、このようなコンポーネントは自動的には更新されません。これらのコンポーネントの Look & Feel が最新のものであることを保証するために、クライアントプログラムでコンポーネントの UI を更新する必要があります (コンポーネントが表示可能である場合の定義については、java.awt.ComponentisDisplayable() メソッドを参照)。たとえばこのようなことは、SwingSet2 のデモで発生します。デモウィンドウが作成されても、デモのタブ付きペインから選択されるまで、ウィンドウが GUI の階層に追加されないからです。したがって、新しく選択したデモウィンドウが階層に追加される前に、最新のプロパティ設定値になっていることを保証するために、UI を更新します。

fragment from SwingSet2.java:// Ensure panel's UI is current before making visible
JComponent currentDemoPanel = demo.getDemoPanel();
SwingUtilities.updateComponentTreeUI(currentDemoPanel);
// Replace current demo with newly selected demo
demoPanel.removeAll();
demoPanel.add(currentDemoPanel, BorderLayout.CENTER);