我之前从未使用过Java AWT,现在我有一段代码显示JFrame并将所有子组件的font属性设置为相同的值.我想把物业放在一个地方.我怎样才能做到这一点?
在.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);
}
}
Run Code Online (Sandbox Code Playgroud)
但是,它有四个缺点:
TitledBorders的JPanels不会被设置.该UIManager的类是你需要的东西.在构建用户界面之前,只需告诉它您想要的字体.但要注意; 定义了很多字体键,如果你想更改它们,你必须全部设置它们.
UIManager.put( "Button.font", new Font( "Verdana", Font.BOLD, 12f );
UIManager.put( "Label.font", new Font( "Wingdings", Font.ITALIC, 12f );
// ...etc...
Run Code Online (Sandbox Code Playgroud)
您可以通过编程检查返回哈希表的UIManager.getDefaults()来查看设置的键和值.
| 归档时间: |
|
| 查看次数: |
3306 次 |
| 最近记录: |