我以前从未使用过Java AWT,现在我有一段显示JFrame
的代码,并将所有子组件的字体属性设置为相同的值。我想在仅限一个地方设置该属性。我怎么能这样做?
在.NET / WinForms中,子控件从其父控件继承,因此设置Form
实例的字体以将其传播到所有控件就足够了。出乎意料的是,这似乎不适用于AWT。
以下小代码以递归方式设置所有组件的字体:
private void setFontForAll(JFrame f, java.awt.Font font) {
f.setFont(font);
setFontRecursive(f.getContentPane().getComponents(), font);
}
private static void setFontRecursive(Component[] components, java.awt.Font font) {
for (Component c : components) {
c.setFont(font);
if (c instanceof java.awt.Container)
setFontRecursive(((java.awt.Container)c).getComponents(), font);
}
}
然而,它有四个缺点:
TitledBorder
的{{1}} s未设置。答案 0 :(得分:8)
UIManager课程是你需要的。在构建用户界面之前,只需告诉它您想要的字体。但要注意;定义了很多字体键,如果你想更改它们,你必须全部设置它们。
UIManager.put( "Button.font", new Font( "Verdana", Font.BOLD, 12f );
UIManager.put( "Label.font", new Font( "Wingdings", Font.ITALIC, 12f );
// ...etc...
您可以通过编程方式检查返回哈希表的UIManager.getDefaults()来查看设置的键和值。
答案 1 :(得分:1)
对于Swing,您还可以使用命令行参数设置字体:
# java -Dswing.plaf.metal.controlFont=Georgia -Dswing.plaf.metal.userFont=Tahoma -jar foo.jar foo.Foo
为抗锯齿添加-Dswing.aatext=true
,这使整个GUI看起来更好。 :)