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を埋め込んでみたいと思います♪