Quote Originariamente inviata da Ansharja Visualizza il messaggio
voglio cambiare il colore del testo a seconda che il mouse sia o no al di sopra del componente
Siccome non c'è un "foreground" (il colore) per stati differenti ma solo uno che è unico, questo devi farlo tu espressamente con del codice, ovvero MouseListener, mouseEntered/mouseExited. Quando si entra setti il foreground A, quando si esce setti il foreground B.

Nota però che come leggerai sotto, c'è lo stato "rollover", quindi MouseListener non è l'unica soluzione.

Quote Originariamente inviata da Ansharja Visualizza il messaggio
per i pulsanti con un'icona voglio invece scambiare tra di loro un'icona che indica lo stato attivo e un'altra che indica lo stato disattivo.
Per le icone Swing supporta già tutti gli stati. Ti basta(va) guardare la documentazione javadoc per trovare:

setDisabledIcon
setDisabledSelectedIcon
setRolloverIcon
setSelectedIcon
ecc...

"rollover" è appunto l'effetto di hover. E va abilitato però con setRolloverEnabled.

Quote Originariamente inviata da Ansharja Visualizza il messaggio
Vi vengono idee migliori per gestire l'entrata/uscita del mouse sul singolo componente?
Il concetto è quello. Non mi piace molto tutto il giro di test instanceof, cast ecc.. che fai. Ma ovviamente non conosco l'architettura che hai realizzato. Molto probabilmente si può fare di meglio.

Quote Originariamente inviata da Ansharja Visualizza il messaggio
alcuni bottoni possono essere richiamati anche con la pressione di un tasto sulla tastiera (ho registrato un KeyListener su questo genere di pulsanti), e voglio dare all'utilizzatore la sensazione di aver comunque premuto tale bottone, settandoci per un certo periodo l'icona sullo stato attivo e poi rimettendola allo stato disattivo.
Già il tasto "space" fa premere il pulsante e hai effettivamente la sensazione del "premuto". Prova.
E il tasto space comunque è solo un key-binding, che tra l'altro si può cambiare.


Quote Originariamente inviata da Ansharja Visualizza il messaggio
Pensavo quindi di richiamare un metodo all'interno della classe MyJButton che faccia partire un thread per lo scambio delle icone, qualcosa del genere:

codice:
public void changeIcons()
{ new Thread(new Runnable() {
public void run() {
try{
changeIcon(true); Thread.sleep(250); changeIcon(false);
} catch (InterruptedException e){
e.printStackTrace();
}
}
}).start();
}
Può andare bene come soluzione?
No, sia dal punto di vista tecnico (sei in un thread non il Event Dispatch Thread e quindi non dovresti accedere al/i componente/i) e sia concettualmente non è granché utile.