2016-04-14 30 views
0

我已經制作了這個簡單的程序,我希望在JTextArea中顯示unicode符文字符\ u16e6。此符號顯示在JFrame的頂部,但不顯示在JTextArea中。我已經將JTextArea的字體設置爲與JFrame相同,但它仍然只會顯示爲空白框。我怎樣才能在JTextArea中顯示這個或任何任意的Unicode字符?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

什麼環境,你在運行(的Windows?),什麼是JVM的字符編碼?嘗試[將'-Dfile.encoding = UTF-8'](http://stackoverflow.com/q/361975/113632)添加到'java'命令中,看看是否有幫助。 – dimo414

+0

'我已經將JTextArea的字體設置爲與JFrame相同,' - JFrame的標題欄不是Swing組件,它是一個操作系統小部件。因此,操作系統使用的字體與框架的getFont()方法中返回的字體不同。我知道這並不能解決問題,只是說明字體不同,這就是文字區域無法渲染字符的原因。所以你需要找到一個呈現「\ u16e6」字符的字體。我不知道該怎麼做。 – camickr

+0

@AndrewThompson爲什麼這是一個封閉問題的重複?這似乎是一個完全合理的問題。 – dimo414

回答

0

我已經設置了的JTextArea的字體是相同的JFrame, -

一個JFrame的標題欄不是Swing組件,它是OS的小部件。因此,操作系統使用的字體與框架的getFont()方法中返回的字體不同。因此,文本區域的字體不是您認爲應該是的字體,這就是文字區域無法渲染字符的原因。

我不知道如何確定OS框架使用的字體是什麼。即使我們可以確定,它也可能不適用於Swing。

所以你需要找到一個呈現「\ u16e6」字符的字體。下面的程序是一個蠻力方法來找到這樣一個字體。它顯示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平臺上唯一的字體顯示爲:

//jta.setFont(frame.getFont()); 
jta.setFont(new Font("Segoe UI Symbol", Font.PLAIN, 18));