【发布时间】:2016-08-06 11:20:11
【问题描述】:
我制作了这个简单的程序,我想在其中显示一个 JTextArea 中的 unicode 符文字符 \u16e6。该符号显示在 JFrame 的顶部,但不在 JTextArea 中。我已将 JTextArea 的字体设置为与 JFrame 相同,但它仍然只会将 \u16e6 显示为空框。如何在 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");
}
}
【问题讨论】:
-
您在什么环境下运行(Windows?),JVM 的字符编码是什么?尝试adding
-Dfile.encoding=UTF-8到您的java命令,看看是否有帮助。 -
I have set the font of the JTextArea to be the same as the JFrame,- JFrame 的标题栏不是 Swing 组件,它是 OS 小部件。所以操作系统使用的字体和框架的getFont()方法返回的Font是不一样的。我知道这并不能解决问题,它只是说明字体不同,这就是文本区域无法呈现字符的原因。所以你需要找到一种能呈现“\u16e6”字符的字体。我不知道该怎么做。 -
@AndrewThompson 为什么这是一个封闭问题的副本?这似乎是一个非常合理的问题。
-
@dimo414 “为什么这是一个封闭问题的副本?..” 因为第一个答案给出了如何找到合适字体的完整示例。 “这似乎是一个完全合理的问题。” 没有 MCVE 或重复的票数接近并不意味着不合理。
-
@AndrewThompson,发布了一个 MCVE。关于重复,我在发布答案之前也进行了搜索,但没有找到您的答案。但你是对的,你的解决方案比我的要完整得多。您需要做的就是更改文本字符串以包含您要显示的 unicode 字符。至少用我的蛮力方法我想出了相同的答案:)