Fontを指定する
Fontクラスを使ってFontの種類、大きさの指定が可能です。
Fontオブジェクトは生成された後にstyle、sizeを変更できません。new演算子で新たに生成するか、derive()
methodでコピーし、新たに生成します。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class ExamFont {
public static void main(String args[]) {
JFrame jf = new JFrame("Font test");
jf.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent we) {
System.exit(0);
}
});
ExamFont ef = new ExamFont();
ExamFont.FontPanel fp = ef.new FontPanel(); //inner class
jf.getContentPane().add(fp);
jf.setBounds(20,50,300,500);
jf.setVisible(true);
}
class FontPanel extends JPanel {
public void paint(Graphics g) {
Font f1 = new Font("Serif", Font.PLAIN,18);
g.setFont(f1);
g.drawString("Serif, PLAIN, 18", 10, 20);
Font f2 = new Font("Serif",Font.BOLD ,18);
g.setFont(f2);
g.drawString("Serif, BOLD, 18", 10, 40);
Font f3 = new Font("Serif",Font.ITALIC ,18);
g.setFont(f3);
g.drawString("Serif, ITALIC, 18", 10, 60);
Font f4 = new Font("Serif", Font.BOLD | Font.ITALIC ,18);
g.setFont(f4);
g.drawString("Serif, ITALIC-BOLD, 18", 10, 80);
Font f5 = new Font("SansSerif", Font.PLAIN,18);
g.setFont(f5);
g.drawString("SansSerif, PLAIN, 18", 10, 100);
Font f5b = new Font("SansSerif", Font.BOLD,18);
g.setFont(f5b);
g.drawString("SansSerif, BOLD, 18", 10, 120);
Font f6 = new Font("Dialog", Font.PLAIN,18);
g.setFont(f6);
g.drawString("Dialog, PLAIN, 18", 10, 140);
Font f7 = new Font("DialogInput", Font.PLAIN,18);
g.setFont(f7);
g.drawString("DialogInput, PLAIN, 18", 10, 160);
Font f8 = new Font("MonoSpaced", Font.PLAIN,18);
g.setFont(f8);
g.drawString("Monospaced, PLAIN, 18", 10, 180);
Font f9 = new Font("Symbol", Font.PLAIN,18);
g.setFont(f9);
g.drawString("Symbol, PLAIN, 18", 10, 200);
Font f10 = new Font("MS 明朝", Font.PLAIN,18); //not binary compatible
g.setFont(f10);
g.drawString("MS明朝, PLAIN, 18", 10, 220);
Font f11 = new Font("MS ゴシック", Font.PLAIN,18);
g.setFont(f11);
g.drawString("MSゴシック, PLAIN, 18", 10, 240);
}
}
}
|
![]() |
||
| Fontクラスの作成 引数に論理フォント名、スタイル、大きさを指定し、Fontクラスのオブジェクトを作成する事で、Fontの指定が可能になります。 実行結果4行目のようにスタイルを組み合わせる場合は、スタイル同士で論理和演算を行います。 new Font("Serif", Font.BOLD | Font.ITALIC ,18); 実行結果11行目、”MS明朝”にあるように、 API仕様書には論理フォントを指定してFontオブジェクトを作成すると書かれていますが、 プラットフォーム固有のFont名を記述しても動作するようです。 setFont() method 作成したFontオブジェクトを引数に与えて呼び出せば、後は表示するだけです。 Componentクラスから継承したメソッドですから、画面に長方形で表示される部品は全て Fontオブジェクトをセットできると言えます。 論理Font名"Symbol"が表示されないのは、ここの実行環境では 該当するFontが無いためか、論理Font名が認められていないのか、 font.propertiesにマッピングが無いためか、よくわかりません。 |
||
| コンピュータ上で1つの文字を特定する値を文字コードと言います。1つの文字を表示する際の文字の形状をグリフと呼びます。 Fontはグリフの集まりです。 |
|
| JavaでFontを扱う時には、それぞれのプラットフォームの環境に影響を受けます。 日本語に限らずFontを表示するには、1・Fontが物理的にインストールされている。2・Javaの論理フォントと物理フォントがマッピングされている 必要があります。 上記のサンプルコードをLinux上でコーディング、コンパイルしたバイナリ-コードをMS-Windows上で動かしても、日本語Fontは正しく表示されませんでした。あらためてMS-Windows上でコーディング、コンパイル、実行した結果が上の図です。 想像している原因は、以下の通りです。 Linuxでコーディング、日本語Font名をhardcodingした。 ↓ コンパイルで、Unicodeになる。 ↓ MS-Windowsで実行し、MS-Windowsのfont.propertiesを参照する。これは、日本語はSJISでされている。 つまり、論理Font名が日本語の場合、font.propertiesがSJISかで記述されるかEUCで記述されるかの影響を受ける。(あくまで推測) LinuxのJDK1.2以降で日本語を表示したい場合、JREのfont.propertiesを設定しなければなりません。 利用可能なFontを入手するsample code Fontに関するSunのページ |