Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在JavaSwing中使用Wingdings字体_Java_Swing_Wingdings - Fatal编程技术网

如何在JavaSwing中使用Wingdings字体

如何在JavaSwing中使用Wingdings字体,java,swing,wingdings,Java,Swing,Wingdings,当我尝试使用Wingdings字体(或其他符号字体)时,文本显示为矩形,而不是正确的文本。如何获得要显示的正确字符 import java.awt.*; import javax.swing.*; public class WingdingsFontDisplay extends JFrame { public static void main(String[] args) { new WingdingsFontDisplay(); } pub

当我尝试使用Wingdings字体(或其他符号字体)时,文本显示为矩形,而不是正确的文本。如何获得要显示的正确字符

import java.awt.*;
import javax.swing.*;

public class WingdingsFontDisplay extends JFrame
{
    public static void main(String[] args)
    {
        new WingdingsFontDisplay();
    }

    public WingdingsFontDisplay()
    {
        this.setSize(500,150);
        this.setTitle("Fun with Fonts");
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //This shows that I do have "Wingdings" available
        GraphicsEnvironment g;
        g = GraphicsEnvironment.getLocalGraphicsEnvironment();
        String[] fonts = g.getAvailableFontFamilyNames();
        for(String f : fonts)
        {
            System.out.println(f);
        }

        //Displaying text in the Wingdings font shows rectangles
        JLabel wingdingsText = new JLabel("All work and no play makes Jack a dull boy");
        Font f1 = new Font("Wingdings", Font.PLAIN, 14);
        wingdingsText.setFont(f1);
        this.add(wingdingsText, BorderLayout.NORTH);

        //Displaying text in Arial works correctly
        JLabel arialText = new JLabel("All work and no play makes Jack a dull boy");
        Font f2 = new Font("Arial", Font.PLAIN, 14);
        arialText.setFont(f2);
        this.add(arialText, BorderLayout.SOUTH);

        this.setVisible(true);
    }
}

您需要为所查找的符号使用适当的Unicode范围。在Java中,符号不覆盖在ASCII范围上,而是有自己独特的字符代码

您可以在中找到相应符号代码的参考。最常见的符号在0x2200和0x2700 Unicode范围内


您的Java安装可能包括SymbolTest示例小程序,这使得使用可用字体预览Unicode范围的表示变得非常简单。但是,请注意,更好的Java实现将对不在指定字体中的符号或字符使用字体替换,因此您需要确保实际使用的是指定字体。

谢谢。我下载了SymbolTest小程序,并用自己的方式完成了它。我意识到我可以通过在字符代码中添加0x1000来显示Wingding字符。但我不明白为什么我必须这样做。例如,如果我想打印出字符65,那么我想让程序打印字符65。大多数字体将显示类似于“A”的字体。Wingdings应该将其显示为一只举起两个手指的手。@Roy,Unicode的设计使每个字符值都有语义含义无论字体如何,“A”始终表示“A”,而“举起两个手指的手”始终表示“举起两个手指的手”,无论字体如何。这意味着Unicode文本始终具有语义含义,即使原始字体不可用,这在国际文本中很常见。浏览unicode.org了解更多信息。您的普通字体不支持所有Unicode,因为您永远不需要支持所有语言。如果字体不支持字符,则会出现指定的字形,例如矩形的问号,您可能会看到。在某些情况下也可能使用字体替换,这样即使您没有明确设置适当的字体,符号也会显示出来。字体是否知道每个字符的Unicode编号?所以即使“一只手举起两个手指”是Wingding字体中的字符65,它也知道它是Unicode 0x1041(DEC 4161)?