java - Swing 字体名称不匹配? (制作字体选择器,并尝试在 JComboBox 中显示默认系统字体)

标签 java swing graphics fonts dialog

我正在创建一个 Swing 字体选择器。 (另请参阅: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。字体的名称是“Dialog”。但是,从 GraphicsEnvironment for Dialog 检索的字体名称为“Dialog.Bold”、“Dialog.Plain”和“Dialog.Italic”。由于创建的字体具有不同的名称,组合框将不会选择所需的项目(equals(...) 失败)。

请注意大多数字体是如何工作的(到目前为止我测试过的唯一一种不起作用的是对话框字体)。

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

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

最佳答案

有一些字体“Dialog”、“Monospaced”,还有一些不记得名称的字体不是 rel 字体。 Java 使用人造字体,但它们是用另一种物理字体呈现的。这样做是为了提供独立于平台的字体名称。

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

关于java - Swing 字体名称不匹配? (制作字体选择器,并尝试在 JComboBox 中显示默认系统字体),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6001301/

相关文章:

android - android.graphics包和SurfaceFlinger的关系

java - 从另一个带有元素的 svg 图像创建一个带有嵌入 base64 字符串的 SVG 图像

java - 安卓 Java : AlertDialog method called from another class causes null pointer exception

java - 数据截断 : Incorrect datetime value: '' for column 'date' at row 1

java - JLabel 没有出现在 JFrame 中

image - JavaFX 更改 imageView 中的图像

java - 如何在代号一中做一个圆形的Progress Bar?

java - 混合读取的gson

database - 连接数据库的有效方式(按性能)

java - 一般在 SWING/Java 中使用线程的最佳实践