에서
덕분에 당신은 당신이 사용하고자하는 모든 문자를 지원할 수있는 글꼴을 지정해야합니다.
많은 수의 문자를 지원하려는 경우 불가능할 수 있습니다. 예를 들어, 글꼴 MingLiU-ExtB
은
과 같이 일반적인 중국어는 지원하지 않지만 漢字
과 같은 일반적인 중국어 문자는 지원하지 않습니다.
Arial Unicode MS
또는 MingLiU
과 같은 글꼴은 일반적인 문자를 지원하지만 일반적이지 않은 글꼴은 지원하지 않습니다.
따라서 JTextField
으로는 불가능할 수 있습니다.
그러나 JTextPane
은 적어도 Windows에서 실행할 때 더욱 유연합니다. 지정한 글꼴에없는 문자가 필요한 경우 다른 대체 글꼴의 문자를 추가합니다. (. 나는 자바에서 다른이 문제는 윈도우 자체에서 오는 될 수 글꼴 및하지를 선택하기 위해 사용하는 어떤 알고리즘 아무 생각이 없다 :. Font Fallback here의 설명을 참조)를
이 코드로 JTextField
및 JTextPane
의 몇 가지 예를 제공합니다 몇 가지 글꼴.
public class ChineseFont {
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
String text = "test test 漢字.";
JTextField textField1 = new JTextField(text);
textField1.setFont(new Font("Arial Unicode MS", Font.PLAIN, 24));
JLabel label1 = new JLabel("JTextField " + textField1.getFont().getFontName());
JTextField textField2 = new JTextField(text);
textField2.setFont(new Font("MingLiU", Font.PLAIN, 24));
JLabel label2 = new JLabel("JTextField " + textField2.getFont().getFontName());
JTextField textField3 = new JTextField(text);
textField3.setFont(new Font("MingLiU-ExtB", Font.PLAIN, 24));
JLabel label3 = new JLabel("JTextField " + textField3.getFont().getFontName());
JTextPane textPane4 = new JTextPane();
textPane4.setFont(new Font("Arial Unicode MS", Font.PLAIN, 24));
textPane4.setText(text);
JLabel label4 = new JLabel("JTextPane " + textPane4.getFont().getName());
JTextPane textPane5 = new JTextPane();
textPane5.setFont(new Font("MingLiU", Font.PLAIN, 24));
textPane5.setText(text);
JLabel label5 = new JLabel("JTextPane " + textPane5.getFont().getName());
JFrame frame = new JFrame();
Container contentPane = frame.getContentPane();
contentPane.setLayout(new GridLayout(5, 2, 2, 6));
contentPane.add(label1);
contentPane.add(textField1);
contentPane.add(label2);
contentPane.add(textField2);
contentPane.add(label3);
contentPane.add(textField3);
contentPane.add(label4);
contentPane.add(textPane4);
contentPane.add(label5);
contentPane.add(textPane5);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
});
}
}
수동 AttributedText
를 사용하여 텍스트의 각 섹션에 대한 글꼴을 지정할 수 있습니다. this answer
문제의 예를 제공해 주시겠습니까? 의미있는 String과 그렇지 않은 String을 의미합니다. 또한 정확한 인코딩을 사용하고 있습니까? 이 테스트를 위해 [mcve]를 제공해주십시오. – AxelH
내가 사용하고있는 JTextField에서 허용하는 중국어 문장의 예제를 추가하고 싶습니다만, 첨부 파일로만 이미지를 사용할 수있는 것 같습니다. 문장을 포함한 RTF 파일은 허용되지 않습니다 (그리고 간단한 복사/한자 붙여 넣기가이 주석 창에서 작동하지 않습니다. 그러나 많은 중국어 문자가 허용되지만 가장 큰 것은 문제가됩니다 (하이퍼 링크의 것과 같습니다). – Dominique
일반적으로이 문제는 JTextField 자체가 아닙니다. , 그러나 당신이 사용하고있는 글꼴로.원하는 문자를 표시 할 수있는 글꼴을 찾아야합니다. 일반적으로 대부분의 유니 코드 문자를 표시 할 수있는 'Arial Unicode MS'를 사용하지만 '4 개의 용'문자는 표시 할 수 없습니다. – Enwired