java - 显示 TableViewer 不是按行,而是按矩阵顺序

标签 java eclipse select swt tableviewer

我使用TableViewer在表格中显示信息。用户可以通过选择表格的一行来选择显示的选项之一。

我想创建一个矩阵形式的表格,其中用户不仅可以选择行。应该可以选择表中的每个项目,例如第 2 行第 3 列。对于每个项目选择,都会调用一个操作来处​​理该项目,就像它在 TableViewer 中一样。

就我现在而言,我可以将 CellModifier 和 CellEditors 添加到表格的列行中,但操作的引用始终是行对象而不是选定的 TableItem。

有人有一个如何在 Composite 中创建这样的矩阵的示例吗? 我可以通过设置 GridLayout 并在 for 循环中添加组件来创建它,但是当我想用新的子组件重新绘制 Composite 时,我会遇到问题。 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;
    }
}

然后,例如在查看器的选择监听器中,您可以询问鼠标监听器在按下鼠标时选择了哪一列,并将其与来自查看器选择的选定行相结合以执行适当的操作。

希望这能有所帮助。

马努

关于java - 显示 TableViewer 不是按行,而是按矩阵顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/948817/

相关文章:

jquery - 使用 Jquery 在弹出框中选择文本

java - 安卓工作室 : connecting to MongoDB server with Mongo Java Driver

eclipse - 在 IDE 中运行 Vertx

java - 批量替换char

Java - JSP/Servlet 示例中的 NullPointerException?

android - 下载最新的 ADT,它是 juno

php - 如何从 mySQL 和 PHP 中检索多维数组的结果?

html - 去掉 IE 中的 <select> 高亮

java - 如何从字符串中提取和分离 double 值?

java - 如何获取当前日期时间——date() 和 calendar()