Java中的Unicode符号(箭头)

6

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

箭头 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");

结果如下:

result http://img693.imageshack.us/img693/9063/resultbu.jpg

看起来,\uE318和\uE313是错误的。我应该使用什么代替?对于goToLastButton和goToFirstButton,我更喜欢使用这些图像

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

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


1
图片不再可见,因此问题的实用性大大降低。 - Ewoks
8个回答

8

我建议使用图标代替特殊字符在按钮上,因为客户端工作站上的可用字体可能会严重影响显示能力。


这是一个网络应用程序,结果在任何操作系统/浏览器上必须相同吗? - cupakob
即使它是一个Web应用程序,您也无法保证客户端已安装字体。除非您的计划是在服务器端生成这些图片(这是情况吗?) - Grzegorz Oledzki
我将仅翻译文本内容,不会生成图片 :) - cupakob

7
你想使用的Unicode代码点是专用区域的一部分,即每个字体制造商都可以在任何位置放置他们喜欢的字符。您用于查找箭头字符的字体只是与用于显示按钮文本的字体不同。如果按钮文本将\uE318和\uE313映射到某些中文(?)图形,则这并不是错误,只是不同。

4
虽然有多个人认为你应该避免使用这些代码点,因为你不能依赖用户系统具有显示这些字符的字体,但在你的示例中出现错误字符的原因被完全忽略了。你试图绘制的所有符号都在“专用使用区”,这意味着涉及到的符号在每个字体中可能是不同的。
Unicode标准规定:
专用使用区(E000-F8FF) * 专用使用区不包含任何字符分配,因此没有提供任何字符代码表或名称列表。
如果您嵌入特定的字体以确保您可以使用这些代码点,那么没问题。但这意味着您应该确实在您的代码中使用\u####表示法,因为直接将字符作为Unicode嵌入意味着源代码只有在正确的字体下才能理解。
总之,除非您已经拥有一个您认为比其他任何图形工作都好的符号字体,否则最好使用图标。

3

几何形状图表中有一些接近你想要的符号。但是,正如其他人所说,使用图标并避免使用私用区。

◀ ▶


2

如果您担心客户端字体无法显示特定字符,请使用以下方法:

private static final HashMap<Character, Font> fontCache = new HashMap<Character, Font>();
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);
    }

2
Java源代码文件使用UTF-8编码,因此您可以直接在源代码中放置所需符号(只需从字体查看器或Web中复制并粘贴),只要使用一个好的编辑器即可。不需要使用这种令人困惑的"\uXXXX"符号。例如,我发现这对于科学记数中常用的希腊字母(δ、ρ、ψ...)非常有用——您甚至可以将它们用作变量名。
当然,您选择的字体必须具有所需的符号,否则它将无法正常工作。

这并不是严格准确的 - Java源文件可以使用UTF-8编码。你可能不会感到惊讶,有一个问题是关于它们是否应该使用UTF-8编码 :) https://dev59.com/qnI95IYBdhLWcg3wvgh9 - McDowell
Java源文件可以使用编译器支持的任何编码。UTF-8并没有被指定为唯一的选项。JLS只是说“程序使用Unicode字符集编写”,这意味着源代码可以包含任何Unicode字符,但不指定编码方式。 - Joachim Sauer
啊,好的。显然编译器使用系统的默认编码,除非另有规定,所以这确实是一个潜在的陷阱。 - Joonas Pulakka

1

我也建议使用图标。并非所有字体都具有所有Unicode字符点的符号。

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


1

我会为在按钮上使用Unicode字形进行辩护,但实现Icon接口并使用paintIcon()绘制任何您想要的东西真的很容易。教程"创建自定义图标实现"是一个很好的例子;这段代码展示了一个更复杂、动画化的直方图


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接