2016-04-14 31 views
0

Bir JTextArea'da unicode rune karakteri \ u16e6 görüntülemek istediğim bu basit programı hazırladım. Bu sembol, JFrame'in üst kısmında görüntülenir, ancak JTextArea'da gösterilmez. JTextArea'nın yazı tipini JFrame ile aynı olacak şekilde ayarladım, ancak hala boş bir kutu olarak \ u16e6 gösterecektir. JTextArea'da bunu veya herhangi bir rasgele unicode karakterini nasıl görüntüleyebilirim?JTextArea Bileşeninde Unicode Desteği

I JFrame ile aynı olacak şekilde JTextArea tipini belirledik
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

Ne ortamı içinde çalışan (Windows?) ve hangi JVM karakter kodlamasını var? 'Java' komutunuza [-Dfile.encoding = UTF-8'] (http://stackoverflow.com/q/361975/113632) ekleyerek deneyin, yardımcı olup olmadığına bakın. – dimo414

+0

'JTextArea'nın yazı tipini JFrame ile aynı olacak şekilde ayarladım,' - Bir JFrame'in başlık çubuğu bir Swing bileşeni değil, bir OS widget'idir. Dolayısıyla, işletim sistemi tarafından kullanılan font, çerçevenin getFont() yönteminde döndürülen Yazı Tipi ile aynı değildir. Bunun problemi çözmediğini biliyorum, sadece Yazı Tiplerinin farklı olduğunu, yani metin alanının karakteri gösteremediğini açıklıyor. Yani "\ u16e6" karakterini oluşturan bir font bulmanız gerekiyor. Bunu nasıl yapacağımı bilmiyorum. – camickr

+0

@AndrewThompson neden bu kapalı bir sorunun kopyası mı? Sormak için makul bir şey gibi görünüyor. – dimo414

cevap

0

, -

bir JFrame ait başlık çubuğu bir OS eklendi olan bir salıncak bileşen değildir. Dolayısıyla, işletim sistemi tarafından kullanılan font, çerçevenin getFont() yönteminde döndürülen Yazı Tipi ile aynı değildir. Bu nedenle, metin alanının Yazı Tipi, metin alanının karakter oluşturmaması için neden olduğunu düşündüğünüz Yazı Tipi değildir.

OS çerçevesi tarafından kullanılan Yazı Tipi'nin nasıl belirlendiğine ilişkin hiçbir fikrim yok. Bunu belirlesek bile, Swing için mevcut olmayabilir.

"\ u16e6" karakterini oluşturan bir yazı tipi bulmanız gerekiyor. Aşağıdaki program bir Yazı Tipi bulmak için kaba bir güç yöntemidir. Swing için mevcut tüm Yazı Tiplerini görüntüler. Bu yüzden, sembolünüzü gösteren bir Yazı Tipi buluncaya kadar yazı tipi üzerinde bir defa seçtim. Benim Windows platformunda sadece Yazı On

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); 
    } 
} 

gibi görünen:

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