我正在使用一个 Swing 应用程序,它在我的计算机上以非常小的字体显示文本。
有没有办法从命令行或使用某种配置文件(例如,类似swing.properties
文件)更改字体大小或某种 DPI 设置?
我无权访问源代码。
编辑:
自 Java 9 以来,小字体不再是问题。Swing 已开始根据屏幕分辨率缩放其 GUI 组件。
我正在使用一个 Swing 应用程序,它在我的计算机上以非常小的字体显示文本。
有没有办法从命令行或使用某种配置文件(例如,类似swing.properties
文件)更改字体大小或某种 DPI 设置?
我无权访问源代码。
编辑:
自 Java 9 以来,小字体不再是问题。Swing 已开始根据屏幕分辨率缩放其 GUI 组件。
没有用于更改 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);
}
}
});
在调用实际应用程序的主要方法之前。
但是,如果字体大小非常小,则可能已明确设置,因此更改默认值可能无济于事。
我不认为有这样的选项,因为所有组件字体大小都是在外观 (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 } ) );
等每个组件。
而且我不确定这些值是否可以在不更改其代码的情况下传递给应用程序,或者至少在应用程序内部支持一些字体大小更改。
我尚未对其进行测试,但您可以尝试启动该应用程序。使用Java Web 开始。它甚至允许为沙盒应用程序指定swing.useSystemFontSettings
&之类的属性。swing.metalTheme
这样做可能会“覆盖”代码中设置的小字体。
有关更多详细信息,请参阅JNLP 文件语法。