这个answer表明使用常量Font.SERIF
和Font.SANS_SERIF
给出系统的默认字体。那没问题;但如果我有一个由系统的所有字体名称填充的JComboBox<String>
- 那么如何正确设置JComboBox#setSelectedItem
为系统默认字体?!如何将系统默认字体设置为JComboBox <String>的选定项目?
我想:setSelectedItem(Font.SANS_SERIF);
和setSelectedItem(Font.SERIF);
但JComboBox
总是选择通过GraphicsEnvironment
返回的字体列表中的第一个字体名称,而不是系统默认字体。
SSCCE:
import java.awt.*;
import javax.swing.*;
public class FontsExample extends JFrame {
JComboBox<String> combo_fonts;
GraphicsEnvironment ge;
public FontsExample() {
combo_fonts = new JComboBox<String>();
ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
for (Font font : ge.getAllFonts()) {
combo_fonts.addItem(font.getFontName());
}
combo_fonts.setSelectedItem(Font.SANS_SERIF);
JPanel panel = new JPanel();
panel.add(combo_fonts);
add(panel);
setSize(300, 300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
FontsExample fontsExample = new FontsExample();
}
});
}
}
你期望列表选择什么?它实际上是否包含字体名称“SansSerif”或“Serif”?从我的测试似乎工作得很好 – MadProgrammer
@MadProgrammer - 所选项目始终是“代理FB” - 这不是我的系统默认值。 “Agency FB”是通过'GraphicsEnvironment'返回的字体列表的第一项 - 这就是为什么它被选中 - 而不是因为使用'JComboBox#setSelectedItem' - 如果我删除'setSelectedItem'行 - 它给出相同的字体“机构FB” –