我有大量的 jbuttons、jtextfields、jlabels、jmenus、gui 项目,一次设置一个背景颜色和前景色非常耗时。
我希望能够在我的项目中快速/简洁地为所有 jmenus、jmenuitems、jtextfields、jbuttons 等的字体(前景)和背景着色,而不必一次设置一个。
有没有什么技术可以更简洁地做到这一点,而不是一次做一个?
我有大量的 jbuttons、jtextfields、jlabels、jmenus、gui 项目,一次设置一个背景颜色和前景色非常耗时。
我希望能够在我的项目中快速/简洁地为所有 jmenus、jmenuitems、jtextfields、jbuttons 等的字体(前景)和背景着色,而不必一次设置一个。
有没有什么技术可以更简洁地做到这一点,而不是一次做一个?
您可以将 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 Saucer和Jaxx。
它们都是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"));
}
如果您使用尊重 UI 常量的外观,javax.swing.UIManager
那么您可以设置它们。例如面板背景有一些值。如果没有,或者您无法通过此方法控制外观,您可以编写自己的 UI 委托来绘制特定组件(例如javax.swing.plaf.ButtonUI
,用于 JButtons)。如果这还不够,您可以编写自己的外观。如果您只是扩展 Metal LnF,这并不难,您将编写自己的 UI 委托并设置属性,如上所示,但集中。