連載
» 2007年02月10日 00時00分 公開

プログラマーの常識をJavaで身につける(2):デスクトップの常識 (2/3)

[伊賀敏樹,NTTデータ ビジネスブレインズ]

「フォント」はOSに登録済みのものを使う

 次に、「フォント」を見ていきましょう。そもそも、フォントとは何なのかについては@IT Insider's Computer Dictionaryの[フォント]が詳しいので、そこを参照してみてください。

Windows XPワードパッドの「フォント」を見る

 まずは、Windows XPにインストール時から付属するワードパッドを使って、フォントがどのようなものなのか再確認してみましょう。ワードパッドのフォントドロップダウンには、Windows XPで利用可能なさまざまなフォントが一覧表示されます。文字を選択してフォントやサイズを変更してみましょう。

図8 ワードパッドのドロップダウンによるフォント変更 図8 ワードパッドのドロップダウンによるフォント変更

 次に、[書式]→[フォント]メニューによる「フォント」ダイアログを用いたフォント設定も行ってみましょう。

図9 「フォント」ダイアログ 図9 「フォント」ダイアログ

 ここで、フォントの種類やサイズを変更すると、画面上での表示や印刷を行う際のフォントの属性に変化が表れます。

 フォントを「MS Pゴシック」に設定していると、下の図10のように表示されます。

図10 ワードパッド(ゴシック) 図10 ワードパッド(ゴシック)

 これを「MS 明朝」に変更すると、下の図11のように表示されます。

図11 ワードパッド(明朝) 図11 ワードパッド(明朝)

 ボールドイタリック、あるいはフォントのサイズを変えるなどして、フォントが変化することを確認してください。

フォントを変更するAPIを利用する [java.awt.Font]

 それでは、フォントの変更をプログラミングでどのように実現できるのかを見ていきましょう。Java言語で、基本的にフォントをつかさどるクラスは「java.awt.Font」となります。下記のソースコードを実行してください。

SimpleFontSample.java
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class SimpleFontSample extends JPanel {
    private static final int FONT_SIZE = 36;

    
public SimpleFontSample() {
        // 背景色を白色にします。
        setBackground(Color.white);
        // フォントを変更します。
        setFont(new Font(
            "MS Pゴシック",Font.PLAIN,FONT_SIZE)); //(2)

    }
    public void paintComponent(final Graphics argGraphics) {
        super.paintComponent(argGraphics);
        argGraphics.drawString("あいうえおか", 10, FONT_SIZE);
        argGraphics.drawString("ABCDEFGHIJK", 10, FONT_SIZE * 2);
    }
    private static void createAndShowGUI() {
        // JFrameを作成して自分自身を張り付け、これを表示します
        final JFrame frame
            = new JFrame("フォント変更を確認するサンプル");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(new SimpleFontSample());
        frame.setLocationRelativeTo(null);
        frame.setSize(400, 400);
        frame.setVisible(true);
    }
    public static void main(final String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGUI();
            }
        });
    }
}

図12 フォント変更を確認するサンプル(ゴシック) 図12 フォント変更を確認するサンプル(ゴシック)

 行(2)に注目してください。JPanelのsetFontメソッドを使って、フォントを変更しています。フォントはFontクラスのコンストラクタに「フォント名」「フォントのスタイル定数」「フォントのポイントサイズ」を与えることにより作成できます。フォント名には、フォントファミリ名の指定を行う方法もありますが、ここでは説明を割愛します。詳しくは、APIリファレンスを参照ください。

 次に、フォントを「MS 明朝」へと変更しましょう。行(2)を下記のように書き換えて実行してください。

    setFont(new Font("MS 明朝", Font.PLAIN, FONT_SIZE));

ワンポイント

「MS 明朝」の個所は全角文字、半角文字が別のものとして扱われます。この例におけるフォント名はすべて全角で指定してください。


 ワードパッドで試したのと同様に、フォントが変化していることを確認してみましょう。

図13 フォント変更を確認するサンプル(明朝) 図13 フォント変更を確認するサンプル(明朝)

 さらに「Font.PLAIN」の個所を、「Font.BOLD | Font.ITALIC」に変更してみましょう。行(2)を下記のように書き換えて実行してください。

    setFont(new Font(
        "MS 明朝",Font.BOLD | Font.ITALIC,FONT_SIZE));

図14 フォント変更を確認するサンプル(ボールドイタリック) 図14 フォント変更を確認するサンプル(ボールドイタリック)

 これは、先に出てきた「フォント」ダイアログで、スタイルにボールドとイタリックを同時に指定したものと同様です。

フォントの一覧を取得する

 今度は、JavaのAPIを使ってフォントの一覧を取得します。

SimpleEnumFontSample.java
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.GraphicsEnvironment;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class SimpleEnumFontSample extends JPanel {
    private static final int FONT_SIZE = 14;

     public SimpleEnumFontSample() {
        // 背景色を白色にします
        setBackground(Color.white);
        // フォントを変更します
        setFont(
            new Font("MS 明朝",Font.PLAIN,FONT_SIZE)); // (4)

    }
    public void paintComponent(final Graphics argGraphics) {
        super.paintComponent(argGraphics);
        final String fontFamilyNames[] = GraphicsEnvironment
            .getLocalGraphicsEnvironment()
            .getAvailableFontFamilyNames(); // (3)

        for (int index=0;index<fontFamilyNames.length;index++) {
            System.out.println(fontFamilyNames[index]);
            argGraphics.drawString(fontFamilyNames[index]
               , 10, FONT_SIZE * (index + 1));
        }
    }
    private static void createAndShowGUI() {
        // JFrameを作成して自分自身を張り付け、これを表示します
        final JFrame frame
            = new JFrame("フォントを一覧列挙するサンプル");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(new SimpleEnumFontSample());
        frame.setLocationRelativeTo(null);
        frame.setSize(400, 400);
        frame.setVisible(true);
    }
    public static void main(final String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGUI();
            }
        });
    }
}

 行(3)のGraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames()によって、利用可能なフォントの一覧をjava.lang.Stringの配列として取得できます。

 実行すると、フォント一覧の始めの部分をウィンドウに表示します。また、標準出力にもフォント一覧を出力しています。

図15 フォントを一覧列挙するサンプル 図15 フォントを一覧列挙するサンプル

 Windows XPのフォントダイアログで見た一覧と同様のものがプログラムで取得できていることが分かります。また、ここで得られたフォント名をjava.awt.Fontのコンストラクタに渡すと、そのフォントを利用できます。

 さらに、行(4)を下記のように書き換えて実行してください。

    setFont(new Font("DF行書体", Font.PLAIN, FONT_SIZE));

図16 フォントを一覧列挙するサンプル(フォント変更後) 図16 フォントを一覧列挙するサンプル(フォント変更後)

ワンポイント

皆さんの環境に導入されているフォントを指定する必要があります。「DF行書体」はこの記事を書いているマシンOSにたまたまインストールされていたフォントにすぎません。皆さんの環境に合わせて、フォント名を読み替えてください。くれぐれも、フォント名の全角・半角をお間違えなきよう。


ワンポイント

日本語の文字列に英語フォントを選択した場合には、日本語は表示されず、英数字のみが表示されるような現象が起こる場合があります。


Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。