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