←フエルチラシノウラ。トップページへもどる。

【Java】JFaceのTableViewerを使うサンプル。【SWT】

Java SWT JFace フレームワーク GUI リッチクライアント TableViewer テーブル MVC

【Java】JFaceのTableViewerを使うサンプル。【SWT】

はじめに


JFaceではテーブルを利用するためにTableViewerというクラスを利用します。

作成するクラス


作成するクラスは以下の4つです。

TableViewerTest.java・・・TableViewerテストの起動クラス。
MyItem.java・・・テーブルに表示するアイテム。
MyLabelProvider.java・・・テーブルに表示するアイテムの「見た目」を管理するクラス。
MyCellModifier.java・・・セルを編集するためのクラス。

ソース


TableViewerTest.java
import java.util.ArrayList;

import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.CellEditor;
import org.eclipse.jface.viewers.CheckboxCellEditor;
import org.eclipse.jface.viewers.ColorCellEditor;
import org.eclipse.jface.viewers.ComboBoxCellEditor;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TextCellEditor;
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;
import org.eclipse.swt.widgets.TableColumn;
/**
* JFaceのTableViewerを利用したテーブル操作のテストアプリ
*
*/
public class TableViewerTest extends ApplicationWindow {

public TableViewerTest() {
super(null);
}

public static void main(String[] args) {
TableViewerTest window = new TableViewerTest(); // トップレベル・シェルの作成
window.setBlockOnOpen(true); // ウィンドウが閉じられるまでopen()メソッドをブロック
window.open(); // 表示
Display.getCurrent().dispose(); // Displayの破棄
}

@Override
protected Control createContents(Composite parent) {

// 1. TableViewerを生成
TableViewer viewer = new TableViewer(parent, SWT.FULL_SELECTION);
// 2. TableViewerからTableを取得
Table table = viewer.getTable();
// 3. Tableの罫線表示を可する
table.setLinesVisible(true);
// 4. Tableのヘッダー表示を可にする
table.setHeaderVisible(true);
// 5. ヘッダーのカラムに値をセット
TableColumn column = new TableColumn(table, SWT.NONE);
column.setText("文字列");
column = new TableColumn(table, SWT.RIGHT);
column.setText("チェック");
column = new TableColumn(table, SWT.NONE);
column.setText("色");
column = new TableColumn(table, SWT.CENTER);
column.setText("コンボ・ボックス");
// 6. TableViewerにカラム・プロパティを設定
String[] properties = new String[] { "text", "check", "color", "combo" };
viewer.setColumnProperties(properties);
// 7. TableViewerの各カラムにセルエディタをセットする
CellEditor[] editors = new CellEditor[] { new TextCellEditor(table), // 1カラム目のセルエディタ
new CheckboxCellEditor(table), // 2カラム目のセルエディタ
new ColorCellEditor(table), // 3カラム目のセルエディタ
new ComboBoxCellEditor(table, MyItem.COMBO_ITEM) // 4カラム目のセルエディタ
};
viewer.setCellEditors(editors);
// 8. TableViewerにセルモディファイヤをセットする
viewer.setCellModifier(new MyCellModifier(viewer));
// 9. TableViewerにコンテンツプロバイダーをセットする
viewer.setContentProvider(new ArrayContentProvider());
// 10. TableViewerにラベルプロバイダーをセットする
viewer.setLabelProvider(new MyLabelProvider());
// 11. TableViewerの全行に入力Itemをセット
MyItem item = null;
ArrayList<MyItem> myItemList = new ArrayList<MyItem>();
for (int i = 0; i < 10; i++) {
item = new MyItem();
item.setText("Item " + i);
myItemList.add(item);
}
viewer.setInput(myItemList);
// 12. Tableの各カラム幅を計算する
TableColumn[] columns = table.getColumns();
for (int i = 0; i < columns.length; i++) {
columns[i].pack();
}

return viewer.getControl();
}
}

MyItem.java
import org.eclipse.swt.graphics.RGB;
/**
* 1行分のカラムの中身を表現するクラス
*/
public class MyItem {
/** コンボ・ボックスのアイテムのインデックス */
private int index = 0;

/** カラム1: */
private String text = "";

/** カラム2: チェック有無 */
private boolean checked = true;

/** カラム3: RGB */
private RGB color = new RGB(255, 255, 255);

/** カラム4: コンボ・ボックスに追加するアイテム */
public static final String[] COMBO_ITEM = new String[] { "combo 1",
"combo 2", "combo 3", "combo 4", "combo 5" };

public String getText() {
return text;
}

public void setText(String s) {
text = s;
}

public boolean isChecked() {
return checked;
}

public void setChecked(boolean checked) {
this.checked = checked;
}

public RGB getRGB() {
return color;
}

public void setRGB(RGB rgb) {
color = rgb;
}

public int getIndex() {
return index;
}

public void setIndex(int i) {
index = i;
}
}

MyLabelProvider.java
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.swt.graphics.Image;
/**
* LabelProvider: 1行分のカラムの「見た目」を表現するクラス
*/
public class MyLabelProvider extends LabelProvider implements
ITableLabelProvider {

public Image getColumnImage(Object element, int columnIndex) {
return null;
}

public String getColumnText(Object element, int columnIndex) {
MyItem item = (MyItem) element;
String result = "";
switch (columnIndex) {
case 0:
result = item.getText();
break;
case 1:
result = item.isChecked() ? "チェック有り" : "チェックなし";
break;
case 2:
result = item.getRGB().toString();
break;
case 3:
result = MyItem.COMBO_ITEM[item.getIndex()];
break;
default:
break;
}

return result;
}
}

MyCellModifier.java
import org.eclipse.jface.viewers.ICellModifier;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.swt.graphics.RGB;
import org.eclipse.swt.widgets.Item;
/**
* CellModifier: 1行分のカラムを編集するためのクラス
*/
public class MyCellModifier implements ICellModifier {
private TableViewer viewer;

public MyCellModifier(TableViewer viewer) {
this.viewer = viewer;
}

public boolean canModify(Object element, String property) {
return true;
}

public Object getValue(Object element, String property) {
MyItem item = (MyItem) element;
if (property == "text")
return item.getText();
if (property == "check") {
System.out.println("check:" + item.isChecked());
return new Boolean(item.isChecked());
}
if (property == "color")
return item.getRGB();
if (property == "combo")
return new Integer(item.getIndex());
return null;
}

public void modify(Object element, String property, Object value) {
if (element instanceof Item) {
element = ((Item) element).getData();
}
MyItem item = (MyItem) element;

if (property == "text") {
item.setText((String) value);
}

if (property == "check") {
item.setChecked(((Boolean) value).booleanValue());
}

if (property == "color") {
item.setRGB((RGB) value);
}

if (property == "combo") {
item.setIndex(((Integer) value).intValue());
}

// テーブル・ビューワを更新
viewer.update(element, null);
}
}

http://goodjob.boy.jp/chirashinoura/id/158.html

作成日: 2007-10-09 00:15:57

最終更新日: 2007-10-09 00:15:57

▲このページの上へ