Java中Font.createFont()后如何正确调用deriveFont()?

How to call deriveFont() correctly after Font.createFont() in Java?

我想调整自定义字体的大小以匹配我的布局。 但遗憾的是 font.deriveFont(128.0f); 根本没有效果。我已经尝试了一些我发现的提示,但没有任何帮助。

System.out.println(font) 的输出等于 java.awt.Font[family=Arial,name=Arial,style=plain,size=1]

package main;

import java.awt.Font;
import java.awt.FontFormatException;
import java.io.IOException;
import java.io.InputStream;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.border.EmptyBorder;

public class FontTest {
    public static void main(String[] args){

        String fName = "fonts/arial.ttf";
        InputStream is = FontTest.class.getResourceAsStream(fName);
        
        Font font = null;
        
        try {
            font = Font.createFont(Font.TRUETYPE_FONT, is);
            font.deriveFont(128.0f);
        } catch (FontFormatException | IOException e) {
            e.printStackTrace();
        }

        JFrame frame = new JFrame();
        frame.setSize(200, 200);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        EmptyBorder padding_h1 = new EmptyBorder(10, 10, 10, 10);
        
        System.out.println(font);
        JLabel text = new JLabel("Hallo Welt!");
        text.setFont(font);
        text.setBorder(padding_h1);
        
        frame.add(text);
        frame.setVisible(true);
    }
}

font.deriveFont不变font。相反,它:

Creates a new Font object by replicating the current Font object and applying a new size to it.

新创建的 Font 对象是 returned。

所以就这样称呼它:

font.deriveFont(128.0f);

将创建一个新的 Font 对象,并立即将其丢弃,因为您根本没有使用 return 值。

您可以将 deriveFont 调用移动到您需要新字体的位置:

text.setFont(font.deriveFont(128.0f));

或者,通过重新分配实际更改 font

font = font.deriveFont(128.0f);