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

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

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

Windows プラットフォームでは、ユーザーは、デスクトップのポップアップメニューにある「プロパティ」オプション経由で、GUI をカスタマイズできます。Swing の 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 の 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);