本文へジャンプ

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む


お客様が developerWorks に初めてサインインすると、プロフィールが作成されます。プロフィールで選択した情報は公開されますが、いつでもその情報を編集できます。お客様の姓名(非表示設定にしていない限り)とディスプレイ・ネームは、投稿するコンテンツと一緒に表示されます。

送信されたすべての情報は安全です。

  • 閉じる [x]

developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む


送信されたすべての情報は安全です。

  • 閉じる [x]

Tigerを使いこなす: OceanとSynthがMetalに出会う

JDK 5.0での新しいルック・アンド・フィール2点

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

概要: Tigerが今や正式リリースとなったので、Java 2 Standard Editionプラットフォーム1.4バージョンとJava 2 Development Kit 5.0との違いのうち、さらに重要な部分を探る時です。Tigerを使いこなすシリーズの今回の記事では、UIのエキスパート、John Zukowskiが、新しく利用できるようになったOceanとSynthというルック・アンド・フィールを探ります。今やプログラマーではない人であっても、コードを書くことなく、また特別良い目を持っていなくても、カスタムのルック・アンド・フィールを開発できるようになったのです。

日付:  2004年 10月 19日
レベル:  初級 この記事の原文:  英語
アクティビティー: 1784 ビュー
お気軽にご意見・ご感想をお寄せください: 


いよいよ正式となりました。2004年9月30日付で、Java 2 Development Kitのバージョン5.0(そう、昔ながらのJDKに戻りました)が本物として入手可能となりました。この新しいプラットフォームの一部として、新しい2つのルック・アンド・フィール・オブジェクトが付いてきます。これによって、プログラムが使用するものやプログラムの見栄えを変更できるようになります。OceanはデフォルトのJavaルック・アンド・フィールであり、これまでのMetalに置き換わるものです。Synthは新しいもので、外部のXMLファイルからルック・アンド・フィールの記述を提供します。

Oceanに飛び込む

これまでの1.4のデフォルトであるMetalのルック・アンド・フィールを使い続ける代わりに、Oceanと呼ばれる、5.0 Javaランタイム環境用のルック・アンド・フィールを使用することができます。ただし、Oceanの見栄えは完全に新しいものではありません。Oceanは全く初めから新しい見栄えを再設計したものではなく、Metalのルック・アンド・フィールに対する新しいテーマとして動作します。これはどういう意味かというと、もし皆さんがMetalのルック・アンド・フィールをカスタム化してあるのであれば、そのプログラムは5.0の下でも同じように見えます。新しいOceanテーマを使うと、それらのプログラムは同じには見えないことになります。

テーマに慣れていない人のために言うと、抽象MetalThemeクラスによって、ルック・アンド・フィールが使う色やフォントを抽象化して取り出せるようになります。テーマを変更することで、実質的にルック・アンド・フィールを変更することができます。Oceanが行っているのは、これなのです。つまりOceanは「真の」ルック・アンド・フィールではありません。そうではなく、OceanThemeクラスはSwingコンポーネントに対して、よりソフトなビューを提供するのです。SwingSet2デモ・プログラムを参考として使いながら、Metalルック・アンド・フィールのこれまでのSteelテーマを表す図1と、Metalルック・アンド・フィールのOceanテーマを表す図2を比較してみてください。


図1. MetalのSteelテーマ
 Steel Theme of Metal

図2. MetalのOceanテーマ
 Ocean Theme of Metal

図2での、ボタン・コンポーネントの背景の色合い変化に注意してください。この手法は、1.4リリースのカラー・セットが、今までほど強調されなくなっていることの一つの表れです。以前の手法に戻りたいのであれば、Metalテーマを単にsteelに戻せば全て完了です。下記のコードを使ってシステム・プロパティを強制的にswing.metalThemeに設定し、Metalルック・アンド・フィールのsteelテーマでプログラムを起動します。

java -Dswing.metalTheme=steel  packageName.ClassName

何も新しいものはありませんが、SwingSet2デモではAquaやCharcoalを含めて、他のテーマを幾つか見ることができます。リスト1はAquaテーマのソースを示していますが、ここで行っているのは、一部の色を再マップすることだけです。


リスト1. Aquaテーマのソース
                
