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