JFace

二回目ですね。というか2日目!
今日はList構造で遊んでみましょう♪

package jface.sample;

import org.eclipse.jface.viewers.ListViewer;
import org.eclipse.jface.window.ApplicationWindow;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;

public class JfaceListViewerSample extends ApplicationWindow {
	private ListViewer listViewer;
	
	public JfaceListViewerSample() {
		super(null);
	}
	
	public static void main(String[] args) {
		JfaceListViewerSample window = new JfaceListViewerSample();
		window.setBlockOnOpen(true);
		window.open();
		Display.getCurrent().dispose();
	}
	
	protected Control createContents(Composite parent) {
		listViewer = new ListViewer(parent, SWT.NONE);
		for (int i = 0; i < 3; i++) {
			listViewer.add("ListItem" + i);
		}
		return listViewer.getList();
	}
}


Window作ってList構造を持つListViewerに追加したい文字列をただ入れて表示してるだけですね。


このままじゃ面白くないのでリストにObjectを入れてみましょう。


追加するクラスを簡単に作っておいて

package jface.sample;

public class TestObject {
	private String name_;
	
	public TestObject(String name) {
		name_ = name;
	}
	
	public String toString() {
		return name_;
	}
	
	public String getName() {
		return "getName:" + name_;
	}
}


本当に何の変哲もないクラスです^^;


で、先ほどのJfaceListViewerSampleクラスのlistViewer.addの引数に上記で作ったObjectを追加していくように以下のように変更!
ゲッターがあるのは後で使う仕込みw

viewer.add(new TestObject("TestObject" + i));


実行してもらったらわかるようにラベルの部分はtoStringメソッドが呼ばれてます。


toStringを使わなくてもLabelProviderなるものを利用することで表示名は変更できますので、そちらもテスト〜

LabelProviderを継承したクラスを作ってやります。

package jface.sample;

import org.eclipse.jface.viewers.LabelProvider;

public class TestLabelProviderSample extends LabelProvider {
	public String getText(Object element) {
		return ((TestObject) element).getName();
	}
}


ここで、先ほど仕込んだゲッター登場!


で、メインクラスの中で

listViewer = new ListViewer(parent, SWT.NONE);

の直後に

listViewer.setLabelProvider(new TestLabelProviderSample());

としてあげてラベルプロバイダーをセットしてあげます。


実行すると、ちゃんとゲッターを使って表示してくれてます。


まだ、はじめたばかりなのでこれでも結構感動だったりしますw


今日はとりあえずこれくらいにして、明日以降のネタを模索するためいじり倒しますw