Valamit kellene tenni abba az ablakba! Kezdjük a legegyszerűbbel, egy label-el!
Egy labelnek is vannak mindenféle tulajdonságai:
de a lényeg, hogy a fluent builder dolog itt is érvényes! Szóval ugyanaz a kód, mint a Window esetén, csak a labelre:
public class Label extends JLabel {
private static final long serialVersionUID = 1L;
private Label(Builder builder) {
setText(builder.text);
setIcon(builder.icon);
}
public static class Builder {
private String text;
private Icon icon;
public Builder text(String text) {
this.text=text;
return this;
}
public Builder icon(Icon icon) {
this.icon=icon;
return this;
}
public Label build() {
return new Label(this);
}
}
}
Nos, van ott az az icon() dolog. De honnan szerzünk icon-t? A 07-es részben már csináltunk ilyet: nem kevés rondasággal betöltöttünk egy ikont egy web címről.
Icon icon=new ImageIcon(ImageIO.read(new URL("http://dongo.biz/jm/resource/budapest.jpg")));
Minden világos? Az jó. Szerintem ez utálatos, és jó lenne, ha nem kellene ezzel soha többé foglalkozni. Szóval? Szóval csinálunk a builderbe egy másik icon metódust, ami String paramétert vár, és saját maga betölti a hivatkozott képet:
public Builder icon(String iconUrl) {
try {
this.icon=new ImageIcon(ImageIO.read(new URL(iconUrl)));
} catch (Exception e) {
throw new IllegalArgumentException("Can not load icon from url:"+iconUrl);
}
return this;
}
No és akkor már tudunk kulturált Labelt létrehozni, opcionálisan ikonnal is:
Label label=new Label.Builder()
.text("Ez itt Budapest!")
.icon("http://dongo.biz/jm/resource/budapest.jpg")
.build();
Valójában én be is csomagoltam mindet, de most itt kihagyom a magyarázkodást, a 09-es fejezetben mindegyiket megmutatom majd.