我为我的一个按钮设置了以下属性:
try {
name.setIcon(new javax.swing.ImageIcon(ImageIO.read(newFile("./src/main/java/resorces/Default.png"))));
} catch (IOException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
name.setBorderPainted(false);
name.setContentAreaFilled(false);
name.setFocusPainted(false);
name.setOpaque(false);
我的问题是我有一堆像这样的按钮。我想知道是否有可能使一个方法,将在按钮的名称和设置所有的属性为我。
的例子:
public void SetProperties(??? x){
try {
x.setIcon(new javax.swing.ImageIcon(ImageIO.read(newFile("./src/main/java/resorces/Default.png"))));
} catch (IOException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
x.setBorderPainted(false);
x.setContentAreaFilled(false);
x.setFocusPainted(false);
x.setOpaque(false);
}
谢谢你的帮助!
你可以…
使用"构造模式">
这个概念是提供一个工作流,允许你应用所有你想要的属性,然后有对象"构建",例如…
public class ButtonBuilder<Builder extends ButtonBuilder<Builder>> {
private JButton button;
public ButtonBuilder() {
button = new JButton();
}
public Builder withText(String text) {
button.setText(text);
return (Builder)this;
}
public Builder withIcon(Icon icon) {
button.setIcon(icon);
return (Builder)this;
}
public Builder borderPainted(boolean painted) {
button.setBorderPainted(painted);
return (Builder)this;
}
public Builder contentAreaFilled(boolean painted) {
button.setContentAreaFilled(painted);
return (Builder)this;
}
public Builder focusPainted(boolean painted) {
button.setFocusPainted(painted);
return (Builder)this;
}
public JButton build() {
return button;
}
}
注:注意,构建器的常见模式是将属性存储在某种缓存/查找中,然后在调用build时应用这些属性,但在这种情况下,直接将它们应用于按钮本身更容易
注意:显然,我只提供了一小部分属性,您可能想要为按钮指定,您需要添加其余的;)
然后你可以用这样的东西来创建按钮。
JButton happyButton = new ButtonBuilder()
.withText("Happy")
.withIcon(new ImageIcon(ImageIO.read(getClass().getResource("/images/happy.png"))))
.borderPainted(false)
.focusPainted(false)
.contentAreaFilled(false)
.build();
但这不是我想要的,我不想每次创建按钮时都要重新应用所有属性
是的,我知道,我正要说呢。一旦你有了"基础"构建器,您可以创建一个或多个"自定义"。扩展,可以直接应用默认值,例如…
public class MyCustomButtonBuilder extends ButtonBuilder<MyCustomButtonBuilder> {
public MyCustomButtonBuilder(String text) {
this(text, null);
}
public MyCustomButtonBuilder(Icon icon) {
this(null, icon);
}
public MyCustomButtonBuilder(String text, Icon icon) {
super();
withText(text)
.withIcon(icon)
.borderPainted(false)
.focusPainted(false)
.contentAreaFilled(false);
}
}
,然后可以像这样使用…
JButton sadButton = new MyCustomButtonBuilder("Sad", new ImageIcon(ImageIO.read(getClass().getResource("/images/Sad.png"))))
.build();
<标题>你可以…使用"工厂模式",例如…
public class ButtonFactory {
public static JButton makePlainButton() {
return makePlainButton(null, null);
}
public static JButton makePlainButton(String text) {
return makePlainButton(text, null);
}
public static JButton makePlainButton(String text, Icon icon) {
JButton btn = new JButton(text, icon);
btn.setBorderPainted(false);
btn.setContentAreaFilled(false);
btn.setFocusPainted(false);
btn.setOpaque(false);
return btn;
}
}
可以像这样使用
JButton heartButton = ButtonFactory.makePlainButton(
"Heart",
new ImageIcon(ImageIO.read(getClass().getResource("/images/Heart.png")))
);
工厂模式可以允许您提供多个不同类型的按钮,根据您的共同需求进行不同的配置。
<标题>你可以…结合这两个概念,例如…
public class ButtonFactory {
public static JButton makePlainButton() {
return makePlainButton(null, null);
}
public static JButton makePlainButton(String text) {
return makePlainButton(text, null);
}
public static JButton makePlainButton(String text, Icon icon) {
return new ButtonBuilder()
.withText(text)
.withIcon(icon)
.borderPainted(false)
.focusPainted(false)
.contentAreaFilled(false)
.build();
}
}
标题>标题>