Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: GUI и Java FX приложения > неверное выделение в JTable


Автор: val_vp 25.5.2009, 13:08
Доброго времени суток, 
у меня довольно странная ошибка, вот её суть:
Есть таблица в которой содержиться некоторое кол-во строк (не обязательно много, я воспроизводил при 5-30). Ячейки таблицы не редектируемые, таблица допускает множественное выделение, согласно бизнес требований, при определенных действиях ("подтверждение" или "отказ") выделенные строки таблицы не отображаются, а выделение получает ближайшая строка, т.е. стоит фильтр управляющий видимостью "подтвержденых" или "отказаннх" строк.

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

у нас на проекте свой ГУЙ-й набор (точнее можно наверное даже фрейморком назвать), в него входят и таблицы, и модельки для таблиц, и механизм управления выделением в таблицах, т.н. SelectionKeeper-ы, вот какая чихарда с индексами выделенных строк происходит (в таблице оставалось 4 строки):

Нормальный кейс
действие
индекс --- комент

открыли модуль
0 --- по умолчанию выбирает верхнюю строку
обновили таблицу
0 --- отвечает кнопка update, нужно сделать, что б в таблице были свежие данные, также выделяется верхняя строка (индекс 0)

выделяю 3,4-ю строки 
2 ---  
3 --- собственно выделенными значатся правильные строки

"подтверждение"
2 --- 
3 --- подтверждение, на "подтверждение" идут данные из 2-х строк 2,3

после "подтверждения"
0 ---
0 --- возвращается выделение на 0-ю строку (это поумолчанию поведение таблицы как я понимаю) только почему-то 2 раза ? 
1 ---
1 --- выделение переходит на ближайшую строку по правилам сохранения "выделения", т.к. строки 2,3 теперь не отображаються

Баг (тоже 4 стоки осталось)
обновили таблицу
0 --- выделяется верхняя строка (индекс 0)

выделяю 3,4-ю строки 
2 ---
3 --- вроде выделил их
0 --- 
0 --- и прошел сброс выделения на верхнюю строку !!!

"подтверждение"
0 --- на "подтверждение" пошла неправильно выделенная 0-я строка !!!

после "подтверждения"
0 --- 
0 --- возвращается выделение на 0-ю строку, которой теперь стала 1-я
2 --- 
1 --- 
2 --- далее непонятно как выбирает выделенные строки и почему не сбросило выделение?

метод реализующий "подтверждение" --- вызывается листенером на кнопку "подтверждение"

Ух, написал smile

А вопрос такой - есть ли методика отлова таких багов ? правильно ли я понимаю что проблемы в потоках, т.е. отрисовка и обработчик, выполняющиеся в разных потоках и приводят к такой проблеме ? или это проблема конкретной jdk, на проекте используется 1.4.2_08 (но вот я не очень приуспел в поиске багов swing-а) ?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)