我在Java上使用swing进行字符编码时遇到问题。 我想写这个角色:
"\u2699"
这是一个简单的JButton上的装备,但是当我开始我的程序时,我只得到一个带方形而不是齿轮的JButton。这是一行:
opt.setText("\u2699");
其中opt是按钮。
按钮结果:
我可以更改摆动字符编码或其他内容吗? 感谢。
答案 0 :(得分:4)
如安德烈亚斯所述,使用支持该角色的Font
。但除非为应用程序提供合适的字体,Font
API提供了在运行时发现兼容字体的方法。它提供了类似的方法:
Font.canDisplay(char)
Font.canDisplay(int)
Font.canDisplayUpTo(String)
在这个例子中,我们在这个系统上显示了十几种字体,它们将显示齿轮字符。
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。