我正在使用Swing應用程序,該應用程序在我的計算機上顯示帶有可笑的小字體大小的文本。我無法訪問源代碼。從命令行更改Swing字體大小
有沒有辦法從命令行或某種配置文件(例如,swing.properties
文件等)更改字體大小或可能是某種DPI設置?
編輯:
小字體大小不應該是一個問題了,因爲Java的9 Swing has started to scale its GUI components depending on the screen resolution。
我正在使用Swing應用程序,該應用程序在我的計算機上顯示帶有可笑的小字體大小的文本。我無法訪問源代碼。從命令行更改Swing字體大小
有沒有辦法從命令行或某種配置文件(例如,swing.properties
文件等)更改字體大小或可能是某種DPI設置?
編輯:
小字體大小不應該是一個問題了,因爲Java的9 Swing has started to scale its GUI components depending on the screen resolution。
我不認爲有這樣的選項,因爲所有組件的字體大小都是在外觀和感覺(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。
我不確定這些值是否可以傳遞給應用程序而不更改其代碼或至少在應用程序內部具有某種字體大小更改支持。
沒有命令行開關來更改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);
}
}
});
。
但是,如果字體大小非常小,它可能已被明確設置,所以更改默認值可能沒有幫助。
我還沒有測試過,但你可能會嘗試啓動應用程序。使用Java Web Start。它允許指定類似swing.useSystemFontSettings
& swing.metalTheme
的屬性,即使對於沙盒應用程序也是如此。這樣做可能會「覆蓋」代碼中設置的小字體。
查看JNLP file syntax瞭解更多詳情。
感謝您的建議,但在這種情況下,要付出很多努力纔是值得的。 – Lii
這似乎是與Ingo Kegel的建議相同的方法,但這並不奏效。 – Lii
@Lii它只能與支持來自UI默認的字體的L&F一起工作。要知道你的L&F是否支持它們 - 你將不得不挖掘它的源代碼...... –