この機能は、次の 2 つの分野に関連します。
Windows プラットフォームでは、ユーザーは、デスクトップのポップアップメニューにある「プロパティー」オプション経由で、GUI をカスタマイズできます。Swing の Look & Feel がユーザーの視覚および動作の設定を正しく実装しているかを確認するために、システムレジストリから UI プロパティーの値を取得する必要があります。これらのプロパティーの値は、java.awt.Toolkit の getDesktopProperty()
メソッドで検索可能です。
このメソッドでアクセス可能なプロパティーのほとんどは 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.Toolkit の addPropertyChangeListener()
メソッド経由でサポートされます。Swing の Look & Feel では、このメカニズムを使用して視覚に関するプロパティーの動的な変更イベントを監視し、コンポーネントが最新の視覚に関するプロパティー値を持てるように、UI をアンインストールしたり再インストールしたりして、GUI を更新します。この動的な動作は、Windows の Look & Feel を実行中のすべての Swing プログラムで自動的に行われます。
このメカニズムは、GUI の階層を Frame.getFrames()
で始めてそこからすべてのウィンドウ/コンテナ/コンポーネントをトラバースすることで、GUI コンポーネントを更新します。トラバースが行われるときにクライアントに表示不能なコンポーネントがある場合、このようなコンポーネントは自動的には更新されません。これらのコンポーネントの Look & Feel が最新のものであることを保証するために、クライアントプログラムでコンポーネントの UI を更新する必要があります (コンポーネントが表示可能である場合の定義については、java.awt.Component の isDisplayable()
メソッドを参照)。たとえばこのようなことは、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);