4

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

1 に答える 1

5

求めるシンボルには、適切なUnicode範囲を使用する必要があります。Javaでは、記号はASCII範囲にオーバーレイされませんが、独自の文字コードがあります。

適切なシンボルコードへの参照は、 http: //unicode.org/~asmus/web-wing-ding-ext.pdfにあります。最も一般的な記号は、0x2200および0x2700Unicodeの範囲です。

JavaインストールにはSymbolTestサンプルアプレットが含まれている場合があります。これにより、使用可能なフォントを使用してUnicode範囲の表示を簡単にプレビューできます。ただし、より優れたJava実装では、指定されたフォントにない記号または文字のフォント置換が使用されるため、実際に指定されたフォントを取得していることを確認する必要があることに注意してください。

于 2012-10-06T05:03:05.460 に答える