Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Swing字体名称不匹配?(正在创建字体选择器,我正在尝试在JComboBox中显示默认系统字体)_Java_Swing_Graphics_Fonts_Dialog - Fatal编程技术网

Java Swing字体名称不匹配?(正在创建字体选择器,我正在尝试在JComboBox中显示默认系统字体)

Java Swing字体名称不匹配?(正在创建字体选择器,我正在尝试在JComboBox中显示默认系统字体),java,swing,graphics,fonts,dialog,Java,Swing,Graphics,Fonts,Dialog,我正在创建一个swing字体选择器。(另见:) 要获取所有可用字体,我需要: GraphicsEnvironment gE = GraphicsEnvironment.getLocalGraphicsEnvironment(); Font[] fonts = gE.getAllFonts(); 在包含所有可用字体的我的字体选择器(JComboBox)中,我想将其初始化,显示所选的默认系统字体 为此,我使用一个静态基本字体(从静态基本标签(JLabel)获取),从中获取默认字体。 然后,在JCo

我正在创建一个swing字体选择器。(另见:)

要获取所有可用字体,我需要:

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”。但是,从Dialog的GraphicsEnvironment检索到的字体名称是“Dialog.Bold”、“Dialog.Plain”和“Dialog.Italic”。由于创建的字体具有不同的名称,组合框将不会选择所需的项目(等于(…)失败)

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

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

编辑:后续问题:

有一些字体是“对话”、“等距”和其他一些不记得名字的字体是不相关字体。java使用人工字体,但它们是用另一种物理字体呈现的。这样做是为了提供独立于平台的字体名称

这意味着,例如,对于“单间距”字体,使用了一些具有相等字符宽度的依赖操作系统的实字体。

谢谢,这很有帮助!我将只向组合框添加逻辑字体=)