手動でコンポーネントを作る

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を使わずにZKアプリケーションを開発

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);
   }
}

上級者のための機能 の章のリッチレット部分をご覧ください。



[14] 簡素化するため、ここではファクトリデザインパターンが使われていません。

[15] W3C DOMのコンセプトと類似です。一方、Windows APIでは、開発者はライフサイクルを管理しなければなりません。