java - 是否有与 FontUtilities.getCompositeFontUIResource(Font) 等效的非专有等效项?

标签 java fonts awt

如果您只是使用 new Font("Arial", Font.PLAIN, 10) 创建字体,稍后,当您尝试显示该字体中缺少的字形时,您将得到熟悉的方 block 表明缺少字形。

很久以前,我们找到了解决此问题的解决方法 - 将字体传递给 FontUtilities.getCompositeFontUIResource(Font),然后您会得到一个处理字符回退的 Font字体本身不包含这些内容。

问题是,该实用程序位于 sun.font 中,我想消除编译器警告。

鉴于已经过去很多年了,现在有合适的方法来做到这一点吗?

演示:

import java.awt.Font;
import java.awt.GridLayout;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingUtilities;

import sun.font.FontUtilities;

public class TestFonts implements Runnable
{
    @Override
    public void run()
    {
        Font font = new Font("Arial", Font.PLAIN, 20);

        JLabel label1 = new JLabel("Before \u30C6\u30B9\u30C8");
        label1.setFont(font);

        JLabel label2 = new JLabel("After \u30C6\u30B9\u30C8");
        label2.setFont(FontUtilities.getCompositeFontUIResource(font));

        JFrame frame = new JFrame("Font Test");
        frame.setLayout(new GridLayout(2, 1));
        frame.add(label1);
        frame.add(label2);
        frame.pack();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }

    public static void main(String[] args)
    {
        SwingUtilities.invokeLater(new TestFonts());
    }
}

结果:

enter image description here

最佳答案

在深入研究 JDK 源代码后,我发现了一个直接调用内部方法的公共(public)方法。我不知道这被认为有多狡猾,但它至少是公共(public) API。 :)

        label2.setFont(StyleContext.getDefaultStyleContext()
            .getFont(familyName, style, size));

关于java - 是否有与 FontUtilities.getCompositeFontUIResource(Font) 等效的非专有等效项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35165617/

相关文章:

java - AWT-EventQueue-0

java改变变量参数值

java - 在网站上运行java类

java - HTML如何解析<字体颜色="testing">?

html - 更改博客中帖子的字体大小

html - <pre> 标签标记

java - 当由 FXMLLoader 初始化时,如何重写控件的方法?

java - 在二维码中嵌入 URL

java - 如何在java中的点击事件中获取按钮名称

java - 有没有办法在 Java AWT 中创建表?