トップ 差分 一覧 ソース 検索 ヘルプ 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 ();
  }
}

上記のコードを実行すると以下のようになります。

最終更新時間:2004年08月31日 02時32分53秒