Java中的Unicode符号(箭头)

我想在我的应用程序中使用以下符号作为按钮:

箭头http://img402.imageshack.us/img402/3176/arrowso.jpg

我的代码:

Button goToFirstButton = new Button("\uE318"); Button prevPageButton = new Button("\uE312"); Button nextPageButton = new Button("\uE313"); Button goToLastButton = new Button("\uE319"); 

结果是

结果http://img693.imageshack.us/img693/9063/resultbu.jpg

看来,\ uE318和\ uE313是错误的。 我该怎么用? 对于goToLastButton和goToFirstButton,我更喜欢使用这个图像

alt text http://img3.imageshack.us/img3/5724/singlearrow.jpg

但我找不到,我应该使用哪个代码。

我建议使用按钮上的图标而不是特殊字符,因为显示function可能会受到客户端工作站上字体可用性的强烈影响。

您要使用的unicode代码点是私有使用区域的一部分 ,即每个字体制造商都可以随意在任何位置放置他们喜欢的任何字符。 用于查找箭头字符的字体只是与用于显示按钮文本的字体不同的字体。 如果按钮文本将\ uE318和\ uE313映射到某些中文(?)graphem,那就没有 ,只是不同。

尽管有多个人提出了这个问题,但你应该避免使用这些代码点,因为你不能依赖用户系统显示这些字符的字体,你完全错过了在你的例子中得到错误字符的原因。 您尝试绘制的所有符号都位于“私人使用区域”中,这意味着所涉及的符号在每种字体中可能会有所不同。

Unicode标准规定:

专用区域(E000-F8FF)*专用区域不包含任何字符分配,因此不为该区域提供字符代码图表或名称列表。

如果您嵌入要使用的特定字体以确保您可以使用这些代码点,那很好。 但这确实意味着您应该在代码中使用\ u ####表示法,因为将字符直接嵌入Unicode意味着除非有人以正确的字体查看它,否则源将没有意义。

总而言之,使用图标可能更好,除非您已经拥有符号字体,您认为它远远优于您可能执行的任何图形工作。

◀▶

在“ 几何形状”图表中,有几个符号与您想要的符号相近。 但是,正如其他人所说,使用图标并远离私人使用区域。

我还建议使用图标。 并非所有字体都包含所有unicode字符点的符号。

您可以通过指定特定字体来使其工作。 但是,如果在Windows 7计算机上找到该字体,但在Mac OS X或Linux或Windows XP上找不到,该怎么办? 然后系统将根据浏览器默认值选择另一种字体,默认情况下可能没有您想要的符号。

我建议如果您担心客户端字体显示特定字符​​的能力,请使用以下内容:

 private static final HashMap fontCache = new HashMap(); public static Font getFontThatCanDisplay(char c, int style, float size) { Font f = fontCache.get(c); if (f == null) { f = UIManager.getFont("Label.font"); for (Font font: GraphicsEnvironment.getLocalGraphicsEnvironment().getAllFonts()) { if (font.canDisplay(c)) { f = font; break; } } fontCache.put(c, f); } return f.deriveFont(style, size); } 

Java源文件是UTF-8编码的,因此您可以将所需的符号直接放在源代码中(只需从字体查看器或Web中复制粘贴),只要您使用一个不错的编辑器即可。 无需使用这种令人困惑的“\ uXXXX”表示法。 例如,我发现这对科学记法中常用的希腊字母很有用(δ,ρ,ψ……) – 你甚至可以将它们用作变量名。

当然,您选择的字体必须包含您想要的符号,否则它将无法使用。

我将使用按钮上的Unicode字形进行防御,但实现Icon界面并使用paintIcon()绘制所需的任何内容都非常容易。 “创建自定义图标实现”教程就是一个很好的例子; 此代码显示更复杂的动画直方图 。