在JButton上显示Unicode字符

时间:2017-02-19 22:41:46

标签: java swing unicode fonts

我正在尝试在"\uD83D"文本上显示此Unicode JButton,但是当我编译它时,它只显示未知字符的方块。

2 个答案:

答案 0 :(得分:5)

您需要设置支持所需Unicode字符的字体 以下示例依赖于我系统上安装的Code2000.ttf

public static void main(String[] args) throws Exception {
    SwingUtilities.invokeLater(() -> {
        JFrame frame = new JFrame("Test");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JButton button = new JButton("\u4E33");
        Font font = new Font("Code2000", Font.PLAIN, 36);
        button.setFont(font);
        frame.add(button);
        frame.pack();
        frame.setVisible(true);           
    });
}

Chinese button

使用surrogate characters时 (在D800-DFFF范围内),您需要使用高和低代理对。 请注意,此对表示超出\uFFFF的Unicode点。

  

代理对表示代码点
     10000 16 +(H - D800 16 )×400 16 +(L - DC00 16 )   其中H和L分别是高和低代理人的数值。

字符串中未配对的代理字符(如原始问题中所示) 无效,将呈现为unknown

答案 1 :(得分:5)

Thomas给出了一个很好的答案,但请注意,为了避免猜测哪些已安装的字体支持字符或字符串,我们可以迭代可用字体并使用canDisplayUpTo Font重载方法检查每个字体:

E.G。

import java.awt.Font;
import java.awt.GraphicsEnvironment;

public class FontCheck {

    public static void main(String[] args) {
        String s = "\u4E33";
        Font[] fonts = GraphicsEnvironment.
                getLocalGraphicsEnvironment().getAllFonts();
        System.out.println("Total fonts: \t" + fonts.length);
        int count = 0;
        for (Font font : fonts) {
            if (font.canDisplayUpTo(s) < 0) {
                count++;
                System.out.println(font.getName());
            }
        }
        System.out.println("Compatible fonts: \t" + count);
    }
}

输出:

Total fonts:    391
Arial Unicode MS
Dialog.bold
Dialog.bolditalic
Dialog.italic
Dialog.plain
DialogInput.bold
DialogInput.bolditalic
DialogInput.italic
DialogInput.plain
Microsoft JhengHei
Microsoft JhengHei Bold
Microsoft JhengHei Light
Microsoft JhengHei UI
Microsoft JhengHei UI Bold
Microsoft JhengHei UI Light
Microsoft YaHei
Microsoft YaHei Bold
Microsoft YaHei Light
Microsoft YaHei UI
Microsoft YaHei UI Bold
Microsoft YaHei UI Light
Monospaced.bold
Monospaced.bolditalic
Monospaced.italic
Monospaced.plain
NSimSun
SansSerif.bold
SansSerif.bolditalic
SansSerif.italic
SansSerif.plain
Serif.bold
Serif.bolditalic
Serif.italic
Serif.plain
SimSun
Compatible fonts:   35