2009-06-04 3 views
1

私はTableViewerを使用してテーブルに情報を表示します。ユーザは、表の1行を選択することによって、示されたオプションの1つを選択することができる。TableViewerが行ではなく行列の順番で表示されます

行列形式で表を作成したいのですが、ユーザーは行を選択するだけではなりません。行2列3のように、表の各項目を選択することが可能でなければなりません。すべての項目選択に対して、この項目を処理するためにアクションが呼び出されます。

今のところ、CellModifierとCellEditorsをテーブルの列の行に追加できますが、アクションの参照は常に行オブジェクトであり、選択されたTableItemではありません。

誰かがこのようなマトリックスをコンポジット内に作成する方法の例がありますか? GridLayoutを設定し、forループでコンポーネントを追加することで作成できますが、新しい子でCompositeを再描画したいときに問題が発生します。 TableViewerはすでにこの処理をしているので、もう一度実装したくありません。

答えて

2

私はこれまでと同じ問題を抱えていました。私が解決するために見つけた唯一の方法は、マウスのリスナーをテーブルビューアに関連付けられたSWTテーブルウィジェットに登録することでした。

MouseListener columnSelectionMouseListener = new ColumnSelectionMouseListener(); 
getViewer().getTable().addMouseListener(columnSelectionMouseListener); 

public class ColumnSelectionMouseListener implements MouseListener { 

    private TableColumn selectedColumn; 

    @Override 
    public void mouseDoubleClick(MouseEvent e) { 
     // Nothing to do here 
    } 

    @Override 
    public void mouseDown(MouseEvent e) { 
     table = (Table) e.widget; 
    TableItem item = table.getItem(new Point(e.x, e.y)); 
    for (int i = 0; i < table.getColumnCount(); i++) { 
     TableColumn column = table.getColumn(i); 
     Rectangle bounds = item.getBounds(i); 
     if (bounds.contains(e.x, e.y)) { 
      selectedColumn = column; 
     } 
    } 
    } 

    @Override 
    public void mouseUp(MouseEvent e) { 
     // Nothing to do here 
    } 

    public TableColumn getSelectedField() { 
      return selectedColumn; 
    } 
} 

その後、視聴者の選択リスナーの例のために、あなたは、マウスが押されたとき、列が選択されたマウスリスナーに依頼することができ、選択した行が適切に実行するために視聴者の選択から来ているの組み合わせアクション。

これは役に立ちます。

マヌー