在awt Label中无法正确显示Unicode文本

时间:2016-06-07 16:28:09

标签: java unicode awt

我有以下简单的Java测试程序:

import java.awt.*;

public class test3 {


    public test3() {
        Frame f = new Frame();
        f.setLayout(null);
        f.setBounds(50,50, 400,400);
        Label l = new Label("你好吗");
        l.setBounds(10,100, 50,30);
        TextField t = new TextField("你好吗",20);
        t.setBounds(100,100,50,30);
        f.add(l);
        f.add(t);
        f.setVisible(true);
    }

    public static void main(String[] args) {
        test3 t = new test3();
    }
}

运行此测试程序的输出是标签文本的3个方框,并且在文本字段中你好吗(你是如何用中文)。

TextFieldLabel是awt组件,虽然在文本字段中显示unicode没有问题,但不确定如何让Label正确显示unicode。

2 个答案:

答案 0 :(得分:2)

很可能是awt Label使用的字体问题。您需要找到支持UTF-8的字体并使用它。但是,如果您使用Swing组件而不是AWT组件,它可以正常工作:

import javax.swing.*;

public class Example {

    public static void main(String[] args) {

        JFrame f = new JFrame();
        f.setLayout(null);
        f.setBounds(50,50, 400,400);
        JLabel l = new JLabel("你好吗");
        l.setBounds(10,100, 50,30);
        JTextField t = new JTextField("你好吗",20);
        t.setBounds(100,100,50,30);
        f.add(l);
        f.add(t);
        f.setVisible(true);
    }
}

输出:

enter image description here

答案 1 :(得分:0)

Label使用不支持UTF-8的默认字体。只需将Label的字体更改为支持UTF-8的字体。

例如,您也可以使用

TextField设置相同的Label字体
l.setFont(t.getFont());

但无论如何,您应该考虑使用swing代替awt组件。