J'ai une liste, chaque élément a plusieurs choses, y compris un JProgressBar
qui peut être mise à jour beaucoup. Chaque fois que l'un des éléments met à jour son JProgressBar
, la ListDataListener
sur la liste essaie de faire défiler la plage visible à l'aideListe dans JScrollPane peinture à l'extérieur de la fenêtre
/*
* 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);
}
}
Notez que je suis en train de vous assurer que le défilement se fait dans le fil d'expédition, puisque je pensait que le problème était peut-être qu'il défilait pendant qu'il repeignait. Et pourtant, j'ai toujours un problème où, si les choses sont vraiment actives, certains éléments de la liste peignent en dehors de la fenêtre d'affichage, écrasant ce qui est en dehors du JScrollPane
. Forcer un événement d'exposition va repeindre ces choses, mais c'est agaçant.
Y a-t-il quelque chose d'autre dont j'ai besoin pour empêcher ces choses de peindre en dehors de leur zone de découpage?