2016-02-29 21 views
1

這個answer表明使用常量Font.SERIFFont.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(); 
      } 
     }); 
    } 
} 
+0

你期望列表選擇什麼?它實際上是否包含字體名稱「SansSerif」或「Serif」?從我的測試似乎工作得很好 – MadProgrammer

+0

@MadProgrammer - 所選項目始終是「代理FB」 - 這不是我的系統默認值。 「Agency FB」是通過'GraphicsEnvironment'返回的字體列表的第一項 - 這就是爲什麼它被選中 - 而不是因爲使用'JComboBox#setSelectedItem' - 如果我刪除'setSelectedItem'行 - 它給出相同的字體「機構FB」 –

回答

2

似乎邏輯字體不那些由getAllFonts()返回中上市。另一方面,這是有效的。

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

謝謝;您的解決方案按需要工作。我還嘗試了另一種解決方案,同時仍然使用'getAllFonts()':在添加字體的循環中 - 我使用'font.getFamily()'而不是'font.getFontName()' –

相關問題