TableTreeEditorはTableTreeウィジェットに対するエディタです。使い方はTableEditorやTreeEditorとほぼ同じです。サンプルとして、任意のセルを編集可能なTableTreeを実装してみます。セルをクリックするとTextウィジェットで値を編集することができます。
これまでの例と同様、ENTERキーで決定、ESCキーでキャンセルする処理も実装しています。
import org.eclipse.swt.*; import org.eclipse.swt.custom.*; import org.eclipse.swt.events.*; import org.eclipse.swt.graphics.*; import org.eclipse.swt.layout.*; import org.eclipse.swt.widgets.*; public class TableTreeEditorSample1 { public static void main (String [] args) { Display display = new Display (); Shell shell = new Shell(display); shell.setText("TableTreeEditor Sample 1"); shell.setLayout(new FillLayout()); // TableTreeウィジェットを生成 final TableTree tableTree = new TableTree(shell, SWT.BORDER|SWT.FULL_SELECTION); // テーブルのヘッダを設定 final Table table = tableTree.getTable(); String[] cols = {"サイト名","URL"}; for(int i=0;i<cols.length;i++){ TableColumn col = new TableColumn(table,SWT.LEFT); col.setText(cols[i]); col.setWidth(100); } table.setHeaderVisible(true); table.setLinesVisible(true); // TableTreeにアイテムを追加 TableTreeItem item1 = new TableTreeItem(tableTree,SWT.NULL); item1.setText("検索エンジン"); TableTreeItem item2 = new TableTreeItem(item1,SWT.NULL); item2.setText(0,"Yahoo"); item2.setText(1,"http://www.yahoo.co.jp"); TableTreeItem item3 = new TableTreeItem(item1,SWT.NULL); item3.setText(0,"Google"); item3.setText(1,"http://www.google.co.jp"); // TableTreeEditorを生成 final TableTreeEditor editor = new TableTreeEditor(tableTree); editor.horizontalAlignment = SWT.LEFT; editor.grabHorizontal = true; // マウスでクリックされたときの処理 table.addMouseListener (new MouseAdapter() { public void mouseDown(MouseEvent e){ int index = table.getSelectionIndex(); if(index == -1){ return; } tableTree.setSelection(new TableTreeItem[0]); Point point = new Point (e.x, e.y); TableTreeItem item = tableTree.getItem(point); for (int i=0;i < table.getColumnCount();i++) { if (item.getBounds(i).contains (point)) { if(item.getText(i)==null){ return; } final int column = i; final Text text = new Text(table, SWT.NONE); text.setText(item.getText(i)); // フォーカスが外れたときの処理 text.addFocusListener(new FocusAdapter(){ public void focusLost(FocusEvent e){ Text oldEditor = (Text)editor.getEditor(); String text = oldEditor.getText(); TableTreeItem item = editor.getItem(); item.setText(column,text); oldEditor.dispose(); } }); // ENTERとESC押下時の処理 text.addKeyListener(new KeyAdapter(){ public void keyReleased(KeyEvent e){ if(e.character==SWT.CR){ TableTreeItem item = editor.getItem(); item.setText(text.getText()); text.dispose(); } else if(e.keyCode==SWT.ESC){ text.dispose(); } } }); editor.setEditor (text, item, i); text.setFocus(); text.selectAll(); } } } }); // ウィンドウのサイズを指定 shell.setSize(250,120); shell.open(); while (!shell.isDisposed ()){ if (!display.readAndDispatch ()){ display.sleep (); } } display.dispose (); } }
上記のコードを実行すると以下のようになります。
最終更新時間:2004年08月31日 02時32分53秒