Puoi registrare un MouseListener sui pulsanti. Al verificarsi dell'evento mouseEntered() verifichi se quella casella è accettabile o meno (in base alla tua logica, ovviamente). Se lo è imposti il bordo a verde. Poi al verificarsi di un mouseExited() rimetti le cose a posto.
codice:
class PezzoListener extends MouseAdapter {
@Override
public void mouseEntered(MouseEvent me) {
JButton cmd = (JButton) me.getSource();
if ( posizioneAccettabile(cmd) ) { // Metodo che verifica se i pulsante passato è accettabile secondo la logica del programma
cmd.setBorder( BorderFactory.createLineBorder(Color.GREEN, 2) );
}
}
@Override
public void mouseExited(MouseEvent me) {
((JButton) me.getSource()).setBorder( borderDeafult );
}
}
...
private Border borderDefault; // bordo di default dei pulsanti (va memorizzata alla creazione di un pulsante)
private PezzoListener listener; // Un listener per tutti i pulsanti
...
// Creazione del listener, dei pulsanti e associazione
listener = new PezzoListener();
tuoJButton1 = new JButton( ... );
...
borderDefault = tuoJButton1.getBorder();
...
tuoJButton1.addMouseListener( listener );
...
private boolean posizioneAccettabile(JButton cmd) {
... // Tua logica per decidere se il 'cmd' è accettabile
}
Ciao.