TreeViewerでツリー表示をするとき、特に何もしなければノードが閉じている状態は□の中にプラスが描かれた印が、ノードが開いている状態は□の中にマイナスが描かれた印が表示されます。また子ノードを持たない末端(leaf)には印がつきません。これらのノードの状態を示す印の右側にノードをあらわすテキストが表示されます。これがLabelProviderのgetTextメソッドで返される値であることは説明しました。
このテキストの先頭部分に何かイメージを表示するには、LabelProviderのgetImage()メソッドをオーバーライドします。getImage()はgetTextと同様に引数に表示対象のオブジェクト(今の例ではDOMのNodeオブジェクト)が渡されてきますので、この値によって表示すべきイメージを決めることができます。イメージの管理については「アイコンとイメージ」の節で説明しましたので、ここでは省略します。
例えばLabelProviderのコンストラクタで、
private ImageRegistry ir = new ImageRegistry();
public DomLabelProvider() {
super();
URL nUrl = this.getClass().getResource("images/node.png");
ImageDescriptor nid = ImageDescriptor.createFromURL(nUrl);
ir.put("node", nid);
URL lUrl = this.getClass().getResource("images/leaf.png");
ImageDescriptor lid = ImageDescriptor.createFromURL(lUrl);
ir.put("leaf", lid);
}
次のようにイメージを用意しておいて、
public Image getImage(Object object) {
if (object instanceof Node) {
Node node = (Node) object;
if (node.getNodeType() == Node.ELEMENT_NODE) {
ImageDescriptor id = this.ir.getDescriptor("node");
return id.createImage();
} else {
ImageDescriptor id = this.ir.getDescriptor("leaf");
return id.createImage();
}
} else {
return super.getImage(object);
}
}
とするとElementノードにはnode.pngのイメージが、それ以外はleaf.pngのイメージが表示されます。
イメージのサイズは16×16ピクセルくらいが良いでしょう。