2016-04-25 5 views
0

Java JTextPaneで作成したメモ帳は、英語を書くときに問題なく動作します。しかし、他の言語で書かれた手紙は、私の場合、バングラでは、空の四角形を示しています。どのように問題を解決するのですか?Java JTextPaneでのUTF-8文字の書き込み

+1

私は前にこの問題を抱えていました。答えは、あなたがUTFフォントを使用する必要があるということです。 – ControlAltDel

答えて

2

実行時に、Font.canDisplayUpTo(String)を使用して、インストールされているフォントの中から特定のテキストを表示できるものを特定できます。 Font.SANS_SERIFFont.SERIFなどの論理フォントは、通常、他のフォントで作成されており、さまざまな種類のスクリプトを扱うことができます。

スロベニア語のテキストを使用した例です。結果はこのマシンに表示されます。

enter image description here

import java.awt.*; 
import javax.swing.*; 
import javax.swing.event.*; 
import javax.swing.border.EmptyBorder; 
import java.util.Vector; 

public class CroationTextInGUI { 

    private JComponent ui = null; 
    private String text = "Bohinjska Češnjica"; 

    CroationTextInGUI() { 
     initUI(); 
    } 

    public void initUI() { 
     if (ui!=null) return; 

     ui = new JPanel(new BorderLayout(4,4)); 
     ui.setBorder(new EmptyBorder(4,4,4,4)); 

     String[] fontFamilies = GraphicsEnvironment. 
       getLocalGraphicsEnvironment(). 
       getAvailableFontFamilyNames(); 
     Vector<String> croatFreindlyFonts = new Vector<String>(); 
     for (String name : fontFamilies) { 
      Font font = new Font(name, Font.PLAIN, 20); 
      if (font.canDisplayUpTo(text)<0) { 
       croatFreindlyFonts.add(name); 
      } 
     } 
     final JList list = new JList(croatFreindlyFonts); 
     list.setVisibleRowCount(20); 
     list.getSelectionModel().setSelectionMode(
       ListSelectionModel.SINGLE_SELECTION); 
     ui.add(new JScrollPane(list), BorderLayout.LINE_START); 

     final JTextArea output = new JTextArea(text, 2, 12); 
     output.setLineWrap(true); 
     output.setWrapStyleWord(true); 
     ui.add(new JScrollPane(output)); 

     ListSelectionListener showFontListener = new ListSelectionListener() { 

      @Override 
      public void valueChanged(ListSelectionEvent e) { 
       Font f = new Font(
         list.getSelectedValue().toString(), Font.PLAIN, 50); 
       output.setFont(f); 
      } 
     }; 
     list.addListSelectionListener(showFontListener); 
     list.setSelectedIndex(0); 
    } 

    public JComponent getUI() { 
     return ui; 
    } 

    public static void main(String[] args) { 
     Runnable r = new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (Exception useDefault) { 
       } 
       CroationTextInGUI o = new CroationTextInGUI(); 

       JFrame f = new JFrame("Croation Text in GUI"); 
       f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
       f.setLocationByPlatform(true); 

       f.setContentPane(o.getUI()); 
       f.pack(); 
       f.setMinimumSize(f.getSize()); 

       f.setVisible(true); 
      } 
     }; 
     SwingUtilities.invokeLater(r); 
    } 
} 
+0

問題を解決するのに役立ちましたら、[受け答えしてください](http://meta.stackexchange.com/a/5235/155831)してください。 –

関連する問題