gpt4 book ai didi

java - 为所有子组件设置属性

转载 作者:搜寻专家 更新时间:2023-11-01 01:39:21 24 4
gpt4 key购买 nike

我以前从未使用过 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);
}
}

但是,它有四个缺点:

  1. 额外的代码,这对于带有嵌套布局面板的大型表单实际上可能效率很低。
  2. 代码是非通用的。如果将来我需要对另一个属性执行相同的操作,我必须重写该方法(或重构它以使其更通用,但会牺牲简洁性)。
  3. 使用是非声明性的,即必须在表单创建的最后调用(在初始化和添加所有子组件之后),而不是以声明方式在任何地方调用。
  4. 它不起作用。组件设置正确,但并非所有东西都是组件。例如,JPanelTitledBorder 未设置。

最佳答案

UIManager类是你需要的东西。在构建用户界面之前,只需告诉它您想要什么字体。不过请注意;定义了很多字体键,如果您想全部更改它们,则必须全部设置。

UIManager.put( "Button.font", new Font( "Verdana", Font.BOLD, 12f );
UIManager.put( "Label.font", new Font( "Wingdings", Font.ITALIC, 12f );
// ...etc...

您可以查看通过以编程方式检查返回哈希表的 UIManager.getDefaults() 设置的键和值。

关于java - 为所有子组件设置属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/902326/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com