Changer JList ligne de couleur au moment de l'exécution
Je suis en train de changer JList lignes de façon dynamique. J'ai besoin de changer nième ligne de couleur, de le mettre en surbrillance(n est inconnue lors de la compilation). J'ai vu beaucoup d'exemples avec la coutume ListCellRenderer, mais tous étaient "statique".
En d'autres termes, j'ai JList avec x lignes. Au cours de l'exécution de ma "logique d'entreprise" détecte nième ligne est important. Donc, je veux faire de son arrière-plan vert, attendez une seconde, et ensuite de la faire à nouveau blanc. Encore une chose, ne pas wan changement de sélection de ligne.
Quelle est la meilleure façon de le faire?
- msawicki noter que la version précédente de ma réponse serait de bloquer l'ensemble de l'event dispatch thread. ce qui signifie alors que la ligne est mise en évidence, vous ne pouvez pas faire autre chose dans l'interface graphique. et je le dis encore une fois est est juste un petit sample sale
- Ok, Je Vous Remercie. J'ai mis à jour ma version.
Vous devez vous connecter pour publier un commentaire.
Basé sur ListDemo échantillon de SOLEIL.
Si vous entrez du texte dans la zone de texte qui n'est pas dans la liste et vous frappez le mettre en surbrillance est ajoutée.
Si le texte est dans la liste et vous frappez mettez l'entrée en surbrillance dans la liste devient temporairement mis en surbrillance bleue.
Remarque: la solution ici avec le champ de correspondance est juste pour la démo. Pour plus de la mise en œuvre correcte envisager d'autres idées proposées et d'envisager l'utilisation
javax.swing.Timer
Simple, personnaliser la ListCellRenderer à votre JList à l'aide de:
Maintenant à l'intérieur de la méthode de remplacement getListCellRendererComponent() faire quelque chose comme ceci:
L'exemple ci-dessus suppose que votre personnalisé convertisseur overrid DefaultListCellRenderer
Personnalisé de votre ListCellRenderer, qui implémente la méthode
getListCellRendererComponent
, auront accès à la fois à l'JList
et la valeur qu'il est redering. Cela vous donne quelques options pour la façon de déterminer quand la peinture de la nième ligne verte:JList
et ont le convertisseur demander quel couleur à utiliser pour le bg. LeJList
sous-classe pourrait déclencher une mise à jour lors de la logique d'entreprise détermine qu'il est temps pour le nième ligne verte, et puis commencer un SwingTimer
pour déclencher une mise à jour de retourner le bg de retour à la normalegetListCellRendererComponent
, réglage de la bg vert si l'état est correct. Encore une fois, vous avez la possibilité de fixer un SwingTimer
pour revenir à l'état sur le support de l'objet.