6

私は自分のコンピューターで非常に小さなフォント サイズのテキストを表示する Swing アプリケーションを使用しています。

コマンド ラインから、または何らかの構成ファイル (たとえば、swing.propertiesファイルのようなもの) を使用して、フォント サイズまたは何らかの DPI 設定を変更する方法はありますか?

ソースコードにアクセスできません。


編集:

Java 9 以降、小さいフォント サイズは問題になりません。Swing は、画面の解像度に応じて GUI コンポーネントのスケーリングを開始しました

4

3 に答える 3

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);
            }
        }
    });

実際のアプリケーションのメインメソッドを呼び出す前に。

ただし、フォントサイズが非常に小さい場合は、明示的に設定されている可能性が高いため、デフォルトを変更しても効果がない場合があります。

于 2012-09-14T12:16:56.493 に答える
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 } ) );

など、各成分に。

そして、コードを変更せずにこれらの値をアプリケーションに渡すことができるかどうか、または少なくともアプリケーション内でフォントサイズの変更をサポートできるかどうかはわかりません。

于 2012-09-14T12:02:55.890 に答える
1

テストはしていませんが、アプリを起動してみてください。Java Web Startを使用します。サンドボックス化されたアプリでもswing.useSystemFontSettings&などのプロパティを指定できます。swing.metalThemeどちらかを行うと、コードに設定されている小さなフォントが「オーバーライド」される可能性があります。

詳細については、JNLP ファイルの構文を参照してください。

于 2012-09-14T23:35:30.580 に答える