您需要设置支持所需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);
});
}
Run Code Online (Sandbox Code Playgroud)

当您使用代理项字符
(在D800-DFFF范围内)时,您需要使用高和低代理项对.请注意,这对代表了超越的Unicode点\uFFFF.
代理对表示代码点
10000 16 +(H-D800 16)×400 16 +(L-DC00 16)
,其中H和L分别是高和低代理的数值.
字符串中未配对的代理字符(如原始问题中)无效,并将呈现为
.
Thomas给出了一个很好的答案,但请注意,为了避免猜测哪些已安装的字体支持字符或字符串,我们可以迭代可用字体并使用以下canDisplayUpTo重载方法检查每个字体Font:
Font.canDisplayUpTo(String)Font.canDisplayUpTo(CharacterIterator,start,limit)Font.canDisplayUpTo(char[],start,limit)例如
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);
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
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
Run Code Online (Sandbox Code Playgroud)