ZUMLページで作られるコンポーネントの記述に加え、開発者は手動でそれらを作ることもできます。すべてのコンポーネントのクラスは結合体で、直接[14] 構築子から作られます。
<window id="main">
<button label="Add Item">
<attribute name="onClick">
new Label("Added at "+new Date()).setParent(main);
new Separator().setParent(main);
</attribute>
</button>
<separator bar="true"/>
</window>
コンポーネントが手動で作られたとき、自動的にページに付け加えられることはありません。つまり、ユーザーのブラウザには現れません。ページにそれを追加するため、setParent
・
appendChild
・
insertBeforeを使い、親とそれをつなげます。そうすれば親がページの一部であれば、そのコンポーネントもページの一部になります。
コンポーネントを削除したり、クローズしたりする方法はありません[15]。コンポーネントがページから離れるとすぐに、ブラウザからも離れてしまいます。ページにつけられるとすぐに表示されます。
<window id="main">
<zscript>Component detached = null;</zscript>
<button id="btn" label="Detach">
<attribute name="onClick">
if(detached != null) {
detached.setParent(main);
detached = null;
btn.label = "Detach";
} else {
(detached = target).setParent(null);
btn.label = "Attach";
}
</attribute>
</button>
<separator bar="true"/>
<label id="target" value="You see this if it is attached."/>
</window>
上の例では、setVisible方法を使えば同じような効果があります。しかしながら、setVisible(false)はブラウザからコンポーネントを取り除きません。ただ、コンポーネント(とすべての子ページ)を見えなくします。
コンポーネントがページから離れると、使っていた(使わなくなった)メモリーはJVMのガーベージコレクタよりリリースされます。
ZUMLを使わない開発者は、いわゆるrichletを使ってすべてのコンポーネントを手動で作ることができます。
import org.zkoss.zul.*;
public class TestRichlet extends org.zkoss.zk.ui.GenericRichlet {
public void service(Page page) {
page.setTitle("Richlet Test");
final Window w = new Window("Richlet Test", "normal", false);
new Label("Hello World!").setParent(w);
final Label l = new Label();
l.setParent(w);
//...
w.setPage(page);
}
}
上級者のための機能 の章のリッチレット部分をご覧ください。