隐藏列但未读取正确的值

时间:2015-04-10 10:52:15

标签: java jtable tablemodel

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

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));

如果用户点击表格的一行,则会调用鼠标监听。

这是方法:

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);
        }
    }
}

问题在于: 如果我看到完整的表格并且我在行表中找到了一个,我就读了codiceArticolo。如果我使用行过滤器,并且我尝试单击第一行,则会出现错误。

我有3行的表格,例如:

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

如果我使用过滤器我有这种情况:

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

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

如果我没有隐藏第0列,我没有这个错误。

1 个答案:

答案 0 :(得分:2)

如果在表中启用了排序或筛选, table 行和列的索引将停止与 model 行和列的索引对齐。您可以使用convertRowIndexToModelconvertColumnIndexToModel来解释此问题。

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

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

如果在使用视图索引时以及使用模型索引时在代码中指明,它也会有所帮助。