Скрытый столбец, но не прочитано правильное значение

1

Я создаю простой 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, у меня нет этой ошибки.

Теги:
jtable
tablemodel

1 ответ

2
Лучший ответ

Когда в вашей таблице включена сортировка или фильтрация, индексы строк и столбцов таблицы перестают выстраиваться с индексами строк и столбцов модели. Вы можете учитывать это, используя convertRowIndexToModel и convertColumnIndexToModel.

Например, когда вы используете t.getSelectedRow(), вы можете настроить так:

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

Это также поможет, если вы укажете в своем коде, когда используете индексы просмотра, и когда используете модельные индексы.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню