如何一次性设置所有Java Swing GUI组件的背景和前景(字体)颜色?

4

我有大量的jbutton,jtextfield,jlabel,jmenu和GUI元素,逐一设置背景颜色和前景颜色非常耗时。

我希望能够快速、简洁地为我的项目中的所有jmenu、jmenuitem、jtextfield、jbutton等着色字体(前景)和背景色。

是否有任何技巧可以更加简洁地完成这项工作,而不是逐一进行设置?


每个人都是正确的,因此每个答案都是正确的。 - Philip Nguyen
4个回答

6

4

它们都是JComponents ,因此您可以将所有内容制作成ArrayList

//Adding everything to the ArrayList
ArrayList<JComponent> myComponents = new ArrayList<JComponents>();

JButton b1 = new JButton("Button 1");
myComponents.add(b1);

JMenuItem item = new JMenuItem("Menu Item 1");
myComponents.add(item);

//Coloring the foreground/background
for(JComponent j : myComponents) {
    j.setForeground(new Color("BLUE"));
    j.setBackground(new Color("RED"));
}

4
您可以将Swing与CSS结合使用,或使用Swing Look&Feel来创建组件的标准外观。Java site网站上说:

在我们介绍CSS实现之前,让我们考虑另一种选择:自定义外观和感觉。 Swing外观和感觉(L&F)是一组类,它们以非常低的级别实现组件的实际绘制(考虑线条和位图)。它们可以在运行时被替换为新的外观和感觉,通常用于实现本地平台的外观;即,OSX的JDK有一组类,使Swing应用程序看起来像本地的Aqua应用程序,具有糖果按钮和蓝色色调。自定义L&Fs功能强大,但不是简单或快速构建的。您通常需要涉及20个左右的类,并实现大量特殊绘制代码。

因此,使用CSS更容易。同一篇文章继续提供有关如何使用Swing实现CSS的教程。他们提供了一个很好的步骤,创建正确的规则,然后继续在CSS中实现它们。但是,这不仅仅是“复制并粘贴”代码。

如果您只想使用一个软件包(而不必自己编写代码),那么对于问题我能在Java Swing中使用CSS吗?的答案建议使用Flying SaucerJaxx


3
如果您使用遵循javax.swing.UIManager UI常量的外观和感觉,那么您只需设置它们。例如,有用于面板背景的值。如果没有或者如果您无法通过此方式控制外观,则可以编写自己的UI委托以绘制特定组件(例如JButtons的javax.swing.plaf.ButtonUI)。如果即使这样仍然不够,您可以编写自己的外观和感觉。如果您只是扩展Metal LnF,那并不难,您将编写自己的UI委托并设置属性,就像上面一样,但集中化。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接