論理フォントを使用する
それではフォント名の指定方法から確認していきます。
フォントには大きく分けて物理フォントと論理フォントがあります。物理フォントとはJavaアプリを実行している環境に実際にインストールされているフォントのことで、例えば「MSゴシック」などがそうです。ただし物理フォントを指定した場合には、環境によってはそのフォントが存在しない場合もあります。例えばWindowsのフォントを指定した場合にMACなどでフォントが存在しない場合もあります。
そこでJavaでは論理フォントが用意されています。論理フォントはそれぞれ物理フォントに対応するようになっており、例えば論理フォントの1つである「Serif」フォントを指定した場合には「Serif」フォントに対応した物理フォントが実際には使われます。
論理フォントを使うことでどのような環境でも使用できるプログラムの記述が可能になります。ただし論理フォントがどの物理フォントの対応するかは環境毎に異なっているので、例えばWindowsの環境で「Serif」フォントを指定した場合と、UNIX環境で「Serif」フォントを指定した場合では異なるフォントが使われる可能性がありますので注意して下さい。
論理フォントは「Serif」「Sans-serif」「Monospace」「Dialog」「DialogInput」の5つのフォントが用意されています。また論理フォントがどの物理フォントにマッピングされているかは「font.properties」ファイルに設定がされています。このファイルはJDKの中に含まれていますので、各環境に対応したJDKをインストールすると、その環境に合った「font.properties」ファイルが設定されていることになります。また自分でこのファイルは編集する事も可能です。
論理フォント名
論理フォント名はFontクラスで次のように定義されています。
値 | 説明 |
---|---|
Font.DIALOG | 論理フォント「Dialog」の正規ファミリ名を表す文字列定数です。 |
Font.DIALOG_INPUT | 論理フォント「DialogInput」の正規ファミリ名を表す文字列定数です。 |
Font.MONOSPACED | 論理フォント「Monospaced」の正規ファミリ名を表す文字列定数です。 |
Font.SANS_SERIF | 論理フォント「SansSerif」の正規ファミリ名を表す文字列定数です。 |
Font.SERIF | 論理フォント「Serif」の正規ファミリ名を表す文字列定数です。 |
例えばFont.SERIFは次のように定義されています。
SERIF public static final String SERIF
論理フォント「Serif」の正規ファミリ名を表す文字列定数です。Font の構築で、コンパイル時に名 前を検証するために役立ちます。
String型の値として定義されています。実際には次のように使用します。
Font font = new Font(Font.SERIF, Font.PLAIN, 12);
なお、Fontクラスの値として論理フォントが定義されたのは最近のバージョンからのようです。以前は次のように論理フォント名だけを文字列として記述していました。
Font font = new Font("Serif", Font.PLAIN, 12);
サンプルプログラム
では実際に試してみましょう。今回はJLabelを5つ作成し、それぞれに別々の論理フォントを設定してみます。
import javax.swing.*; import java.awt.Font; import java.awt.BorderLayout; public class JFontTest1 extends JFrame{ public static void main(String[] args){ JFontTest1 frame = new JFontTest1(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setBounds(10, 10, 250, 250); frame.setTitle("タイトル"); frame.setVisible(true); } JFontTest1(){ JLabel label1 = new JLabel("TEST LABEL"); label1.setFont(new Font(Font.SERIF, Font.PLAIN, 24)); JLabel label2 = new JLabel("TEST LABEL"); label2.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 24)); JLabel label3 = new JLabel("TEST LABEL"); label3.setFont(new Font(Font.MONOSPACED, Font.PLAIN, 24)); JLabel label4 = new JLabel("TEST LABEL"); label4.setFont(new Font(Font.DIALOG, Font.PLAIN, 24)); JLabel label5 = new JLabel("TEST LABEL"); label5.setFont(new Font(Font.DIALOG_INPUT, Font.PLAIN, 24)); JPanel p = new JPanel(); p.add(label1); p.add(label2); p.add(label3); p.add(label4); p.add(label5); getContentPane().add(p, BorderLayout.CENTER); } }
上記をコンパイルした後で実行すると次のように表示されます。
( Written by Tatsuo Ikura )