読者です 読者をやめる 読者になる 読者になる

TableViewer

さて、早速行って見ましょ〜


TableViewerで表示するItemクラスを作成します。

package jface.tableviewer.sample;

public class ItemSample {
	private String text_;
	
	public ItemSample(String text) {
		text_ = text;
	}
	
	public String getText() {
		return text_; 
	}
}

変わり映えのないオーソドックスなクラスですね^^;

で、いつも通り(なのか?)ラベルプロバイダーを用意!

package jface.tableviewer.sample;

import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.swt.graphics.Image;

public class LableProviderSample extends LabelProvider implements ITableLabelProvider {
	public Image getColumnImage(Object element, int columnIndex) {
		return null;
	}
	
	public String getColumnText(Object element, int columnIndex) {
		ItemSample item = (ItemSample) element;
		return item.getText();
	}
}

単純に、ラベルとしてItemクラスのgetText()を呼んでItemクラスが持ってるテキストを表示するようにしてるだけです。
今までと違うのはITableLabelProviderというのをimplimentationしてるところですね。
TableViewerでは複数のColumnに分けてデータを表示することもありえるので、columnIndexも渡されます。
で、このインターフェイスを実装してやることで、getColumnImage()とgetColumnText()メソッドを利用して、Columnごとにラベルを指定できるようになります。(その場合は条件にcolumnIndexを利用して場合わけが必要です。)

で、メインになるWindowクラス

今までと同じ感じでサクッ♪っと作っちゃいます。

package jface.tableviewer.sample;

import java.util.ArrayList;
import java.util.List;

import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.TableViewer;
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;
import org.eclipse.swt.widgets.Table;

public class TableViewerSample extends ApplicationWindow {
	public TableViewerSample() {
		super(null);
	}
	
	public static void main(String[] args) {
		TableViewerSample window = new TableViewerSample();
		window.setBlockOnOpen(true);
		window.open();
		Display.getCurrent().dispose();
	}
	
	protected Control createContents(Composite parent) {
		TableViewer viewer = new TableViewer(parent, SWT.FULL_SELECTION);
		Table table = viewer.getTable();
		table.setLinesVisible(true);
		
		viewer.setContentProvider(new ArrayContentProvider());
		viewer.setLabelProvider(new LableProviderSample());
		
		ItemSample item;
		List<ItemSample> items = new ArrayList<ItemSample>();
		for (int i = 0; i < 10; i++) {
			item = new ItemSample("Item" + i);
			items.add(item);
		}
		
		viewer.setInput(items);
		
		return viewer.getControl();
	}
}

とりあえず、10個Itemを作ってそれをApplicationViewer#setInput()を利用して格納してるだけです。


簡単でしょ?
これで、画面上にTableができて登録した10個のItemが並びます。ちゃんと表示はセットした文字列で表示されてます。


ここまでできればTableを作成するのは簡単だと思えるはずです。


で、明日(有言実行でがんばります!)は、Columnを作ってよりTableらしくってのと、それにComboBoxを埋め込んでみたいと思います♪