Обновление модели таблицы + fireTableDataChanged () нарушает выбор таблицы

1

У меня есть JTable, который отслеживает количество времени, которое человек ждал, чтобы сидеть в ресторане. Моя проблема в том, что каждую секунду, когда таймер "тикает", выбор, который находится на строке, удаляется. Другими словами, если вы щелкнете строку, она будет выделена синим фоном и контуром, но затем, когда таймер начнет мигать, синий исчезнет.

ActionListener actListner = new ActionListener() 
    {
        public void actionPerformed(ActionEvent event) 
        {
             aTable.updateTime();
        }
    };

    Timer timer = new Timer(1000, actListner);
    timer.start();

Это в основном классе

public void updateTime()
    {
        data.updateTime();
        fireTableDataChanged();
    }

Это в табличной модели

public void updateTime()
       {
            Date newTime = new Date();

            for (int i = 0; i < startTime.size(); i++)
            {                  
                this.setTimeWaiting(i, hoursMin.format(new Date(newTime.getTime() - startTime.get(i).getTime())));  
            }
       }

Это в модели данных.

Теги:
timer
swing
jtable

1 ответ

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

fireTableDataChanged() сообщает этой таблице, что данные могут быть изменены каким-либо образом и, по сути, вы используете ее, когда весь набор данных полностью изменился (например, вы заменили все предыдущее содержимое новой информацией). Таблица будет перерисовываться с нуля, а также может очистить выбор.

Вместо этого используйте более консервативный fireTableCellUpdated(int,int) и укажите каждую ячейку, которая может быть изменена из-за изменения времени (предположительно, все в столбце "время ожидания").

Вы также можете использовать fireTableRowsUpdated(int,int) и указать весь диапазон строк, которые были обновлены за один вызов, но обычно лучше придерживаться консервативной стороны, чтобы минимизировать ненужные перерисовки.

  • 0
    Ах, это прекрасно работает. Спасибо!

Ещё вопросы

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