4

我有大量的 jbuttons、jtextfields、jlabels、jmenus、gui 项目,一次设置一个背景颜色和前景色非常耗时。

我希望能够在我的项目中快速/简洁地为所有 jmenus、jmenuitems、jtextfields、jbuttons 等的字体(前景)和背景着色,而不必一次设置一个。

有没有什么技术可以更简洁地做到这一点,而不是一次做一个?

4

4 回答 4

6

1)最有效的方法是使用自定义外观,其中一部分有一个不错的主题

2) 为UIDefault设置值,列出 UIDefault 属性

编辑:

@camickr的所有UIManager 默认值中最好的

于 2012-02-14T18:50:35.183 回答
4

您可以将 Swing 与 CSS 结合使用或使用 Swing 外观来为您的组件创建标准外观。Java网站说:

在我们进入 CSS 实现之前,让我们考虑一下替代方案:自定义外观。Swing Look and Feels (L&Fs) 是一组类,它们在非常低的级别(想想线条和位图)实现组件的实际绘制。它们可以在运行时换成新的,通常是为了实现原生平台的外观;即,用于 OSX 的 JDK 具有一组类,这些类使 Swing 应用程序看起来像原生 Aqua 应用程序,带有糖果按钮和蓝色色调。自定义 L&F 功能强大,但构建起来并不简单或快速。您通常必须接触 20 个左右的类并实现一大堆特殊的绘图代码。

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

如果您只想使用一个包(无需自己编写代码),请回答问题Can I use CSS for Java Swing?建议Flying SaucerJaxx

于 2012-02-14T18:51:30.690 回答
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"));
}
于 2012-02-14T18:51:43.540 回答
3

如果您使用尊重 UI 常量的外观,javax.swing.UIManager那么您可以设置它们。例如面板背景有一些值。如果没有,或者您无法通过此方法控制外观,您可以编写自己的 UI 委托来绘制特定组件(例如javax.swing.plaf.ButtonUI,用于 JButtons)。如果这还不够,您可以编写自己的外观。如果您只是扩展 Metal LnF,这并不难,您将编写自己的 UI 委托并设置属性,如上所示,但集中。

于 2012-02-14T18:54:06.123 回答