【问题标题】:Swing font names do not match? (Making a font chooser, and am trying to display the default system font in a JComboBox)Swing 字体名称不匹配? (制作字体选择器,并尝试在 JComboBox 中显示默认系统字体)
【发布时间】:2011-08-25 11:17:23
【问题描述】:

我正在创建一个摆动字体选择器。 (另见:How to prevent JComboBox from becoming unresponsive when using a custom ListCellRenderer

要获得所有可用的字体,我会这样做:

GraphicsEnvironment gE = GraphicsEnvironment.getLocalGraphicsEnvironment();
Font[] fonts = gE.getAllFonts();

在我的字体选择器(一个 JComboBox)中,它包含所有可用的字体,我想初始化它以显示默认的系统字体。

为此,我使用静态基本字体(从静态基本标签 (JLabel) 获取),从中获取默认字体。 然后,在 JComboBox 的初始化过程中,我调用了

fontComboBox.setSelectedItem(new Font(baseFont.getName(),baseFont.getStyle(),1)); 
//The size is 1 in all fonts retrieved from GraphicsEnvironment.
//The combo box contains objects of the type Font.

将所选字体设置为默认系统字体。

这在大多数情况下都有效。虽然,对于某些字体,创建的基本字体似乎与从 GraphicsEnvironment 检索到的任何字体都不匹配。

对我来说,基本字体是 Dialog。字体的名称是“对话框”。但是,从 GraphicsEnvironment 为 Dialog 检索到的字体名称是“Dialog.Bold”、“Dialog.Plain”和“Dialog.Italic”。由于创建的字体名称不同,组合框不会选择所需的项目(equals(...) 失败)。

请注意这如何与大多数字体一起使用(到目前为止,我测试过的唯一一种不起作用的是 Dialog 字体)。

有没有更好的解决方案来避免这个问题?我可以通过使用除 JLabel 之外的其他特定 Swing 组件来获取正确的字体名称来获取基本字体吗? 最后,为什么名字不匹配?

编辑:后续问题:How does one load a logical fonts physical font? (Making a JComboBox font chooser)

【问题讨论】:

    标签: java swing graphics fonts dialog


    【解决方案1】:

    有一些字体“Dialog”、“Monospaced”,还有一些不记得名字的不是 rel 字体。 java使用人工字体,但它们是用另一种物理字体呈现的。这样做是为了提供与平台无关的字体​​名称。

    这意味着例如对于“等宽”字体,使用了一些与操作系统相关的具有相等字符宽度的真实字体。 http://download.oracle.com/javase/1.3/docs/guide/intl/addingfonts.html

    【讨论】:

    • 谢谢,有帮助!我也会将逻辑字体添加到组合框中 =)
    猜你喜欢
    • 2021-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-11
    • 2011-10-31
    • 2016-04-20
    • 2011-01-08
    相关资源
    最近更新 更多