首页 > 解决方案 > Java AWT PopupMenu 韩语/亚洲字符不显示

问题描述

我被要求在我的程序中加入韩语、中文和日语,但事实证明这很困难。由于 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 支持亚洲字符?

标签: javaawt

解决方案


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

$ 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资源,看看你自己的系统和他们说的有没有出入:


推荐阅读