JTextArea组件中的Unicode支持

时间:2016-04-14 18:20:12

标签: java swing unicode fonts

我制作了这个简单的程序,我希望在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");

   }
}

1 个答案:

答案 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) );