如何将系统默认字体设置为JComboBox <string>的选定项?

时间:2016-02-29 10:29:57

标签: java swing fonts default jcombobox

answer表示使用常量Font.SERIFFont.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();
            }
        });
    }
}

1 个答案:

答案 0 :(得分:2)

逻辑字体似乎不会列在getAllFonts()返回的字体中。另一方面,这有效。

    ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
    combo_fonts = new JComboBox<String>(ge.getAvailableFontFamilyNames());
    combo_fonts.setSelectedItem(Font.SANS_SERIF);