我刚刚在第一个Swing项目中找到了这个非常棒的ColorFactory
类。这真的很酷:我现在可以将我的主要类中的命名颜色(例如“crimson”或“mediumaquamarine”)传递给createContentPane
Container
方法。
代码:
frame.setContentPane(ContentPaneCreator.createContentPane("darkorange"));`
问题:
我是否需要public final void setBackground(Color color, JPanel contentPane)
方法?一切都可以在createContentPane()
方法内完成吗?谢谢你的帮助。
import java.awt.Color;
import java.awt.Container;
import javax.swing.JPanel;
public final class ContentPaneCreator extends JPanel {
private static final long serialVersionUID = 1L;
public static Container createContentPane(String color) {
JPanel contentPane = new JPanel();
// awesome txt to Color conversions using the ColorFactory().getColor();
// written by The Lobo Project
new ContentPaneCreator().setBackground(
new ColorFactory().getColor(color), contentPane);
contentPane.setOpaque(true);
return contentPane;
}
public final void setBackground(Color color, JPanel contentPane) {
contentPane.setBackground(color);
}
)
答案 0 :(得分:2)
回答你的问题 - 我不明白为什么(或者为什么你需要从头开始,但干草)。
扩展答案:
它应该是:(如果我们正在查看同一段代码)
ColorFactory.getInstance().getColor(colorName);
另外,你在每个实例化中创建颜色贴图,这只是一种浪费。
我也不确定为什么你需要扩展JPanel,但这不是我的代码:P
答案 1 :(得分:2)
有些事情可能会受到更严格的审查:
当您计划扩展JPanel
时,通过构造函数提供String colorName
并将该名称存储在字段中供以后参考;面板的backgroundColor
是绑定属性。
应重新考虑static factory,ColorFactory.getInstance()
以使用initialization-on-demand holder idiom。
摘自Lobo Project的代码可能已更新。