隐藏列但未读取正确值

Hidden column but not read the correct value

我用 TableModel 创建了一个简单的 JTable,并隐藏了第一列。 我在我的 JTable 中也设置了 TableRowSorter 这是我用来创建 table

的代码
tableModelArticoliVendere = new MyTableModelDescrizioneArticoli();
tableArticoliVendere = new CustomTableArticoliDaVendereBar(tableModelArticoliVendere);  
sorter = new TableRowSorter<MyTableModelDescrizioneArticoli>(tableModelArticoliVendere);
tableArticoliVendere.setRowSorter(sorter);
tableArticoliVendere.addMouseListener(new MyMouseAdapterArticoliDaVendere());
tableArticoliVendere.removeColumn(tableArticoliVendere.getColumnModel().getColumn(0));

如果用户单击 table 的一行,则调用鼠标侦听器。

这是方法:

public class MyMouseAdapterArticoliDaVendere extends MouseAdapter {
    public void mouseClicked(MouseEvent me) {
        JTable t = (JTable)me.getSource();
        if (me.getClickCount() == 1) {
            String codiceArticolo =((JTable)tableArticoliVendere).getModel().getValueAt(t.getSelectedRow(), 0).toString();
            inserisciProdotto(codiceArticolo);
        }
    }
}

问题是这样的: 如果我看到完整的 table 并点击其中的一行 table,我就正确地阅读了 codiceArticolo。如果我使用行过滤器,并尝试单击第一行,我会出错。

我有 3 行的 table 例如:

TABLE
 column 0| column 1
 ------------------
 valore1 | 1
 valore2 | 2
 valore3 | 3 

如果我使用过滤器我会遇到这种情况:

 TABLE
 column 0| column 1
 ------------------
 valore2 | 2
 valore3 | 3 

如果我尝试点击第一行,codiceArticolo 的值为 valore1 而不是 valore2。

如果我没有隐藏第 0 列,则不会出现此错误。

当您在 table 中启用排序或过滤时,table 行和列的索引停止与 model 行和列。您可以使用 convertRowIndexToModel and convertColumnIndexToModel.

来解释这一点

比如使用t.getSelectedRow()时,可以这样调整:

int tableRowIndex = t.getSelectedRow();
int modelRowIndex = t.convertRowIndexToModel(tableRowIndex);

如果您在代码中指明何时使用视图索引和何时使用模型索引,这也会有所帮助。