TreeViewerその2

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ピクセルくらいが良いでしょう。


SWT, JFace  ソフトウェア研究室  PoisonSoft