У меня есть список, каждый элемент которого содержит несколько вещей, в том числе 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
. Принудительное событие экспозиции перекрасит эти вещи, но это раздражает.
Есть ли еще что-то, на что мне нужно обратить внимание, чтобы эти картины не появлялись за пределами их области отсечения?