如何设置系统默认字体为JComboBox<String>的选中项?
How to set the system default font as the selected item of JComboBox<String>?
这个answer表示使用常量Font.SERIF
和Font.SANS_SERIF
给出了系统的默认字体。那没问题;但是如果我有一个由系统所有字体名称填充的 JComboBox<String>
- 那么如何将 JComboBox#setSelectedItem
正确设置为系统默认字体?!
我试过: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();
}
});
}
}
getAllFonts()
返回的字体中似乎没有列出逻辑字体。另一方面,这有效。
ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
combo_fonts = new JComboBox<String>(ge.getAvailableFontFamilyNames());
combo_fonts.setSelectedItem(Font.SANS_SERIF);
这个answer表示使用常量Font.SERIF
和Font.SANS_SERIF
给出了系统的默认字体。那没问题;但是如果我有一个由系统所有字体名称填充的 JComboBox<String>
- 那么如何将 JComboBox#setSelectedItem
正确设置为系统默认字体?!
我试过: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();
}
});
}
}
getAllFonts()
返回的字体中似乎没有列出逻辑字体。另一方面,这有效。
ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
combo_fonts = new JComboBox<String>(ge.getAvailableFontFamilyNames());
combo_fonts.setSelectedItem(Font.SANS_SERIF);