Некоторые иностранные юникод-символы недоступны в Swing - PullRequest
0 голосов
/ 16 октября 2018

Если строка содержит определенные символы Юникода, они отображаются в виде блоков в JLabel, но отображаются правильно в JTextArea.

minimal_example_screenshot

Ниже приведено минимальное воспроизведение.

import java.awt.BorderLayout;
import java.awt.Dimension;
import javax.swing.Box;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.WindowConstants;

public class ShowText {
    static final String DEFAULT_TEXT = "1234567890"
        + "\u9dd7\u3400\u845b\u6e1a\u5653\ud840\udc0b\ud868\udd90\ud869\udeb2\u304b\u309a"
        + "---"
        + "\u9dd7\u3400\u845b\u6e1a\u5653\ud840\udc0b\ud868\udd90\ud869\udeb2\u304b\u309a"
        + "'12.txt";

    public static void main(String[] pArgs) throws Exception {

        JPanel jp = new JPanel(new BorderLayout());

        // Label text displayed incorrectly
        JLabel label = new JLabel(DEFAULT_TEXT);
        jp.add(label, BorderLayout.NORTH);

        jp.add(Box.createRigidArea(new Dimension(20,20)), BorderLayout.CENTER);

        // TextArea text displayed correctly
        JTextArea area = new JTextArea(DEFAULT_TEXT);
        JScrollPane scroll = new JScrollPane(area);
        jp.add(scroll, BorderLayout.SOUTH);

        JFrame jf = new JFrame();
        jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        jf.getContentPane().add(jp);
        jf.pack();
        jf.setSize(450, 100);
        jf.setVisible(true);
    }
}

Почему символы не отображаются правильно, и как я могу заставить их отображаться правильно?

(Для справки, я бегуJava 1.8.0_181 в macOS 10.14)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...