3

我安装的 OS X 10.8 预装了Helvetica Neue系列中的 11 种字体。我正在尝试找到一种方法来访问具有mediumcondensed等样式的字体,这些样式不能由位掩码值Font.BOLDFont.ITALIC.

GraphicsEnvironment.getAllFonts()返回Font所有这些字体的对象,但应用它们JLabel.setFont()似乎只使用上述位掩码可表示的样式。这显示在下面屏幕截图的左侧,将其与在TextEdit中使用的所有字体的样本进行比较。

如果Font使用字体的全名或其 PostScript 名称构造对象,也会发生同样的情况。

有没有办法使用所有这些字体,无论是通过将它应用到Swing组件还是在绘制到Graphics2D(或Graphics)实例时?

左侧是 Swing 应用程序的输出,右侧是所有字体的示例。

下面是我用来在上面的屏幕截图中生成对话框的代码。

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);
    }
}
4

1 回答 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);
    }

我希望这有帮助。

于 2013-03-22T15:04:16.147 回答