これまでの「Merlinの魔術」のコラムでは、Javaリリース1.4の新機能を取り上げてきましたが、この最新の記事は、現在ベータ版のバージョン1.4.2についての説明です。Sunは、Windowsの従来の外観は既に古く、Motifについても、少なくとも一般的なユーザー・デスクトップでこれを使用するユーザーはもういないと判断しました。この最新バージョンの標準Javaプラットフォームでは、ユーザーがWindows XPマシンを使用していれば、Windows XP風の新しいWindowsのルック・アンド・フィールが提供されるようになっています。また、一般的なLinuxデスクトップのルック・アンド・フィールであるGTK+ というまったく新しいルック・アンド・フィールも提供されます。
Swingアーキテクチャーは、プラグ可能なルック・アンド・フィールのフレームワークを提供します。このフレームワークは、標準的な方法、たとえば、コンポーネントを作成する呼び出しを毎回変更することなく、すべてのコンポーネントのフォントを8ポイントのボールドのLucidaにするような手段を提供します。ルック・アンド・フィールに新しい設定をプラグインするだけで、魔法のようにすべてにその変更が適用されます。ルック・アンド・フィールを設定することにより、GUI全体のスタイルを変更することもできます。これまで、J2SE 1.4は、Microsoft WindowsやMotifなどのプラットフォーム固有のルック・アンド・フィール・デザインを提供していました。また、J2SE 1.4は、Javaプラットフォームに固有でありながら、ユーザーがどのようなデスクトップ上で操作しても同じように見える、MetalというクロスプラットフォームのUIも提供していました。
最新のルック・アンド・フィール・デザインについて考察する前に、Javaプログラムのルック・アンド・フィールを変更する方法をリスト1に示します。
リスト1. すべての表示モードの検索
import java.awt.*;
import javax.swing.*;
public class Start extends JFrame {
public Start() {
setDefaultCloseOperation(EXIT_ON_CLOSE);
Container c = getContentPane();
JButton button = new JButton("Hello");
c.add(button, BorderLayout.CENTER);
setSize(100, 50);
show();
}
public static void main(String[] args) {
try {
UIManager.setLookAndFeel(
UIManager.getCrossPlatformLookAndFeelClassName());
//UIManager.getSystemLookAndFeelClassName());
} catch (Exception e) { }
new Start();
}
}
|
UIManager のsetLookAndFeel() の呼び出しでは、新しいルック・アンド・フィール・デザインのクラス名の完全に修飾されたパスを渡すことができます。クロスプラットフォームのMetal UIの対応するクラス名 (javax.swing.plaf.metal.MetalLookAndFeel) を思い出さなくても、getCrossPlatformLookAndFeelClassName() メソッドを使用すればシステムにその名前を尋ねることができます。一方、getSystemLookAndFeelClassName()は、ユーザーのデスクトップに固有のUIクラス名を返します。ユーザーがWindowsマシンでプログラムを実行している場合は、com.sun.java.swing.plaf.windows.WindowsLookAndFeel クラスを介してWindowsのUIが返されます。UNIXマシンを使用している場合は、Motif/CDEインターフェースまたはcom.sun.java.swing.plaf.motif.MotifLookAndFeel クラスが返されます。J2SE 1.4.2では、新しいGTK+ のルック・アンド・フィールも使用できますが、UNIXマシンのシステムのルック・アンド・フィール・クラスとしては返されません。この件については、J2SEリリース1.5で変更されることになっています。図1は、StartプログラムをWindows 2000マシンで実行した結果表示される外観を示しています。
図1. クロスプラットフォームのUI
Windows XPとUNIXのユーザーの場合は、図2のように、少し異なるシステムの外観になります。
図2. WindowsクラシックなUI
注意: Apple版 のJavaを使用するMacintoshユーザーの場合は、Aquaのルック・アンド・フィールになります。
前述のとおり、Windows 2000ユーザーとWindows XPユーザーでは、外観の異なるUIが表示されます。Windows XPの新しい外観や使い勝手は、ルック・アンド・フィール・クラスの完全なセットではありません。非XPユーザーには、既存のWindows UIクラスのセットによってMicrosoft Windowsのクラシック・バージョンが表示され、Windows XPユーザーに対しては、Windows XPバージョンが表示されます。次に示すように、システム・プロパティーswing.noxp を設定すると、Windows XPユーザーにもよりクラシックなWindowsインターフェースが提供されます。XP以外のWindowsユーザーが新しいXPインターフェースの使用を選択することはできません。
java -Dswing.noxp=true Start |
新しいWindows XPの外観と使い勝手は、Windowsのルック・アンド・フィールを変更したものですが、GTK+ のUIは、まったく新しく、GTK+ 2.0 (GTK+ 2.0の情報へのリンクについては、参考文献を参照してください) に基づいています。非Linuxユーザーには、この名前は初めてではないかと思います。GTK+ は、一般的なLinuxデスクトップのUIの外観や使い勝手だと考えてください (Linuxではこれ以外を使用することもできます)。GTK+ の多くの部品はユーザーによるカスタマイズが可能で、特別な場所に設定ファイルを配置すると、その設定に従ってデスクトップのルック・アンド・フィールが変わります。また、SwingではJInternalFrame と呼ばれるマルチ・ドキュメント・インターフェース (MDI) のような機能は、GTK+ のフレームワークには含まれず、基盤となるウィンドウ・マネージャーに任されています。そのため、デスクトップはテーマ・エンジンによってカスタマイズできます。GTK+ 用のSwing UIにより、テーマ作成はMetacity (参考文献を参照) という名前のプロジェクトでサポートされます。システム・プロパティーswing.metacitythemename を設定することにより、使用するGTK+ のテーマを制御できます。デフォルトのテーマに加えて、CruxおよびBluecurveの各テーマがサポートされています。swing.gtkthemedir システム・プロパティーで指定されたディレクトリーに、後から追加のテーマを配置することができます。また、GTK+ のリソース・ファイルも、ルック・アンド・フィールをカスタマイズする手段になります。現時点では、追加のGTKエンジンの作成はサポートされていません。ただし、Themes.orgでどのようなものがあるかを確認することができます。
新しいルック・アンド・フィールのデザインを実際に示す最も簡単な方法は、J2SEに標準で付属しているSwingSet2デモ・プログラムを見せることです。このプログラムは、J2SE 1.4のインストール先の、demo\jfc\SwingSet2 ディレクトリーに入っています。コマンドjava -jar SwingSet2.jar でプログラムを起動してください。このコマンドでは、-jar オプションを使用して、該当のJARのマニフェスト・ファイルで指定されたメイン・クラスが起動するようにしています。
初期画面には、いくつかのJInternalFrameコンポーネントとボタンが表示されます。これらのアイテムは、一般的なデスクトップ・アプリケーションでよく見られるものです。図3は、Windows XPマシンでのSwingSetアプリケーションの外観を示しています。
図3. Windows XPのルック・アンド・フィールを備えたSwingSet
図4は、GTK+ のルック・アンド・フィールです。
図4. GTK+ のルック・アンド・フィールを備えたSwingSet
Windowsで最も注目すべき変化の1つは、ファイル・ダイアログです。図5は、Windows XPのファイル・ダイアログの外観を示しています。
図5. Windows XPのファイル・ダイアログ
GTK+ については、よりユーザー・フレンドリーなポップアップの外観を図6に示します。
図6. GTK+ の警告ダイアログ
J2SE 1.4.2は、Javaデスクトップの最新の標準に常に準拠しようとするSunの姿勢を強く浮き彫りにしています。Windows XPとGTK+ のルック・アンド・フィール・デザインにより、ユーザーにはよりネイティブ・アプリケーションに近い外観を持ったJavaアプリケーションが提供されます。また、J2SE 1.4.2では、新しいルック・アンド・フィール・デザインに加えて、多くのバグ修正や、特定の状況では実際に従来より300% 高速なJFileChooserも提供されています (なぜこれまでそれほど遅かったのかと思われるかもしれませんが、少なくとも今は速くなっています)。
- Merlinの使用にあたってのヒントが満載された著者のコラムの全編をお読みください。
- 新しいルック・アンド・フィールのコンポーネントに関する情報をはじめとして、J2SE 1.4.2 Swingリリースにおける多くの変更点を学んでください。
- Mitch Goldstein氏の記事「Swingモデルのフィルター処理」(developerWorks、2001年2月) をお読みください。
- 非SwingのGTK+ のテーマについては、Themes.org/ をご覧ください。
- developerWorks の「Building a customized tree view」(2001年1月) に関するチュートリアルを体験してください。
- Joe Winchester氏とRenee Schwartz氏の記事では、「優れたGUIを構築する」(developerWorks、2001年10月) 方法を学ぶことができます。
-
LookAndFeelクラスの詳細については、このクラスのjavadoc を参照してください。 - JFaceとSWTに関するこの記事で、「Eclipse Workbench以外でのEclipse GUIの使用」(developerWorks、2003年1月) について学んでください。
-
developerWorks のJava technology zone に掲載されている、Javaテクノロジーに関するその他の記事やチュートリアルもお読みください。

John Zukowskiは、JZ Ventures, Inc.の戦略的Javaコンサルティングを推進し、数多くのjGuruのコミュニティー主導のJava FAQsで常任指導者として活躍しています。最新の著書には、Apressから出版された「 Java Collections」および「 Definitive Guide to Swing for Java 2」 (第2版) があります。彼のメール・アドレスはjaz@zukowski.net です。