2

JLabel 内にカスタム フォントを表示しようとしていますが、作成すると非常に小さなテキストとして表示されます。テキストが小さすぎて、指定したフォントを使用しているかどうかさえわかりません。使ったフォントはこちら。では、フォントが非常に小さい原因となっているのは何ですか?

package sscce;

import java.awt.Font;
import java.awt.FontFormatException;
import java.io.File;
import java.io.IOException;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class Main extends JFrame{

    public Main(){
        this.setSize(300, 300);
        this.setResizable(false);
        this.setLocationRelativeTo(null);
        this.setVisible(true);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


        GameFont fnt = new GameFont("/home/ryan/Documents/Java/Space Shooters/src/media/fonts/future.ttf", 20);
        Label lbl = fnt.createText("Level 1 asdf sadf saf saf sf ");

        this.add(lbl);
    }

    public static void main(String[] args){
        Main run = new Main();
    }

    public class GameFont{

        protected Font font;

        public GameFont(String filename, int fontSize){
            try{
                File fontFile = new File(filename);
                font = Font.createFont(Font.TRUETYPE_FONT, fontFile);
                font.deriveFont(fontSize);
            }catch(FontFormatException | IOException e){
            }
        }

        public Label createText(String text){
            Label lbl = new Label(font);
            lbl.setText(text);
            return lbl;
        }
    }

    public class Label extends JLabel{

        public Label(Font font){
            this.setFont(font);
        }
    }
}
4

1 に答える 1

3

Font APIの、deliverFont(...) メソッドをもう一度見てください。int パラメーターが渡された場合、メソッドはこれがサイズではなくフォントのスタイル(ボールド、イタリック、下線付き)を設定することを意味すると想定するため、サイズのintではなくfloatを渡します。メソッドによって返されるFont も使用する必要があります。deriveFont(...)

したがって、これを変更します。

   public GameFont(String filename, int fontSize){
        try{
            File fontFile = new File(filename);
            font = Font.createFont(Font.TRUETYPE_FONT, fontFile);
            font.deriveFont(fontSize);
        }catch(FontFormatException | IOException e){
        }
    }

これに:

   public GameFont(String filename, float fontSize){
        try{
            File fontFile = new File(filename);
            font = Font.createFont(Font.TRUETYPE_FONT, fontFile);
            font = font.deriveFont(fontSize);
        }catch(FontFormatException | IOException e){ 
           e.printStackTrace(); // ****
        }
    }

また、あなたがしているような例外を決して無視しないでください!

于 2012-12-17T17:40:16.843 に答える