我制作了这个简单的程序,我希望在JTextArea中显示unicode符文字符\ u16e6。此符号显示在JFrame的顶部,但不显示在JTextArea中。我已将JTextArea的字体设置为与JFrame相同,但它仍然只显示\ u16e6为空框。如何在JTextArea中显示这个或任意的unicode字符?
import java.awt.*;
import javax.swing.*;
public class WTextArea{
public static void main(String[] args){
JFrame frame = new JFrame("\u16e6");
frame.setSize(1000,1000);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
System.out.println(frame.getFont().toString());
Container content = frame.getContentPane();
JTextArea jta = new JTextArea();
jta.setFont(frame.getFont());
content.add(jta);
jta.setText("\u16e6");
}
}
答案 0 :(得分:0)
我已将JTextArea的字体设置为与JFrame相同, -
JFrame的标题栏不是Swing组件,它是OS小部件。因此,OS使用的字体与帧的getFont()方法中返回的字体不同。因此,文本区域的字体不是您认为它应该是的字体,这就是文本区域无法呈现字符的原因。
我不知道如何确定OS框架使用的字体是什么。即使我们可以确定,它也可能不适用于Swing。
所以你需要找一个呈现" \ u16e6"的字体。字符。以下程序是一种用于查找此类Font的强力方法。它显示Swing可用的所有字体。所以我一次只选择Font,直到找到一个显示符号的字体。
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import javax.swing.plaf.basic.*;
public class ComboBoxFonts extends JFrame implements ItemListener
{
JTextArea textArea;
JComboBox comboBox;
public ComboBoxFonts()
{
Font font = new Font("Courier New", Font.PLAIN, 16);
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment ();
Font [] fonts = ge.getAllFonts ();
comboBox = new JComboBox( fonts );
comboBox.setFont( font);
comboBox.addItemListener( this );
add( comboBox, BorderLayout.SOUTH );
textArea= new JTextArea("Some text - \u16e6 -", 3, 20);
textArea.setFont( font.deriveFont( 24.0f) );
add( new JScrollPane( textArea ) );
}
public void itemStateChanged(ItemEvent e)
{
Font font = (Font)e.getItem();
textArea.setFont( font.deriveFont( 24.0f ) );
}
public static void main(String[] args)
{
ComboBoxFonts frame = new ComboBoxFonts();
frame.setDefaultCloseOperation( EXIT_ON_CLOSE );
frame.pack();
frame.setLocationRelativeTo( null );
frame.setVisible( true );
}
}
在我的Windows平台上,唯一的Font似乎是:
//jta.setFont(frame.getFont());
jta.setFont(new Font("Segoe UI Symbol", Font.PLAIN, 18) );