/*
 * @(#)AquaTheme.java	1.9 04/07/26
 * * Copyright (c) 2004 Sun Microsystems, Inc. All Rights Reserved.
 * * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 * * -Redistribution of source code must retain the above copyright notice, this
 *  list of conditions, and the following disclaimer.
 * * -Redistribution in binary form must reproduce the above copyright notice,
 *  this list of conditions, and the following disclaimer in the documentation
 *  and/or other materials provided with the distribution.
 * * Neither the name of Sun Microsystems, Inc. or the names of contributors may
 * be used to endorse or promote products derived from this software without
 * specific prior written permission.
 * * This software is provided "AS IS," without a warranty of any kind. ALL
 * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS, AND WARRANTIES, INCLUDING
 * ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE,
 * OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN MICROSYSTEMS, INC. ("SUN")
 * AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE
 * AS A RESULT OF USING, MODIFYING, OR DISTRIBUTING THIS SOFTWARE OR ITS
 * DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST
 * REVENUE, PROFIT, OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL,
 * INCIDENTAL, OR PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY
 * OF LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE,
 * EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
 * * You acknowledge that this software is not designed, licensed, or intended
 * for use in the design, construction, operation, or maintenance of any
 * nuclear facility.
 */
/*
 * @(#)AquaTheme.java	1.9 04/07/26
 */

import javax.swing.plaf.*;
import javax.swing.plaf.metal.*;
import javax.swing.*;
import javax.swing.border.*;
import java.awt.*;
/**
 * This class describes a theme using "blue-green" colors.
 *
 * 1.9 07/26/04
 * @author Steve Wilson
 */
public class AquaTheme extends DefaultMetalTheme {
    public String getName() { return "Aqua"; }
    private final ColorUIResource primary1 = new ColorUIResource(102, 153, 153);
    private final ColorUIResource primary2 = new ColorUIResource(128, 192, 192);
    private final ColorUIResource primary3 = new ColorUIResource(159, 235, 235);
    protected ColorUIResource getPrimary1() { return primary1; }
    protected ColorUIResource getPrimary2() { return primary2; }
    protected ColorUIResource getPrimary3() { return primary3; }
}

Oceanテーマはこの手法を単に新たな極限まで広げたもので、新しいリソースを追加し、ルック・アンド・フィールの基本プロパティだけではなく、他のものも更新します。


Synthのルック・アンド・フィールを探る

私がこのクラスに名前を付けたわけではありませんが、J2SE 5.0リリースの最新ルック・アンド・フィールであるSynthは、SF映画の登場人物のように聞こえます。Synthはプログラマー以外の人にもカスタム化が行えるようにすることを目標とした、(「テーマ」に止まらない)「完全な」ルック・アンド・フィールです。Synthでは、フォントや色を変更するために既存のルック・アンド・フィールやテーマをサブクラス化するのではなく、XMLファイルを修正するのです。別の(または変更された)XMLファイルをロードすれば、新しいルック・アンド・フィールが得られます。リスト2は、プログラムのルック・アンド・フィールに対するSynthの設定がどのようになるかを示しています。


リスト2. Synthに対してルック・アンド・フィールを設定する
                
  SynthLookAndFeel synth = new SynthLookAndFeel();
  Class aClass = SynthTest.class;
  InputStream is = aClass.getResourceAsStream("file1.xml");
  synth.load(is, aClass);
  UIManager.setLookAndFeel(synth);

幾つかの例外処理を投げ込み、file1.xmlファイルの内容を単に変更するだけで、プログラムの外観を変更することができるのです。

XMLにおける大部分のものと同様、ファイルの内容はDocument Type Definition (DTD) で記述されます(DTDへのリンクはjavax.swing.plaf.synthパッケージのJavadocページにあります)。SynthLookAndFeelインスタンスのload()メソッドに渡されるXMLファイルにコンポーネントを記述するだけで、アプリケーションの外観が変わります。リスト3はこの説明で、JButton制御の外観をカスタム化するためのXMLファイルを示します。ここではフォントをデフォルトとして24ポイントで太字の固定スペース・フォントに設定し、マウスがボタンの上を動く時には48ポイントで斜字体のserifフォントにします。これらはプログラムへの使用に推奨できるようなフォントではありませんが、動作を見せるためだけに使っています。


リスト3. JButton制御をカスタム化する
                
<synth>
  <style id="button">
    <font name="Monospaced" size="24" style="BOLD"/>
    <state value="MOUSE_OVER">
      <font name="Serif" size="48" style="ITALIC"/>
    </state>
  </style>
  <bind style="button" type="region" key="Button"/>
</synth>

このXMLファイルに関して一つ注意しておくと、styleタグで規定されるidは、bindタグでのstyle属性と一致するようにして使われます。従って(bindタグのkey属性で規定されるように)リスト3のXMLファイルでボタン制御をカスタム化すると、図3と図4のようになります。


図3. 24ポイントで太字の固定スペース・フォント
 24 Point Bold Monospaced Font

