SWT Tips and Samples 基礎編 > ViewerFilter - テーブルのレコードをフィルタリング |
|
ViewerFilter - テーブルのレコードをフィルタリングJFaceのTableViewerには、レコードのフィルタリング機能があります。フィルタリングを行うには、ViewerFilterクラスから継承したクラスのインスタンスを、TableViewerにaddFilterメソッドで追加します。 TableViewer tv = new TableViewer(...); MyFilter filter = new MyFilter(...); //addFilterを実行すると、データはフィルタリングされる tv.addFilter(filter); class MyFilter extends ViewerFilter{ public boolean select(Viewer v, Object p, Object e) { ... //表示したいレコードの場合は、trueを返す return ... } } ... tv.removeFilter(...); 実際のフィルタリングの処理は、ViewerFilterのselectメソッドをオーバーライドすることで実装できます。selectの3番目の引き数 e が、テーブルのレコードに対応するオブジェクトになっており、このメソッドでtrueを返したレコードのみが表示されるという仕組みです。 また追加したフィルターを取り除くには、removeFilter(ViewerFilter)メソッドを使います。 サンプルプログラム男性のみを表示する MaleFilter と20歳以上のレコードを表示する AgeFilter の二つを作って、フィルタリングを行ったサンプルです。ボタンを押すとフィルタリングが行われますが、フィルターが追加されるたびに、表示されるレコードが狭められていくの分かると思います。 ソースコード (TableFilterTest.java)import java.util.ArrayList; import org.eclipse.jface.viewers.ILabelProviderListener; import org.eclipse.jface.viewers.IStructuredContentProvider; import org.eclipse.jface.viewers.ITableLabelProvider; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerFilter; import org.eclipse.jface.window.ApplicationWindow; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.*; import org.eclipse.swt.widgets.*; public class TableFilterTest extends ApplicationWindow { private ArrayList personList; public TableFilterTest() { super(null); } public static void main(String[] args) { ApplicationWindow w = new TableFilterTest(); w.setBlockOnOpen(true); w.open(); Display.getCurrent().dispose(); } protected Control createContents(Composite parent) { getShell().setText("TableViewerTest"); Composite container = new Composite(parent, SWT.NONE); container.setLayout(new GridLayout(3, true)); //リストの初期化 personList = createPersonList(); final TableViewer tv = new TableViewer(container, SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER); //Tableの設定 Table table = tv.getTable(); GridData gd = new GridData(); gd.horizontalSpan = 3; gd.verticalSpan = 5; gd.heightHint = 200; gd.widthHint = 300; table.setLayoutData(gd); TableColumn col1 = new TableColumn(table, SWT.LEFT); col1.setText("社員番号"); col1.setWidth(80); TableColumn col2 = new TableColumn(table, SWT.LEFT); col2.setText("名前"); col2.setWidth(130); TableColumn col3 = new TableColumn(table, SWT.LEFT); col3.setText("性別"); col3.setWidth(50); TableColumn col4 = new TableColumn(table, SWT.LEFT); col4.setText("年齢"); col4.setWidth(50); table.setHeaderVisible(true); //ContentProvider tv.setContentProvider(new TableContentProvider()); tv.setInput(personList); //LabelProvider tv.setLabelProvider(new TableLabelProvider()); tv.setInput(personList); //フィルターの作成 final MaleFilter maleFilter = new MaleFilter(); final AgeFilter ageFilter = new AgeFilter(); //並べ替えのボタンの作成 Button b1 = new Button(container, SWT.PUSH); b1.setText("男性のみを表示"); b1.addSelectionListener(new SelectionAdapter(){ public void widgetSelected(SelectionEvent e) { //Filterがセットされるとフィルタリングが実行される tv.addFilter(maleFilter); } }); Button b2 = new Button(container, SWT.PUSH); b2.setText("20歳以上を表示"); b2.addSelectionListener(new SelectionAdapter(){ public void widgetSelected(SelectionEvent e) { //Filterがセットされるとフィルタリングが実行される tv.addFilter(ageFilter); } }); Button b3 = new Button(container, SWT.PUSH); b3.setText("すべて表示"); b3.addSelectionListener(new SelectionAdapter(){ public void widgetSelected(SelectionEvent e) { tv.removeFilter(maleFilter); tv.removeFilter(ageFilter); } }); return container; } private ArrayList createPersonList() { Person p1 = new Person("00101", "ヤマダ タロウ", "男", 18); Person p2 = new Person("00102", "スズキ ハナコ", "女", 19); Person p3 = new Person("00103", "サトウ イチロウ", "男", 30); Person p4 = new Person("00104", "タカハシ ユウコ", "女", 28); ArrayList personList = new ArrayList(); personList.add(p1); personList.add(p2); personList.add(p3); personList.add(p4); return personList; } class Person { String id; String name; String gender; int age; public Person(String id, String name, String number, int age) { this.id = id; this.name = name; this.gender = number; this.age = age; } } class TableContentProvider implements IStructuredContentProvider { public Object[] getElements(Object inputElement) { java.util.List array = (java.util.List) inputElement; return array.toArray(); } public void dispose() { } public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { } } class TableLabelProvider implements ITableLabelProvider { public Image getColumnImage(Object element, int columnIndex) { return null; } public String getColumnText(Object element, int columnIndex) { Person p = (Person) element; switch (columnIndex) { case 0 : return p.id; case 1 : return p.name; case 2 : return p.gender; case 3: return String.valueOf(p.age); } return null; } public void addListener(ILabelProviderListener listener) { } public void dispose() { } public boolean isLabelProperty(Object element, String property) { return false; } public void removeListener(ILabelProviderListener listener) { } } //男性のみを表示するフィルター class MaleFilter extends ViewerFilter{ public boolean select(Viewer viewer, Object parent, Object e) { String gender = ((Person)e).gender; return gender.equals("男"); } } //20歳以上を表示するフィルター class AgeFilter extends ViewerFilter{ public boolean select(Viewer viewer, Object parent, Object e) { int age = ((Person)e).age; return age >= 20; } } } 最新更新日: 2004年4月29日 |
- PR -
【Sony】大手他社よりも安い!ビジネス向け光・100Mしかも固定IP付!今なら更に初期費用最大15,000円OFF!
オフィス用品・オフィス家具 価 格 交 渉 可!
注文から納品まで驚きの早さ!!【ASKULカタログ】はこちらから・・・ マイクロソフト お得な見積! まとめての購入ならオトクな方法で。ライセンスだから管理も簡単。 シマンテック 割引価格! オンライン販売だから低価格。いつでも簡単、見積・購入。 |
||||
|
|||||
Copyright(C) 2003,2004 Jasmin Project. All Right Reserved. |
SEO | [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送 | ||