Я создаю простой JTable с TableModel, и я скрыл первый столбец. Я установил в своем 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);
}
}
}
Проблема в том, что: если я вижу полную таблицу, и я clik на одной из таблицы строк, я прочитал право 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, у меня нет этой ошибки.
Когда в вашей таблице включена сортировка или фильтрация, индексы строк и столбцов таблицы перестают выстраиваться с индексами строк и столбцов модели. Вы можете учитывать это, используя convertRowIndexToModel
и convertColumnIndexToModel
.
Например, когда вы используете t.getSelectedRow()
, вы можете настроить так:
int tableRowIndex = t.getSelectedRow();
int modelRowIndex = t.convertRowIndexToModel(tableRowIndex);
Это также поможет, если вы укажете в своем коде, когда используете индексы просмотра, и когда используете модельные индексы.