2012-09-14 58 views

回答

1

我不認爲有這樣的選項,因爲所有組件的字體大小都是在外觀和感覺(L & F)默認值中定義的。部分L & F允許快速更改字體,其中一些不會。在大多數情況下,您應該可以通過更改UI默認值來更改字體大小:

UIManager.put ("Button.font", new SwingLazyValue ("javax.swing.plaf.FontUIResource", null, new Object[]{ fontName, fontStyle, fontSize })); 
UIManager.put ("Label.font", new SwingLazyValue ("javax.swing.plaf.FontUIResource", null, new Object[]{ fontName, fontStyle, fontSize })); 
UIManager.put ("TextField.font", new SwingLazyValue ("javax.swing.plaf.FontUIResource", null, new Object[]{ fontName, fontStyle, fontSize })); 

e.t.c for each component。

我不確定這些值是否可以傳遞給應用程序而不更改其代碼或至少在應用程序內部具有某種字體大小更改支持。

+0

這似乎是與Ingo Kegel的建議相同的方法,但這並不奏效。 – Lii

+1

@Lii它只能與支持來自UI默認的字體的L&F一起工作。要知道你的L&F是否支持它們 - 你將不得不挖掘它的源代碼...... –

2

沒有命令行開關來更改Swing的字體大小。你必須做的是調用下面的方法:

public static void adjustFontSize(int adjustment) { 

    UIDefaults defaults = UIManager.getDefaults(); 
    List<Object> newDefaults = new ArrayList<Object>(); 
    Map<Object, Font> newFonts = new HashMap<Object, Font>(); 

    Enumeration<Object> en = defaults.keys(); 
    while (en.hasMoreElements()) { 
     Object key = en.nextElement(); 
     Object value = defaults.get(key); 
     if (value instanceof Font) { 
      Font oldFont = (Font)value; 
      Font newFont = newFonts.get(oldFont); 
      if (newFont == null) { 
       newFont = new Font(oldFont.getName(), oldFont.getStyle(), oldFont.getSize() + adjustment); 
       newFonts.put(oldFont, newFont); 
      } 
      newDefaults.add(key); 
      newDefaults.add(newFont); 
     } 
    } 
    defaults.putDefaults(newDefaults.toArray()); 
} 

其中adjustment是應該被添加到每個字體大小的點數。

如果您沒有訪問源代碼,你可以寫自己的包裝主類,你調用實際應用中的主要方法之前調用

UIManager.addPropertyChangeListener(new PropertyChangeListener() { 
     public void propertyChange(PropertyChangeEvent event) { 
      if (event.getPropertyName().equals("lookAndFeel")) { 
       adjustFontSize(5); 
      } 
     } 
    }); 

但是,如果字體大小非常小,它可能已被明確設置,所以更改默認值可能沒有幫助。

+0

包裝主類是一個很好的竅門,我會嘗試一下,看看它是如何工作的。 – Lii

+0

事實證明,這不適用於我的情況。 – Lii

1

我還沒有測試過,但你可能會嘗試啓動應用程序。使用Java Web Start。它允許指定類似swing.useSystemFontSettings & swing.metalTheme的屬性,即使對於沙盒應用程序也是如此。這樣做可能會「覆蓋」代碼中設置的小字體。

查看JNLP file syntax瞭解更多詳情。

+0

感謝您的建議,但在這種情況下,要付出很多努力纔是值得的。 – Lii