トップ 一覧 検索 ヘルプ RSS ログイン

TableTreeEditorの変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
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 ();
   }
 }
上記のコードを実行すると以下のようになります。
{{ref_image TableTreeEditorSample1.png}}