在JButton上显示Unicode字符

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

Thomas给出了一个很好的答案,但请注意,为了避免猜测哪些已安装的字体支持字符或字符串,我们可以迭代可用的字体并使用FontcanDisplayUpTo重载方法检查每个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); } } 

输出:

 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 

您需要设置支持所需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); }); } 

中文按钮

当您使用代理字符 (在D800-DFFF范围内)时,您需要使用高和低代理对。 请注意,这对代表了超出\uFFFF的Unicode点。

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

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