我想知道如何为整个Java Swing程序设置默认字体。根据我的研究,似乎可以使用UIManager
完成,与LookAndFeel
有关,但我找不到具体的方法,并且UIManager
看起来非常复杂。
尝试:
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);
}
}
Call by ...
setUIFont (new javax.swing.plaf.FontUIResource("Serif",Font.ITALIC,12));
UIManager.getLookAndFeelDefaults()
代替UIManager.getDefaults()
,并使用返回的引用而不是UIManager.put()
(请参见下面的答案)。然而,只有在覆盖默认的L&F时才有效(在我的情况下是Nimbus)。 - MatthieuUIManager.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 */);
UIManager.put("OptionPane.messageFont", /*font*/);
和UIManager.put("OptionPane.buttonFont", /*font*/);
。 - matthiasboesingerSwingUtilities.updateComponentTreeUI(this);
时它可以工作。 - Asce4sjava -Dswing.aatext=true -Dswing.plaf.metal.controlFont=Tahoma -Dswing.plaf.metal.userFont=Tahoma …
这不仅会将Tahoma字体应用于您的整个UI,还会打开抗锯齿功能,使任何字体立即更加漂亮。
我认为这样会更好,调用当前laf而不是整个UIManager,把它放在这里
UIManager.getLookAndFeelDefaults()
.put("defaultFont", new Font("Arial", Font.BOLD, 14));
在实例化JFrame对象之前,在主程序的某个位置。 这对我来说完美地工作了。 请记住,这是默认字体,适用于没有指定字体的组件。
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);
}
}
UIManager.put(key, new javax.swing.plaf.FontUIResource(fr.deriveFont(fr.getSize2D() * 2.0f)));
。 - Cheok Yan Chengprivate 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);
}
在调用用户界面之前,我会在main
中调用它。
setFont(new FontUIResource(new Font("Cabin", Font.PLAIN, 14)));
要查看完整的Swing UI Manager键列表,请查看此链接
UIManager.put("Button.font", new FontUIResource(new Font ("Helvetica", Font.BOLD, 16)));
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());
}
}
}
Toolkit.getDefaultToolkit().addAWTEventListener(this, AWTEvent.COMPONENT_EVENT_MASK | AWTEvent.CONTAINER_EVENT_MASK);
我正在使用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 似乎无法正常工作...(基于我进行的有限测试)