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);
}
}
Nguồn
2009-04-06 12:27:51
Bạn đang sử dụng nền tảng nào? Các cửa sổ? Linux? – Peter