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

【Java】JFaceのTreeViewerを利用するサンプル【SWT】

Java SWT JFace TreeViewer ツリーコンポーネント ツリービュー ツリー構造 GUI

【Java】JFaceのTreeViewerを利用するサンプル【SWT】

はじめに


JFaceのTreeViewerというクラスを利用すると大変簡単にツリーコンポーネントを操作できます。

用意するクラス


以下の3つのファイルを用意します。

TreeViewerTest.java・・・テスト起動クラス
MyTreeContentProvider.java・・・TreeContentProviderの実装(ツリーの内部データを管理)
MyTreeLabelProvider.java・・・LabelProviderの実装(ツリーの表示を管理)

サンプル


TreeViewerTest.java
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.window.ApplicationWindow;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeItem;

/**
* JFaceのTreeViewerを利用したツリーコンポーネント操作のテストアプリ
*/
public class TreeViewerTest extends ApplicationWindow {

/**
* コンストラクタ
*
*/
public TreeViewerTest() {
super(null);
}

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

@Override
protected void configureShell(Shell shell) {
super.configureShell(shell);
// Set the title bar text and the size
shell.setText("TreeViewerTest.");
shell.setSize(200, 300);
}

@Override
protected Control createContents(Composite parent) {
// 親コンポジットのレイアウト設定
parent.setLayout(new GridLayout(1, false));

/***********************************************************************
* TreeViewerの設定
**********************************************************************/
// TreeViewerを生成
TreeViewer treeViewer = new TreeViewer(parent);
// TreeViewerにContentProviderの実装をセット
treeViewer.setContentProvider(new MyTreeContentProvider());
// TreeViewerにLabelProviderの実装をセット
treeViewer.setLabelProvider(new MyTreeLabelProvider());
// TreeViewerにツリー構造のトップとなるオブジェクトをsetInputする。ここでは適当な文字列を入れています。
treeViewer.setInput("root");
/***********************************************************************
* Treeの設定
**********************************************************************/
// Treeを生成
Tree tree = treeViewer.getTree();
// Treeにレイアウトデータをセット
GridData treeGridData = new GridData(GridData.FILL_BOTH);
tree.setLayoutData(treeGridData);
// TreeにSelectionListenerをセット
tree.addSelectionListener(new SelectionListener(){

public void widgetDefaultSelected(SelectionEvent e) {
TreeItem item = (TreeItem) e.item;
System.out.println("widgetDefaultSelected: " + item.getText());
}

/**
* クリックされたらここを通ります。
*/
public void widgetSelected(SelectionEvent e) {
TreeItem item = (TreeItem) e.item;
System.out.println("widgetSelected: " + item.getText());
}

});

return parent;
}

}


MyTreeContentProvider.java
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.Viewer;

/**
* TreeContentProviderの実装
*/
public class MyTreeContentProvider implements ITreeContentProvider {

/*
* (non-Javadoc)
*
* @see org.eclipse.jface.viewers.ITreeContentProvider#getChildren(java.lang.Object)
*/
public Object[] getChildren(Object arg0) {
// ダミーの子要素を返します。
return new String[] { "child1", "child2", "child3" };
}

/*
* (non-Javadoc)
*
* @see org.eclipse.jface.viewers.ITreeContentProvider#getParent(java.lang.Object)
*/
public Object getParent(Object arg0) {
return null;
}

/*
* (non-Javadoc)
*
* @see org.eclipse.jface.viewers.ITreeContentProvider#hasChildren(java.lang.Object)
*/
public boolean hasChildren(Object arg0) {
// 親ノードならtrueを返し、それでなければfalseを返します。
if (arg0.toString().equals("element1")
|| arg0.toString().equals("element2")) {
return true;
} else {
return false;
}
}

/*
* (non-Javadoc)
*
* @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
*/
public Object[] getElements(Object arg0) {
// ダミーの親要素を返します。
return new String[] { "element1", "element2" };
}

/*
* (non-Javadoc)
*
* @see org.eclipse.jface.viewers.IContentProvider#dispose()
*/
public void dispose() {

}

/*
* (non-Javadoc)
*
* @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer,
* java.lang.Object, java.lang.Object)
*/
public void inputChanged(Viewer arg0, Object arg1, Object arg2) {
}

}


MyTreeLabelProvider.java
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.LabelProvider;
/**
* LabelProviderの実装
*/
public class MyTreeLabelProvider extends LabelProvider implements
ILabelProvider {

/**
* 表示ラベル設定
*/
@Override
public String getText(Object obj) {
// 与えられたオブジェクトを文字列で表示
return obj.toString();
}
/**
* アイコン設定
*/
@Override
public Image getImage(Object element) {
URL urlStr = null;
try {
// クラスパスにimage.gifというアイコン画像 があるものと仮定
urlStr = ClassLoader.getSystemResource("image.gif");
} catch (Exception e) {
e.printStackTrace();
}
return ImageDescriptor.createFromURL(urlStr).createImage();
}

});
}


結果


上記のサンプルでは以下のようなノードが生成されます。

- element1
  - child1
  - child2
  - child3
- element2
  - child1
  - child2
  - child3

ポイント


TreeViewerTest.javaの「TreeViewerの設定」部分がポイントです。
//? TreeViewerを生成
TreeViewer treeViewer = new TreeViewer(parent);
//? TreeViewerにContentProviderの実装をセット
treeViewer.setContentProvider(new MyTreeContentProvider());
//? TreeViewerにLabelProviderの実装をセット
treeViewer.setLabelProvider(new MyTreeLabelProvider());
//? TreeViewerにInputをセット。ここにツリー構造のトップとなるオブジェクトを渡します。
treeViewer.setInput("root");

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

作成日: 2007-10-10 00:17:39

最終更新日: 2007-10-24 17:02:16

▲このページの上へ