【发布时间】:2011-01-07 14:00:28
【问题描述】:
我知道您可以通过设置“外观”来更改应用程序的整体外观。有没有办法在不编写外观类的情况下全局更改组件?例如,如果您希望所有按钮都是黑色的,您将如何做到这一点?我在画一个空白。
谢谢 ST
【问题讨论】:
标签: java swing user-interface look-and-feel uimanager
我知道您可以通过设置“外观”来更改应用程序的整体外观。有没有办法在不编写外观类的情况下全局更改组件?例如,如果您希望所有按钮都是黑色的,您将如何做到这一点?我在画一个空白。
谢谢 ST
【问题讨论】:
标签: java swing user-interface look-and-feel uimanager
使用 UIManager 并更改您的外观和感觉的默认值。这里有一个不错的工具:http://tips4java.wordpress.com/2008/10/09/uimanager-defaults/,如果您运行 Java Web Start 程序,它将允许您浏览每个组件的键和值。
但是,仅仅改变背景可能会导致一些新问题,看看这个问题: Java- Changing swing background colour?
【讨论】:
一种解决方案可以是,工厂模式;
您可以创建一个工厂类来创建具有预定义设置的按钮。每次你 需要一个按钮使用这个工厂类,你会得到具有预定义属性的对象。
Button button = factory.createButton()
class Factory{
Button createButton(){
Button button = new Button();
button.setBackgroundColor(Color.PINK);
return button;
}
}
【讨论】:
如果您有相应组件的集合,您可以循环通过它们设置 BG 颜色。
public void setBgColor( Color color, List< Component > components ) {
for ( Component c : components ) {
c.setBackgroundColor( color );
}
}
困难的部分是获取组件列表。我通过使用集合注册某些组件组并使用上述方法设置各种属性来完成此操作。这种情况是集中创建对象的一个很好的论据。
【讨论】:
如果不仅需要更改颜色怎么办?如果这是一个一切都在您控制之下的应用程序,那么利用继承是有意义的——为所有必需的组件(例如面板、按钮)创建基类并覆盖 paintComponent 方法以满足您的需求。如果基础组件中的paintComponent 方法的行为可以在实例化时通过提供从paintComponent 方法调用的相关“painters”来定制,那么这种方法可以更加模块化。
Here 是一个可能有用的链接。
【讨论】: