У меня есть список, в каждом элементе которого есть несколько вещей, в том числе JProgressBar
, который можно много обновлять. Каждый раз, когда один из элементов обновляет свой JProgressBar
, ListDataListener
в списке пытается прокрутить его до видимого диапазона, используя
/*
* This makes the updating content item automatically scroll
* into view if it is off the viewport.
*/
public void contentsChanged(final ListDataEvent evt) {
if (!EventQueue.isDispatchThread()) {
/**
* Make sure the scrolling happens in the graphics "dispatch" thread.
*/
EventQueue.invokeLater(new Runnable() {
public void run() {
contentsChanged(evt);
}
});
}
if (playbackInProgress) {
int index = evt.getIndex0();
currentContentList.ensureIndexIsVisible(index);
}
}
Обратите внимание, что я пытаюсь убедиться, что прокрутка выполняется в потоке отправки, так как я подумал, что, возможно, проблема в том, что она прокручивается во время перерисовки. И все же у меня все еще есть проблема, когда, если что-то действительно активно, некоторые элементы списка рисуются за пределами области просмотра, перезаписывая то, что находится за пределами JScrollPane
. Принудительное событие экспозиции перерисовывает эти вещи, но это раздражает.
Есть ли что-то еще, на что мне нужно обратить внимание, чтобы остановить рисование этих вещей за пределами их области отсечения?