簡體   English   中英

Java中的Unicode符號(箭頭)

[英]Unicode symbols (arrows) in Java

我想在我的應用程序中使用以下符號作為按鈕:

箭頭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

但我找不到,我應該使用哪個代碼。

我建議使用按鈕上的圖標而不是特殊字符,因為顯示的能力可能會受到客戶端工作站上字體可用性的強烈影響。

您要使用的unicode代碼點是私有使用區域的一部分 ,即每個字體制造商都可以隨意在任何位置放置他們喜歡的任何字符。 用於查找箭頭字符的字體只是與用於顯示按鈕文本的字體不同的字體。 如果按鈕文本將\\ uE318和\\ uE313映射到某些中文(?)graphem,那就沒錯了 ,只是不同。

盡管有多個人提出了這個論點,但你應該避免使用這些代碼點,因為你不能依賴用戶系統顯示這些字符的字體,你在例子中獲得錯誤字符的原因完全被遺漏了。 您嘗試繪制的所有符號都位於“私人使用區域”中,這意味着所涉及的符號在每種字體中可能會有所不同。

Unicode標准規定:

專用區域(E000-F8FF)*專用區域不包含任何字符分配,因此不為該區域提供字符代碼圖表或名稱列表。

如果您嵌入要使用的特定字體以確保您可以使用這些代碼點,那很好。 但這確實意味着您應該在代碼中使用\\ u ####表示法,因為直接將字符嵌入為Unicode意味着除非有人以正確的字體查看它,否則源將沒有意義。

總而言之,使用圖標可能更好,除非您已經擁有一個符號字體,您認為它遠遠優於您可能做的任何圖形工作。

◀▶

幾何形狀圖表中有幾個符號與您想要的符號相近。 但是,正如其他人所說,使用圖標並遠離私人使用區域。

我還建議使用圖標。 並非所有字體都包含所有unicode字符點的符號。

您可以通過指定特定字體來使其工作。 但是,如果在Windows 7計算機上找到該字體,但在Mac OS X或Linux或Windows XP上找不到該怎么辦? 然后系統將根據瀏覽器默認值選擇另一種字體,並且該默認值可能沒有您想要的符號。

我建議如果您擔心客戶端字體顯示特定字符​​的能力,請使用以下內容:

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);
    }

Java源文件是UTF-8編碼的,因此您可以將所需的符號直接放在源代碼中(只需從字體查看器或Web中復制'粘貼',只要您使用體面的編輯器即可。 無需使用這種令人困惑的“\\ uXXXX”表示法。 例如,我發現這對科學記法中常用的希臘字母很有用(δ,ρ,ψ......) - 你甚至可以將它們用作變量名。

當然,您選擇的字體必須包含您想要的符號,否則它將無法使用。

我將使用按鈕上的Unicode字形進行防御,但實現Icon界面並使用paintIcon()繪制所需的任何內容都非常容易。 “創建自定義圖標實現”教程就是一個很好的例子; 此代碼顯示更復雜的動畫直方圖

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM