代码之家  ›  专栏  ›  技术社区  ›  Dan

刷新jtable的setcellEditor

  •  0
  • Dan  · 技术社区  · 17 年前

    我在找一个答案 previous question 有一个巧妙的想法来克服 JTable . 我需要编辑器在逐行的基础上有所不同,但是 JTHT 只能为每列处理一个编辑器。

    所以我的想法是用 MouseListener 检查上的行和列 JTHT 每次设置新的编辑器。

    但是,呼唤 setCellEditor() 第二次没有任何效果。编辑器仍然是第一个被设置的编辑器。那么,如何使“setCellEditor”对同一列进行第二次工作呢?

    这是密码 鼠标器 .

    public void mouseClicked(MouseEvent e) {
        int cols = resultTable.columnAtPoint(new Point(e.getX(), e.getY()));
        int rows = resultTable.rowAtPoint(new Point(e.getX(), e.getY()));
        StorageObject item = (StorageObject) resultTable.getModel().getValueAt(rows, cols);
        TableColumn col = resultTable.getColumnModel().getColumn(cols);
        col.setCellEditor(new MyComboBoxEditor(item.list));
    }
    
    2 回复  |  直到 9 年前
        1
  •  3
  •   tddmonkey    17 年前

    我不知道为什么你的代码不起作用(我已经有一段时间没有执行Swing了),但是为什么你不重写它呢?

    public TableCellEditor getCellEditor(int row, int column)
    

    在你的jtable上?维护要用于每行的组合框的映射,并在overriden方法中返回正确的组合框。

        2
  •  1
  •   Cogsy    17 年前

    我的理论是,当调用注册到表/表单元的所有鼠标侦听器时,默认情况下安装到API类的侦听器将首先调用,然后调用鼠标侦听器。这意味着在将编辑器设置为其他编辑器之前,将发生导致其被提取的事件。有点像竞争条件,只是它实际上是在API源代码的某个地方定义的…这是我的幼稚理论,我已经看到其中的一些漏洞,因此我的解决方案:

    重写 JTable.getCellEditor(int row, int col) . 这允许您返回任何单元格所需的编辑器。