我用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列,我没有这个错误。
答案 0 :(得分:2)
如果在表中启用了排序或筛选, table 行和列的索引将停止与 model 行和列的索引对齐。您可以使用convertRowIndexToModel
和convertColumnIndexToModel
来解释此问题。
例如,当您使用t.getSelectedRow()
时,您可以这样调整:
int tableRowIndex = t.getSelectedRow();
int modelRowIndex = t.convertRowIndexToModel(tableRowIndex);
如果在使用视图索引时以及使用模型索引时在代码中指明,它也会有所帮助。