kikki's tech note

技術ブログです。UnityやSpine、MS、Javaなど技術色々について解説しています。

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();
                }
            }
        }
    }
});

筆休め

現在、SWTGUIを作る機会は殆どないと思いますが、Eclipseの拡張ツールを作る際には利用されると思います。SWTは、痒いところに手が届かず、試行錯誤が必要と感じました。

以上、「Eclipse Application開発で編集できる表を作ってみる」でした。


※無断転載禁止 Copyright (C) kikkisnrdec All Rights Reserved.