SWT Tips and Samples 基礎編 > ViewerSorter - テーブルの並べ替え |
|
ViewerSorter - テーブルの並べ替えJFaceのTableViewerには、並べ替えの機構が用意されています。テーブルのレコードを並べ替えるには、ViewerSorterクラスを継承したクラスを TableViewerのsetSorter メソッドでセットするだけです。並べ替えのロジックは、ViewerSorterクラスのcompareメソッドをオーバーライドすることで実装します。 TableViewer tv = new TableViewer(...); //setSorterを実行するとソートが行われる tv.setSoter(new MyTableSorter()); class MyTableSorter extends ViewerSorter{ public int compare(Viewer viewer, Object e1, Object e2) { ... //e1<e2のときは負の値、e1=e2のときは0 //e1>e2のときは正の値を返すように計算する return ret; } } TableViewerのsetSorterメソッドが呼ばれた瞬間に、実際の並べ替えが行われます。 サンプルプログラム「名前で並べ替え」のボタンをクリックすると、ソートが行われます。 ソースコード (TableSortTest.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.ViewerSorter; 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 TableSortTest extends ApplicationWindow { private ArrayList personList; public TableSortTest() { super(null); } public static void main(String[] args) { ApplicationWindow w = new TableSortTest(); 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); table.setHeaderVisible(true); //ContentProvider tv.setContentProvider(new TableContentProvider()); tv.setInput(personList); //LabelProvider tv.setLabelProvider(new TableLabelProvider()); tv.setInput(personList); //並べ替えのボタンの作成 Button b1 = new Button(container, SWT.PUSH); b1.setText("名前で並べ替え"); b1.addSelectionListener(new SelectionAdapter(){ public void widgetSelected(SelectionEvent e) { //Sorterがセットされるとソートが実行される tv.setSorter(new PersonNameSorter()); } }); return container; } private ArrayList createPersonList() { Person p1 = new Person("00101", "ヤマダ タロウ", "男"); Person p2 = new Person("00102", "スズキ ハナコ", "女"); Person p3 = new Person("00103", "サトウ イチロウ", "男"); Person p4 = new Person("00104", "タカハシ ジロウ", "女"); 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; public Person(String id, String name, String number) { this.id = id; this.name = name; this.gender = number; } } 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; } 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 PersonNameSorter extends ViewerSorter { public int compare(Viewer viewer, Object e1, Object e2) { Person p1 = (Person) e1; Person p2 = (Person) e2; String str1 = p1.name; String str2 = p2.name; int ret = str1.compareTo(str2); return ret; } } } 最新更新日: 2004年7月14日 |
- PR -
【Sony】大手他社よりも安い!ビジネス向け光・100Mしかも固定IP付!今なら更に初期費用最大15,000円OFF!
オフィス用品・オフィス家具 価 格 交 渉 可!
|
||||
|
|||||
Copyright(C) 2003,2004 Jasmin Project. All Right Reserved. |
SEO | [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送 | ||