這個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」 –