从命令行更改Swing字体大小

时间:2012-09-14 09:48:10

标签: java swing

我正在使用Swing应用程序,它在我的计算机上显示文字的字体非常小。我无权访问源代码。

有没有办法从命令行或某种配置文件(例如像swing.properties文件那样)更改字体大小或某种DPI设置?


修改

自Java 9以来,小字体不应该成为问题。Swing has started to scale its GUI components depending on the screen resolution

3 个答案:

答案 0 :(得分: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);
            }
        }
    });

在调用实际应用程序的main方法之前。

但是,如果字体非常小,则可能已明确设置,因此更改默认值可能无济于事。

答案 1 :(得分:1)

我认为没有这样的选项,因为所有组件字体大小都在外观和感觉(L&amp; F)默认值中定义。一些L&amp; Fs允许快速更改字体,其中一些不允许。在大多数情况下,您应该可以通过更改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.

我不确定这些值是否可以在不更改代码的情况下传递给应用程序,或者至少在应用程序中有一些字体大小更改支持。

答案 2 :(得分:1)

我还没有测试过,但您可能会尝试启动该应用。使用Java Web Start。它允许swing.useSystemFontSettings和...之类的属性。即使是沙盒应用也要指定swing.metalTheme。做任何一个都可能“覆盖”代码中设置的小字体。

有关详细信息,请参阅JNLP file syntax