図4. 48ポイントで斜字体のserifフォント
 48 Point Italic Serif Font

図3と図4を生成するための完全なプログラムをリスト4に示します(このプログラムはDownloadセクションから入手できるソース・ファイルにも含まれています)。


リスト4. Synthをデモするプログラム
                
import java.awt.EventQueue;
import java.io.InputStream;
import java.text.ParseException;
import javax.swing.JButton;
import javax.swing.JFrame;
import static javax.swing.JFrame.*;
import javax.swing.UIManager;
import javax.swing.plaf.synth.SynthLookAndFeel;
public class SynthTest {
  public static void main(String args[]) {
    Runnable runner = new Runnable() {
      public void run() {
        SynthLookAndFeel synth = new SynthLookAndFeel();
        try {
          Class aClass = SynthTest.class;
          InputStream is = aClass.getResourceAsStream("file1.xml");
          if (is == null) {
            System.err.println("Unable to find theme configuration");
            System.exit(-1);
          }
          synth.load(is, aClass);
        } catch (ParseException e) {
          System.err.println("Unable to load theme configuration");
          System.exit(-2);
        }
        try {
          UIManager.setLookAndFeel(synth);
        } catch (javax.swing.UnsupportedLookAndFeelException e) {
          System.err.println("Unable to change look and feel");
          System.exit(-3);
        }
        JFrame frame = new JFrame("Tester");
        frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
        JButton button = new JButton("Hello, World");
        frame.add(button);
        frame.setSize(400, 200);
        frame.setVisible(true);
      }
    };
    EventQueue.invokeLater(runner);
  }
}

制御プログラムやSynthの使い方に関して、ここには何も華々しいものはありません。XML制御ファイルに対して使用できる設定を使いこなしているだけです。


まとめ

皆さんがMetalのsteel風ルック・アンド・フィールに飽きているものの、自分で独自のものを作りたくないのであれば、Metalルック・アンド・フィールのOceanテーマが一つの代替手段となります。Tigerでさらに面白いのは、Synthのルック・アンド・フィールです。全くプログラミングの知識が無くても、どういった色の組み合わせを使えば見栄えが良くなるかを理解しているデザイナーから、素晴らしいルック・アンド・フィールを手に入れることができるのです。Synthを使うためには、単にDTDをつかんでSynthと一緒に実行するだけです。DTDを説明しているSynth File Formatのドキュメントに書いてある通りにしさえすれば良いのです。



ダウンロード

内容ファイル名サイズダウンロード形式
Sample codej-tiger10194-source.zipHTTP

ダウンロード形式について


参考文献

著者について

Author photo

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

不正使用の報告のヘルプ

不正使用の報告

ありがとうございます。 このエントリーは、モデレーターの注目フラグが設定されました。


不正使用の報告のヘルプ

不正使用の報告

不正使用の報告の送信に失敗しました。


developerWorks: サイン・イン


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 利用条件

 


お客様が developerWorks に初めてサインインすると、プロフィールが作成されます。 プロフィールで選択した情報は公開されますが、いつでもその情報を編集できます。 お客様の姓名(非表示設定にしていない限り)とディスプレイ・ネームは、投稿するコンテンツと一緒に表示されます。

表示名をお選びください

developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

(半角英数字で3文字以上31文字以下にする必要があります)


「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 利用条件

 


この記事を評価する

コメント

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Java technology
ArticleID=226640
ArticleTitle=Tigerを使いこなす: OceanとSynthがMetalに出会う
publish-date=10192004
author1-email=jaz@zukowski.net
author1-email-cc=jaloi@us.ibm.com

タグ

Help
このタグで、My developerWorks のすべてのタイプのコンテンツを見つけるために検索フィールドを使用します。

スライダーバーを使用することで、より多く(少なく)タグを表示します。

人気のタグは、この特定のコンテンツ・ゾーン(例えば、Java テクノロジー、Linux や WebSphere など)に対するトップのタグを表示します。

マイ・タグは、この特定のコンテンツ・ゾーン(例えば、Java テクノロジー、Linux や WebSphere など)に対するお客様ご自身のタグを表示します。

このタグで、My developerWorks のすべてのタイプのコンテンツを見つけるために検索フィールドを使用します。人気のタグは、この特定のコンテンツ・ゾーン(例えば、Java テクノロジー、Linux や WebSphere など)に対するトップのタグを表示します。マイ・タグは、この特定のコンテンツ・ゾーン(例えば、Java テクノロジー、Linux や WebSphere など)に対するお客様ご自身のタグを表示します。