J'ai un JButton
qui, lorsqu'il est pressé, change de couleur d'arrière-plan de l'état actif à la normale:Comment puis-je mieux implémenter un effet de bouton de fondu dans Swing?
final Color activeButtonColor = new Color(159, 188, 191);
final Color normalButtonColor = new Color(47, 55, 56);
Je veux effacer la couleur du bouton actif retour à la couleur du bouton normal quand une tâche spécifique a terminé son exécution. J'utilise SwingWorker
et je me demandais si quelqu'un pouvait suggérer un moyen efficace de le faire s'il vous plaît?
button.addActionListener(new ActionListener() {
public void actionPerformed(final ActionEvent event) {
new SwingWorker<Object, Object>() {
protected Object doInBackground() throws Exception {
button.setBackground(activeButtonColor);
for (int note = 60; note < 120; note++) {
midiController.sendMidiMessage(1, note, 83);
midiController.stopMidiMessage(note, 83);
}
Thread.sleep(200);
return null;
}
protected void done() {
try {
Object result = get();
// Fade back
} catch (Exception ex) {
ex.printStackTrace();
if (ex instanceof java.lang.InterruptedException)
return;
}
}
}.execute();
}
});
EDIT: Pour être clair, je suis à la recherche d'un moyen efficace pour estomper les valeurs RVB pour activeButtonColor
retour à normalButtonColor
, sans avoir à créer un grand nombre d'objets Color
. C'est possible? Ou dois-je juste limiter le nombre d'étapes de fondu pour être plus efficace?
Bien sûr, c'est génial, mais comment éviter de créer plusieurs objets Color à chaque fois, pendant le fondu. Je pourrais manquer quelque chose ici, mais la couleur semble être immuable. J'ai besoin de changer les valeurs RVB de la couleur que je suppose. – Jon
Créer un tableau d'objets de couleur intermédiaires et le conserver au niveau de la classe? –