Unicode字符不兼容?

时间:2018-01-26 19:15:34

标签: java swing unicode fonts jbutton

我在Java上使用swing进行字符编码时遇到问题。 我想写这个角色:

"\u2699"

这是一个简单的JButton上的装备,但是当我开始我的程序时,我只得到一个带方形而不是齿轮的JButton。这是一行:

opt.setText("\u2699");

其中opt是按钮。

按钮结果:

This is the button

我可以更改摆动字符编码或其他内容吗? 感谢。

2 个答案:

答案 0 :(得分:4)

如安德烈亚斯所述,使用支持该角色的Font。但除非为应用程序提供合适的字体,Font API提供了在运行时发现兼容字体的方法。它提供了类似的方法:

在这个例子中,我们在这个系统上显示了十几种字体,它们将显示齿轮字符。

enter image description here

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

public class GearFonts {

    private JComponent ui = null;
    int codepoint = 9881;
    String gearSymbol = new String(Character.toChars(codepoint));

    GearFonts() {
        initUI();
    }

    public void initUI() {
        if (ui!=null) return;

        ui = new JPanel(new GridLayout(0,2,5,5));
        ui.setBorder(new EmptyBorder(4,4,4,4));

        Font[] fonts = GraphicsEnvironment.
                getLocalGraphicsEnvironment().getAllFonts();
        for (Font font : fonts) {
            if (font.canDisplay(codepoint)) {
                JButton button = new JButton(gearSymbol + " " + font.getName());
                button.setFont(font.deriveFont(15f));
                ui.add(button);
            }
        }
    }

    public JComponent getUI() {
        return ui;
    }

    public static void main(String[] args) {
        Runnable r = new Runnable() {
            @Override
            public void run() {
                GearFonts o = new GearFonts();

                JFrame f = new JFrame(o.getClass().getSimpleName());
                f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
                f.setLocationByPlatform(true);

                f.setContentPane(o.getUI());
                f.pack();
                f.setMinimumSize(f.getSize());

                f.setVisible(true);
            }
        };
        SwingUtilities.invokeLater(r);
    }
}

答案 1 :(得分:1)

正如@Andreas指出的那样,需要将按钮设置为使用支持此Unicode值的字体。为了解决诸如此类的兼容性问题,fileformat.info是一个很好的资源。 Here是已知支持Gear字符的字体列表。这些包括例如DejaVu Sans和Symbola。