Unicode characters in javax.swing only display when using the default font-size
我正在尝试在jLabel中显示一些Unicode字符。例如,"华氏度数"字符(℉或" \\\\\\\\ u2109 ")。仅当我使用默认字体大小(恰好是11)时才显示此字符。更改字体大小时,该字符将替换为一个空的正方形。我已经尝试了几种不同的大小和几种不同的字体,这些字体应该支持各种各样的unicode字符。谁能告诉我为什么Swing仅以特定的字体大小显示此Unicode字符?
证明:
与UI相关的所有代码都是由NetBeans使用设计器自动生成的,但是这是我向jLabel提供文本的方式:
1 2 3 4 5 6 7 8 9 | 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 } } |
代替"更改"字体(这可能会导致您使用不兼容的字体),请尝试简单地更改标签的"默认"字体的大小
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | 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); } } } |
当在Netbeans中为您的组件更改字体时,在字体对话框中有一个复选框"从默认字体派生字体",请确保已选中它并且该字体可以工作。
或者您必须确保新字体确实支持Unicode字符。例如," Arial Unicode MS"也应该可以正常工作(在您的Wiki页面上已提及)/
我通过在NetBeans编辑器中的标签文本中使用符号解决了类似的问题,首先在Word中生成带有符号的文本,然后将其简单地复制到标签的文本字段中。