2009-04-05 33 views
5

Có hành vi lạ của JTextArea khi hiển thị các ký tự japanese - Tôi nhận được các hình chữ nhật trống nổi tiếng thay vì chữ kanji. Điều lạ lùng nhất là JTextField hiển thị chúng một cách hoàn hảo (trong cả hai trường hợp tôi sử dụng họ font chữ "Tahoma"). Ngoài ra, nếu tôi đặt mã này:Cách hiển thị các ký tự japanese trong JTextArea

Font f = new Font("123", Font.PLAIN, 12); // This font doesn't exists 
    problemTextArea.setFont(f); 

... trước khi tôi viết chuỗi nhật bản vào vấn đềTextArea nó hiển thị kanji!

P.S. Xin lỗi vì tiếng Anh của tôi.

UPD: Tôi đang sử dụng Windows

+0

Bạn đang sử dụng nền tảng nào? Các cửa sổ? Linux? – Peter

Trả lời

10

Vấn đề là JTextArea sử dụng một phông chữ mặc định khác với JTextField. Tôi đã có cùng một vấn đề trong một ứng dụng tôi đã viết rằng phải hỗ trợ đa ngôn ngữ.

Lý do cho vấn đề của bạn là JTextArea thường được sử dụng để hiển thị phông chữ đơn cách, chẳng hạn như Chuyển phát nhanh mới. Thông thường Java không chứa ánh xạ bổ sung cho phông chữ đồ họa đơn cách nhau để hiển thị chữ Kanji.

Sửa chữa bạn có tác dụng, bởi vì không có phông chữ có tên "123", do đó, mặc định được thực hiện (hộp thoại). Phông chữ "hộp thoại" được ánh xạ nội bộ tới một họ phông chữ trong tệp font.properties của nền tảng của bạn. Đây sẽ là cùng một phông chữ mà JTextField sử dụng.

Tôi có bản sửa lỗi sau, để đảm bảo rằng định nghĩa phông chữ giống nhau được sử dụng trong TẤT CẢ các thành phần đồ họa. Bạn cũng có thể tìm thấy khóa cụ thể cho JTextArea và thay đổi nó. Bằng cách này bạn không phải lo lắng về phông chữ của bất kỳ thành phần nào, chúng sẽ được khởi tạo với hộp thoại.

Object fontDefinition = new UIDefaults.ProxyLazyValue("javax.swing.plaf.FontUIResource", null, new Object[] { "dialog", new Integer(Font.PLAIN), new Integer(12) }); 

java.util.Enumeration keys = UIManager.getDefaults().keys(); 
while (keys.hasMoreElements()) { 
    Object key = keys.nextElement(); 
    Object value = UIManager.get(key); 
    if (value instanceof javax.swing.plaf.FontUIResource) { 
     UIManager.put(key, fontDefinition); 
    } 
} 
Các vấn đề liên quan