TableViewer を一列ではなくマトリックス順に表示する
-
09-09-2019 - |
質問
私が使用するのは、 テーブルビューアー 情報を表に表示します。ユーザーは、表の 1 行を選択することで、表示されたオプションの 1 つを選択できます。
ユーザーが行を選択するだけではない、マトリックス形式のテーブルを作成したいと考えています。行 2 列 3 のように、テーブルのすべての項目を選択できる必要があります。項目を選択するたびに、この項目を TableViewer 内でそのまま処理するアクションが呼び出されます。
今のところ、CellModifierとCellEditorsをテーブルの列の行に追加できますが、アクションの参照は常に行オブジェクトであり、選択したTableItemではありません。
誰かがコンポジット内にそのような行列を作成する方法の例を持っていますか?GridLayout を設定し、for ループにコンポーネントを追加することで作成できますが、新しい子を使用してコンポジットを再描画したい場合に問題が発生します。TableViewer にはすでにこの処理があるため、再度実装する必要はありません。
解決
私はしばらく前に同じ問題を抱えていたと私はそれを解決するために見つけた唯一の方法は、テーブルのビューアに関連する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;
}
}
次に、視聴者の選択リスナーの例のために、あなたはマウスボタンが押されて視聴者の選択から選択した行は、適切なアクションを実行することを組み合わせてきた時に選択した列マウスリスナーに依頼することができます。
これが役立つことを願っています。
マヌ
他のヒント
次の JFace スニペットが役に立つかもしれません。スニペット058CellNavigationIn34
インゴ