2016-04-14 5 views
0

私はこの単純なプログラムを作って、JTextAreaにUnicodeルーン文字\ u16e6を表示したいと考えています。このシンボルは、JFrameの上部に表示されますが、JTextAreaには表示されません。 JTextAreaのフォントをJFrameと同じに設定しましたが、空のボックスとして\ u16e6しか表示されません。 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

あなたがどのような環境を実行していて、JVMの文字エンコーディングは何ですか? 'java'コマンドに[-Dfile.encoding = UTF-8'(http://stackoverflow.com/q/361975/113632)を追加してみてください。 – dimo414

+0

'JTextAreaのフォントをJFrameと同じに設定しました。 ' - JFrameのタイトルバーはSwingコンポーネントではなく、OSウィジェットです。したがって、OSによって使用されるフォントは、フレームのgetFont()メソッドで返されるFontと同じではありません。私はこれが問題を解決しないことを知っています、それはただフォントが異なっていることを説明しています、なぜ文字領域が文字をレンダリングできないのかです。だからあなたは "\ u16e6"文字をレンダリングするフォントを見つける必要があります。私はそれをする方法を知らない。 – camickr

+0

@AndrewThompsonなぜ閉じた質問の複製ですか?それは完全に合理的なものであるように思えます。 – dimo414

答えて

0

私は、JFrameのと同じになるようにJTextAreaにのフォントを設定している -

たJFrameのタイトルバーはSwingコンポーネントではありません、それはOSウィジェットです。したがって、OSによって使用されるフォントは、フレームのgetFont()メソッドで返されるFontと同じではありません。したがって、テキスト領域のフォントは、テキスト領域が文字をレンダリングできない理由であると思われるフォントではありません。

OSフレームで使用されているフォントがどのようなものかを判断する方法はありません。たとえそれを判断できたとしても、それはSwingには利用できないかもしれません。

"\ u16e6"文字をレンダリングするフォントを見つける必要があります。次のプログラムは、そのようなFontを見つけるための強力な方法です。 Swingに利用可能なすべてのフォントを表示します。だから私はあなたのシンボルを表示するフォントが見つかるまで、一度にフォントを選択しました。

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プラットフォームでのみフォントがあるように思われる:(?Windowsの場合)

//jta.setFont(frame.getFont()); 
jta.setFont(new Font("Segoe UI Symbol", Font.PLAIN, 18)); 
関連する問題