web-dev-qa-db-ja.com

Swingプログラムのデフォルトフォントの設定

私はJava swingプログラム全体にデフォルトのフォントを設定する方法を知りたいと思っていました。私の研究から、UIManagerLookAndFeelで何かできることがわかりました。 、しかし、私はそれを行う方法を特に見つけることができず、UIManagerはかなり複雑に見えます。

58
Connor Neville

試してください:

public static void setUIFont (javax.swing.plaf.FontUIResource f){
    Java.util.Enumeration keys = UIManager.getDefaults().keys();
    while (keys.hasMoreElements()) {
      Object key = keys.nextElement();
      Object value = UIManager.get (key);
      if (value instanceof javax.swing.plaf.FontUIResource)
        UIManager.put (key, f);
      }
    } 

呼び出し元...

setUIFont (new javax.swing.plaf.FontUIResource("Serif",Font.ITALIC,12));
51
Romain Hippeau
UIManager.put("Button.font", /* font of your liking */);
UIManager.put("ToggleButton.font", /* font of your liking */);
UIManager.put("RadioButton.font", /* font of your liking */);
UIManager.put("CheckBox.font", /* font of your liking */);
UIManager.put("ColorChooser.font", /* font of your liking */);
UIManager.put("ComboBox.font", /* font of your liking */);
UIManager.put("Label.font", /* font of your liking */);
UIManager.put("List.font", /* font of your liking */);
UIManager.put("MenuBar.font", /* font of your liking */);
UIManager.put("MenuItem.font", /* font of your liking */);
UIManager.put("RadioButtonMenuItem.font", /* font of your liking */);
UIManager.put("CheckBoxMenuItem.font", /* font of your liking */);
UIManager.put("Menu.font", /* font of your liking */);
UIManager.put("PopupMenu.font", /* font of your liking */);
UIManager.put("OptionPane.font", /* font of your liking */);
UIManager.put("Panel.font", /* font of your liking */);
UIManager.put("ProgressBar.font", /* font of your liking */);
UIManager.put("ScrollPane.font", /* font of your liking */);
UIManager.put("Viewport.font", /* font of your liking */);
UIManager.put("TabbedPane.font", /* font of your liking */);
UIManager.put("Table.font", /* font of your liking */);
UIManager.put("TableHeader.font", /* font of your liking */);
UIManager.put("TextField.font", /* font of your liking */);
UIManager.put("PasswordField.font", /* font of your liking */);
UIManager.put("TextArea.font", /* font of your liking */);
UIManager.put("TextPane.font", /* font of your liking */);
UIManager.put("EditorPane.font", /* font of your liking */);
UIManager.put("TitledBorder.font", /* font of your liking */);
UIManager.put("ToolBar.font", /* font of your liking */);
UIManager.put("ToolTip.font", /* font of your liking */);
UIManager.put("Tree.font", /* font of your liking */);

ソース: http://www.jguru.com/faq/view.jsp?EID=340519

37
Amir Raminfar
Java -Dswing.aatext=true -Dswing.plaf.metal.controlFont=Tahoma -Dswing.plaf.metal.userFont=Tahoma …

これにより、完全なUIでTahomaが設定されるだけでなく、アンチエイリアスがオンになり、フォントがすぐに美しくなります。

18
Bombe

私はこれが良いと思う、これを置くUIManager全体ではなく、現在のlafに対して呼び出す

UIManager.getLookAndFeelDefaults()
        .put("defaultFont", new Font("Arial", Font.BOLD, 14));

JFrameオブジェクトをインスタンス化する前のメインのどこか。それは私にとって完璧に機能しました。フォントが指定されていないコンポーネントの場合、これがデフォルトのフォントであることを忘れないでください。

ソース: http://www.Java.net/node/680725

8
sherif

デフォルトのフォントを設定する方法は、使用しているルックアンドフィールによって異なることに注意してください。 Romain Hippeauが説明したソリューションは、多くのLAFで正常に機能しますが、Nimbusでは機能しません。 sherifによって投稿されたものはNimbusで正常に動作しますが、他のもの(たとえば、Metal)では動作しません。

両方を組み合わせるとほとんどのLAFで機能しますが、これらのソリューションはいずれもGTK + LAFで機能しません。

私は思う(しかし、私は確信していない)、クロスプラットフォームのソリューションはありません。

4

Romain Hippeauに着想を得て、フォントサイズだけを設定する場合はこのコードを使用します。

for (Map.Entry<Object, Object> entry : javax.swing.UIManager.getDefaults().entrySet()) {
    Object key = entry.getKey();
    Object value = javax.swing.UIManager.get(key);
    if (value != null && value instanceof javax.swing.plaf.FontUIResource) {
        javax.swing.plaf.FontUIResource fr=(javax.swing.plaf.FontUIResource)value;
        javax.swing.plaf.FontUIResource f = new javax.swing.plaf.FontUIResource(fr.getFamily(), fr.getStyle(), FONT_SIZE);
        javax.swing.UIManager.put(key, f);
    }
}
3
Pavel Sedek

Nimbus L&Fを使用しています。

@Romain Hippeauのコードを使用して、UIManager.getLookAndFeelDefaults()の代わりにUIManager.getDefaults()を使用し、put変更された値への参照を使用する必要がありました。

    int szIncr = 5; // Value to increase the size by
    UIDefaults uidef = UIManager.getLookAndFeelDefaults();
    for (Entry<Object,Object> e : uidef.entrySet()) {
        Object val = e.getValue();
        if (val != null && val instanceof FontUIResource) {
            FontUIResource fui = (FontUIResource)val;
            uidef.put(e.getKey(), new FontUIResource(fui.getName(), fui.getStyle(), fui.getSize()+szIncr));
        }
    }

