この機能は、次の 2 つの分野に関連します。
Windows プラットフォームでは、ユーザは、デスクトップのポップアップメニューに表示される「プロパティ」オプション経由で、GUI をカスタマイズできます。Swing の Windows の 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 の Windows の 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);