在Java程序的标题栏中显示日语字符

3

我能够在Java中的所有地方显示日文字符,除了主窗口(JFrame)的标题栏。是否有一种方法可以更改标题栏的字体,以便显示日文字符?谢谢。

我正在使用Windows XP。如果这很重要,我也正在使用Java Substance外观。

4个回答

3
一个窗口的标题栏是由系统窗口管理器来管理的,而不是由Swing来管理的。您没有说明您使用的操作系统/GUI。
对于Windows XP,在打开显示控制面板后,选择“外观”选项卡,然后点击“高级”按钮;您可以在那里更改标题字体(尽管安装在您的系统上的字体可能没有您需要的字形)。
以下是一些代码,用于检查系统默认字体是否支持您想要的字形(我不知道字符是什么;它是片假名集合中的一个好看的字形)。
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingUtilities;

public class GlyphCheck
{
    public static void main(String[] argv) throws Exception {
        final String title = "Testing: \u30CD";
        SwingUtilities.invokeAndWait(new Runnable() {
            public void run() {
                JFrame frame = new JFrame(title);
                frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
                JLabel label = new JLabel(title);
                label.setSize(200, 100);
                frame.setContentPane(label);
                frame.pack();
                frame.setVisible(true);
            }
        });
    }
}

我的操作系统是Windows XP。我已经尝试将活动标题栏更改为不同的字体,但它并没有改变标题栏的字体。 - baseballtank13
你在评论时更新了吗?你确定所选的字体具有你正在使用的字符的字形吗?通过在Swing标签上设置该字体来进行测试。还有可能需要像重新启动Windows这样的操作。 - kdgregory
如果外观可以覆盖它,我如何更改外观标题栏的字体? - baseballtank13
@Greg - 当我在家里的Linux电脑上运行上述程序时,它在标题栏中显示了该字符(但令人惊讶的是,在标签中没有显示)。我真的认为你的问题是你使用的字体不支持该字形。 - kdgregory
我无法帮助你解决这个问题;也许@banjollity可以,如果他/她再次阅读此帖子的话,但更有可能需要编写JNI。但我仍然认为这是字体不包含字形的问题:我能够通过控制面板更改标题栏字体,并且它与其他所有内容一起更新了我的Java应用程序。也许你的XP与我的XP不同。 - kdgregory
显示剩余9条评论

1
JFrame.setDefaultLookAndFeelDecorated(true);
UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
UIManager.put( "InternalFrame.titleFont", Resources.jaDefault.deriveFont(16.0f) );

Try it ;)

使用属性InternalFrame.titleFont对我有用。非常感谢。 - Francisco Puga

0
为了覆盖框架的字体,您需要告诉外观来处理其外观。这可能是可取的,也可能不是,否则您将受系统支配。有些外观具有相当好的窗口装饰,而其他外观则没有。Substance 的还可以。还要告诉 UIManager 使用什么字体。
// Do this before you display any JFrame.
UIManager.put( "Frame.font", new Font( "Japanese", 12, Font.PLAIN ) );
JFrame.setDefaultLookAndFeelDecorated( true );

JFrame frame = new JFrame( title );

这种方法(如果可行-抱歉没有测试!)意味着您将能够分发您的程序,而无需告诉用户他们需要更改其Windows设置,就像其他答案所述。

在发布之前测试一下总是个好主意……这对我没用,当我在1.5源代码中搜索该属性时,并没有找到它。 - kdgregory
我认为我更清楚地了解了问题所在(不幸的是并没有更接近解决方案)。使用Substance Look and Feel调用JFrame.setDefaultLookAndFeelDecorated(true)和JDialog.setDefaultLookAndFeelDecorated(true)是导致它无法显示日语字体的原因。如果您注释掉这两行,您可以看到日语字符,但问题是标题栏仍然是其通常的蓝色,而不是主题颜色(我必须在标题栏中使用主题颜色)。 - baseballtank13

0

我不熟悉Java Substance,但在开发Web应用时遇到过这种情况。基本上,页面内容中的日文、中文和韩文字符会显示出来,但浏览器标题栏中却不会。

这是因为窗口系统控制着标题栏,而不是浏览器。根据kdgregory的评论,听起来你的情况也类似。

为了让窗口系统理解这些字符并不显示不支持的“方框”,你必须确保安装了正确的字符集。对于Windows XP,以下步骤可以解决浏览器标题栏的问题:

  1. 在Windows开始菜单上打开控制面板。
  2. 点击区域和语言选项图标,然后点击语言选项卡。
  3. 在补充语言支持框中,勾选安装东亚语言文件的框。
  4. 点击应用和确定。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接