我一直在寻找一个先前的问题的答案,有一个巧妙的构思,以克服在JTable的限制。我需要的编辑器是在逐行基础不同,而JTable只能办理每一列的一个编辑器。

所以我的想法是使用一个MouseListener去检查JTable的行和列,每次设置新的编辑器。

但是,要求setCellEditor()第二时间没有任何影响。编辑仍然是成立的第一个。所以,我怎样才能使“setCellEditor”工作第二次对同一列?

下面是在MouseListener的代码。

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));
}
有帮助吗?

解决方案

我不知道为什么你的代码不能正常工作(它已经有一段时间,因为我做的Swing),但你为什么不只是重写

public TableCellEditor getCellEditor(int row, int column)

在你的JTable?保持地图上您要使用的每一行,并在您的覆盖方法返回一个正确的组合框。

其他提示

我的理论是,当所有登记表中的鼠标监听器/ TableCell的调用,安装到系统默认的API类的将被首先调用,您的鼠标监听之前。这意味着导致编辑器中取出将其设置为一个不同的人之前会发生的事件。有点像一个竞争条件,只有它实际上是在API源代码中定义的某个地方......这是我的天真论,我已经可以看到它的一些漏洞,所以在我的解决方案:

覆盖 JTable.getCellEditor(INT行,诠释山口)。这可以让你回到你想要的任何编辑的任何单元格。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top