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

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

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

Windowsプラットフォームでは、ユーザーは、デスクトップのポップアップ・メニューにある「プロパティ」オプション経由で、GUIをカスタマイズできます。Swingのルック・アンド・フィールがユーザーの視覚および動作の設定を正しく実装しているかを確認するために、システム・レジストリから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のルック・アンド・フィールが自動的に読み取られ、これらのプロパティがコンポーネントに適切な視覚効果と動作を提供するように解釈されます。

配色に関するプロパティ

ユーザーの設定

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のルック・アンド・フィール内で実行されている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のルック・アンド・フィールでは、このメカニズムを使用して視覚に関するプロパティの動的な変更イベントを監視し、コンポーネントが最新の視覚に関するプロパティ値を持てるように、UIをアンインストールしたり再インストールしたりして、GUIを更新します。この動的な動作は、Windowsのルック・アンド・フィールを実行中のすべてのSwingプログラムで自動的に行われます。

このメカニズムは、GUIの階層をFrame.getFrames()で始めてそこからすべてのウィンドウ/コンテナ/コンポーネントをトラバースすることで、GUIコンポーネントを更新します。トラバースが行われるときにクライアントに表示不能なコンポーネントがある場合(コンポーネントが表示可能である場合の定義については、java.awt.ComponentisDisplayable()メソッドを参照)、このようなコンポーネントは自動的には更新されません。これらのコンポーネントのルック・アンド・フィールが最新のものであることを保証するために、クライアント・プログラムでコンポーネントのUIを更新する必要があります。たとえばこのようなことは、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);

Copyright © 1993, 2020, Oracle and/or its affiliates. All rights reserved.