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のページ |