Javaで扱うFont名


FontをJavaで扱う時、Font名には論理フォント名、フォントファミリー名、フォントフェース名の3つがあります。
下のsampleではFontオブジェクトから、論理フォント名、フォントファミリー名、フォントフェース名を入手しています。
JlabelオブジェクトにFontをセットしているわけではありません。

/*
   get  default  Font  from  component
*/

import  java.awt.*;
import  java.awt.event.*;
import  javax.swing.*;


class  ExamFontName    {
    public  static  void  main(String  args[])  {
        JFrame  jf    =  new  JFrame("Font  name");
        jf.addWindowListener(new  WindowAdapter() {
            public  void  windowClosing(WindowEvent  we)  {
                 System.exit(0);
            }
        });


        Font  f1       =  new  Font("Serif",  Font.PLAIN,  18);             
        JLabel  jlb11  =  new JLabel("Family name  = "  +  f1.getFamily());
        JLabel  jlb12  =  new JLabel("Face name  = "  +  f1.getFontName());
        JLabel  jlb13  =  new JLabel("Logical  name  = "  +  f1.getName());

        Font  f2       =  new  Font("SansSerif",  Font.BOLD | Font.ITALIC,  18);             
        JLabel  jlb21  =  new JLabel("Family name  = "  +  f2.getFamily());
        JLabel  jlb22  =  new JLabel("Face name  = "  +  f2.getFontName());
        JLabel  jlb23  =  new JLabel("Logical  name  = "  +  f2.getName());

        JPanel  jp    =  new  JPanel();    
         jp.setLayout(new GridLayout(3,2));
         jp.add(jlb11);
         jp.add(jlb21);
         jp.add(jlb12);
         jp.add(jlb22);
         jp.add(jlb13);
         jp.add(jlb23);

         jf.getContentPane().add(jp);
         jf.setBounds(10,20,500,100);
         jf.setVisible(true);                                  
    }
}
 



実行結果





JavaでFontを指定する時は、Java固有の論理Font名を使います。
それぞれのプラットフォームで扱う本当のFont名(物理フォント名)ではありません。

Family nameとFace nameの違いがよくわかりませんが、このスタイルまで含んだレベルで
論理Fontと物理Fontがマッピングされています。
マッピングが記述されているファイルは、font.propertiesです。

利用可能なFontを入手するsample code