我正在尝试在jLabel中显示一些Unicode字符。例如,“华氏度”字符(℉或“\ u2109”)。仅当我使用默认字体大小时才会显示此字符,该字体大小恰好为11.当我更改字体大小时,字符将替换为空方格。我尝试了几种不同的大小和几种不同的fonts,据说可以支持各种各样的unicode字符。谁能告诉我为什么Swing只在特定的字体大小下显示这个unicode字符?
证明:
与UI相关的所有代码都是由NetBeans使用设计器自动生成的,但以下是我如何向jLabel提供文本:
private void btnConvertActionPerformed(java.awt.event.ActionEvent evt) {
if(optToFarenheit.isSelected())
{
int tempFahr = (int)((Double.parseDouble(txtInput.getText()))
* 1.8 + 32);
lblResult.setText(tempFahr + " ℉");
//lblResult.setText(tempFahr + " \u2109"); <-- Tried this too
}
}
答案 0 :(得分:3)
而不是“更改”字体,这可能会导致您使用不兼容的字体,只需更改标签的“默认”字体大小
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
public class TestUnicodeFont {
public static void main(String[] args) {
new TestUnicodeFont();
}
public TestUnicodeFont() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
}
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
frame.add(new TestPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class TestPane extends JPanel {
public TestPane() {
setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridwidth = GridBagConstraints.REMAINDER;
JLabel normal = new JLabel("Normal - ?");
JLabel byCode = new JLabel("Normal code - \u2109");
JLabel normalLarger = new JLabel("Large - ?");
normalLarger.setFont(normalLarger.getFont().deriveFont(48f));
JLabel byCodeLatger = new JLabel("Large code - \u2109");
byCodeLatger.setFont(byCodeLatger.getFont().deriveFont(48f));
add(normal, gbc);
add(byCode, gbc);
add(normalLarger, gbc);
add(byCodeLatger, gbc);
}
}
}
答案 1 :(得分:2)
在为您的组件更改Netbeans中的字体时,在字体对话框“从默认字体中导出字体”中有一个复选框,请确保选中它并且它应该可以正常工作。
或者您必须确保新字体支持unicode字符。例如,“Arial Unicode MS”也应该可以正常工作(在维基页面上提到)/
答案 2 :(得分:0)
我使用NetBeans编辑器中标签文本中的符号解决了类似的问题,首先使用Word中的符号生成文本,然后将其复制到标签的文本字段中。