如何使用Swing访问字体系列中的所有字体

3
我的OS X 10.8安装版预装了11种Helvetica Neue字体。我正在尝试找到一种方法来访问具有medium或condensed样式的字体,这些样式不能通过Font.BOLD和Font.ITALIC的位掩码值表示。
GraphicsEnvironment.getAllFonts()返回所有这些字体的Font对象,但使用JLabel.setFont()应用它们似乎只使用可以用上述位掩码表示的样式。这在下面的截图中左侧显示,与TextEdit中使用时的所有字体样本进行比较。
如果使用字体的全名或其PostScript名称构建Font对象,则会发生相同的情况。
是否有一种方法可以使用所有这些字体,无论是将其应用于Swing组件还是在绘制到Graphics2D(或Graphics)实例时?下面是我用于生成上述对话框的代码。
package fahrplan;

import java.awt.*;
import javax.swing.*;

public class FontsMain {
    public static void main(String[] a) {
        GraphicsEnvironment e = GraphicsEnvironment.getLocalGraphicsEnvironment();

        JPanel contentPane = new JPanel();
        contentPane.setLayout(new BoxLayout(contentPane, BoxLayout.PAGE_AXIS));

        for (Font i : e.getAllFonts()) {
            String name = i.getFontName();

            if (name.startsWith("HelveticaNeue")) {
                JLabel label = new JLabel(name);

                label.setFont(i.deriveFont(18f));

                contentPane.add(label);
            }
        }

        JFrame frame = new JFrame("Fonts");
        frame.setContentPane(contentPane);
        frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
        frame.pack();
        frame.setVisible(true);
    }
}

1
你可以使用以下链接进行测试:http://stackoverflow.com/a/9022901/714968 - mKorbel
1个回答

0
我会这样做。
int size=12, style=0;

GraphicsEnvironment e = GraphicsEnvironment.getLocalGraphicsEnvironment();
final Font[] fonts = e.getAllFonts();
for(int i=0; i<fonts.length; i++)
    {
        JLabel label = new JLabel(Font[i].getName);
        label.setFont(new Font(Font[i].getName, size, style));
        contentPane.add(label);
    }

希望这能有所帮助。


我现在能发现你代码中唯一的区别是你使用的字体大小是12pt而非18pt。我认为这不会造成影响。 ;) 另外,你看了我问题里的截图吗? - Feuermurmel
我相信你!我后来发现,这只会发生在那些将多种样式存储在同一个“.dfont”文件中的字体上,这是OS X所独有的。我仍在寻找一种在Mac上使用所有这些样式的方法。 - Feuermurmel
这段代码实际上无法编译通过。首先,Font[i] 是不可行的,你可能是想使用 fonts[i]。另外,正确的构造函数应该是 Font(name, style, size)。在你的代码中,style 被设置为 12,而 size 被设置为 0。第三点,这并不是问题的答案。 - Mo'in Creemers

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