何らかの理由で、デフォルトのL&Fでは動作しないようです(実行した限定的なテストに基づいて)

0
Matthieu

これらの解決策のどれも私にはうまくいきません、私は自分の(愚かな)ものを作りますが、それはうまくいきます:

private void changeFontRecursive(Container root, Font font) {
    for (Component c : root.getComponents()) {
        c.setFont(font);
        if (c instanceof Container) {
            changeFontRecursive((Container) c, font);
        }
    }
}
0
Laurent Bauchau

正解はアミール・ラミンファーの答えですが、フォントをFontUIResourceにカプセル化する必要があります。例えば ​​:

UIManager.put("Button.font", new FontUIResource(new Font ("Helvetica", Font.BOLD, 16)));
0
Nicolas GOUDARD

この問題を解決するには、AWTEventListenerを実装し、ContainerEventのCOMPONENT_ADDEDをリッスンするだけです。

すべてのストーリーの説明: http://wiki.idempiere.org/en/Swing_Miss_Support_Some_Language

すべてのコード: https://bitbucket.org/hieplq/unicentapos/src/9b22875ab65e26ff46fd9ae62d556b7f64621afa/src-extend/vn/hsv/uitil/font/FontGlyphsUtil.java?at=tip

  1. AWTEventListenerを実装する

public void eventDispatched(AWTEvent event) {
    if (!isMissSupportGlyph || !(event instanceof ComponentEvent) || !(event instanceof ContainerEvent))
        return;

    if (event instanceof ContainerEvent){
        ContainerEvent containerEvent = (ContainerEvent)event;
        if (containerEvent.getID() == ContainerEvent.COMPONENT_ADDED){
            updateChildControlFont(containerEvent.getChild());
        }
    }
}
  1. レジストリリスナーを追加します(これを実行するのに最適な場所は、プログラムの起動時です)

Toolkit.getDefaultToolkit().addAWTEventListener(this, AWTEvent.COMPONENT_EVENT_MASK | AWTEvent.CONTAINER_EVENT_MASK);
0
Hiep Lq

@アミール回答の完了として、これはキーの完全なリストです

この機能を使用します

private void setFont(FontUIResource myFont) {
    UIManager.put("CheckBoxMenuItem.acceleratorFont", myFont);
    UIManager.put("Button.font", myFont);
    UIManager.put("ToggleButton.font", myFont);
    UIManager.put("RadioButton.font", myFont);
    UIManager.put("CheckBox.font", myFont);
    UIManager.put("ColorChooser.font", myFont);
    UIManager.put("ComboBox.font", myFont);
    UIManager.put("Label.font", myFont);
    UIManager.put("List.font", myFont);
    UIManager.put("MenuBar.font", myFont);
    UIManager.put("Menu.acceleratorFont", myFont);
    UIManager.put("RadioButtonMenuItem.acceleratorFont", myFont);
    UIManager.put("MenuItem.acceleratorFont", myFont);
    UIManager.put("MenuItem.font", myFont);
    UIManager.put("RadioButtonMenuItem.font", myFont);
    UIManager.put("CheckBoxMenuItem.font", myFont);
    UIManager.put("OptionPane.buttonFont", myFont);
    UIManager.put("OptionPane.messageFont", myFont);
    UIManager.put("Menu.font", myFont);
    UIManager.put("PopupMenu.font", myFont);
    UIManager.put("OptionPane.font", myFont);
    UIManager.put("Panel.font", myFont);
    UIManager.put("ProgressBar.font", myFont);
    UIManager.put("ScrollPane.font", myFont);
    UIManager.put("Viewport.font", myFont);
    UIManager.put("TabbedPane.font", myFont);
    UIManager.put("Slider.font", myFont);
    UIManager.put("Table.font", myFont);
    UIManager.put("TableHeader.font", myFont);
    UIManager.put("TextField.font", myFont);
    UIManager.put("Spinner.font", myFont);
    UIManager.put("PasswordField.font", myFont);
    UIManager.put("TextArea.font", myFont);
    UIManager.put("TextPane.font", myFont);
    UIManager.put("EditorPane.font", myFont);
    UIManager.put("TabbedPane.smallFont", myFont);
    UIManager.put("TitledBorder.font", myFont);
    UIManager.put("ToolBar.font", myFont);
    UIManager.put("ToolTip.font", myFont);
    UIManager.put("Tree.font", myFont);
    UIManager.put("FormattedTextField.font", myFont);
    UIManager.put("IconButton.font", myFont);
    UIManager.put("InternalFrame.optionDialogTitleFont", myFont);
    UIManager.put("InternalFrame.paletteTitleFont", myFont);
    UIManager.put("InternalFrame.titleFont", myFont);
}

そして、UIを呼び出す前にmainで呼び出します

setFont(new FontUIResource(new Font("Cabin", Font.PLAIN, 14)));

Swing UI Managerキーの完全なリストについては、これを確認してください link

0
MoolsBytheway

Synthルックアンドフィール XMLファイルを使用し、そこでフォントを定義しました。簡単、柔軟、そして大陸。
次のようなcreateFontを持つクラスを作成する必要があります。

public class CustomFontResource {
public static FontUIResource createFont(String path, final int size) throws IOException, FontFormatException {
    Font font = Font.createFont(Font.TRUETYPE_FONT, new FileInputStream(path));
    return new FontUIResource(font.deriveFont(Font.PLAIN, size));
}

そして、シンセxmlで次のようなフォントを定義します。

    <object id="Basic_Regular" class="<your CustomFontResource class>"
        method="createFont">
    <string>path_to_your_font</string>
    <int>font_size</int>
</object>

xmlのどこでも参照として使用できます。

0
Hanan N