Java AWT PopupMenu不显示韩文/亚洲字符

时间:2018-07-09 11:14:26

标签: java awt

我被要求将韩文,中文和日文纳入我的程序,事实证明这很困难。由于TrayIcon的问题,我不得不使用AWT而不是Swing,但是AWT PopupMenu似乎拒绝完全识别亚洲字符。

这是一个演示该问题的示例程序:

package awttest;
import java.awt.*;
import java.awt.event.ActionEvent;

public class AWTTest
{
    public static void main( String[] args )
    {
        Frame frame = new Frame( );
        frame.setSize( 400, 300 );
        frame.setLayout( new FlowLayout( ) );

        Button button = new Button( "Test" );
        button.addActionListener( ( ActionEvent e ) ->
        {
            PopupMenu popup = new PopupMenu( "Menu" );
            MenuItem item = new MenuItem( "\uc2dc\uba54\uc9c0" );

            popup.setFont( new Font( "Serif", 0, 12 ) );
            System.out.println( popup.getFont( ).canDisplay( '\uc2dc' ) ); // prints true

            popup.add( item ); // displays 3 boxes
            popup.add( new MenuItem( "English Text" ) ); // displays normally
            button.add( popup );
            popup.show( button, 0, 25 );
        } );

        frame.add( button );
        frame.setVisible( true );
    }    
}

我尝试将字体设置为支持韩文的Windows字体之一,例如Gulim或Dotum,但是我得到的结果是相同的。即使将计算机的语言环境更改为韩国也没有任何效果。有什么方法可以使AWT PopupMenu支持亚洲字符?

1 个答案:

答案 0 :(得分:0)

您的程序对我有用。我在跑步

$ java -version
openjdk version "1.8.0_172"
OpenJDK Runtime Environment (build 1.8.0_172-b11)
OpenJDK 64-Bit Server VM (build 25.172-b11, mixed mode)

在Fedora 27上。

至少,这表明问题不在您的代码中。这可能是配置问题...


我建议您查看这两个Oracle资源,并查看您自己的系统与它们所说的内容之间是否存在差异: