Eclipse Application開発で編集できる表を作ってみる
本章では、Eclipse Applicationの開発で用いられる、GUI作成キットのSWTでの編集可能な「テーブル(表)」の実現方法について共有します。
はじめに
開発効率を上げるため、Eclipseの拡張ツールの開発に挑戦しました。その中で、二次元の表データをウィンドウ上に表現し、特定の選択したセルを自由に編集できる必要がありました。
対応方法
対応として、TableEditorを利用して、Table内のセルを編集可能な状態に変更します。そして「Table」の選択イベントから選択されたセルを特定するのですが、選択された列が「Table」の情報に含まれません。そこで、選択された座標から選択されたセルを特定することとします。
ソースコード
以下にソースコードを示します。
Table table = new Table(shell, SWT.BORDER|SWT.FULL_SELECTION); // テーブルを編集可能となるよう設定 final TableEditor editor = new TableEditor(table); editor.grabHorizontal = true; // セルのクリックイベントを登録 table.addListener(SWT.MouseDown, new Listener(){ public void handleEvent(Event event){ // セルのクリック場所を取得 Point pt = new Point(event.x, event.y); TableItem item = table.getItem(pt); if(item != null) { for (int col = 0; col < table.getColumnCount(); col++) { Rectangle rect = item.getBounds(col); if (rect.contains(pt)) { // 編集対象のセルを取得 final int columnIndex = col; final Text editText = new Text(table, SWT.NONE); editText.setText(item.getText(columnIndex)); // テキストからフォーカスが外れた際に、データを更新 editText.addFocusListener(new FocusListener() { public void focusLost(FocusEvent arg0) { TableItem item = editor.getItem(); item.setText(columnIndex,editText.getText()); editText.dispose(); } public void focusGained(FocusEvent arg0) { } }); // セルを編集状態に変更 editor.setEditor(editText, item, columnIndex); editText.setFocus(); editText.selectAll(); } } } } });