JAVA2222 ha scritto:
Mi sembra di aver capito che non posso utilizzare ActionListener con le JLabel
No infatti. JLabel è un componente "passivo" il cui scopo è solo generalmente quello di mostrare qualcosa (testo e/o icona). Ma non genera "azioni" di qualche tipo.
JAVA2222 ha scritto:
quindi ho provato con un MouseListener
Sì MouseListener è lecito per tutti i componenti, essendo una gestione a "basso" livello del mouse.
JAVA2222 ha scritto:
ma non capisco come "applicarlo" ad ogni singola JLabel; il mouselistener dev'essere unico e non so come posso riconoscere quale JLabel è stata cliccata.
La implementazione di MouseListener (nel senso di quale classe lo implementa) è di certo unica. Poi bisogna vedere se hai 1 istanza del listener che usi per TUTTI i JLabel oppure invece se vuoi/puoi avere una istanza del listener distinta da assegnare a ciascun JLabel.
Se la istanza del listener è una sola, ovviamente NON potrà mantenere al suo interno informazioni che permettono di determinare quale JLabel, come riga/colonna, è quello interessato. Se avessi istanze distinte del listener, invece sì è possibile.
In sostanza, per risolvere la cosa bene e in modo "object oriented":
1) Incapsuli riga/colonna nella label, questo però presuppone di estendere JLabel:
public class CellLabel extends JLabel {
private int riga;
private int colonna;
// costruttore, getter, ecc...
}
In questo caso puoi avere una sola istanza del listener. Il "source" dell'evento sai a priori che saranno oggetti CellLabel, quindi fai un cast e puoi usare i suoi dati aggiuntivi.
oppure
2) Incapsuli riga/colonna nel listener e questo presuppone che poi avrai una istanza del listener DISTINTA per ciascuna label:
public class CellLabelMouseListener implements MouseListener {
private int riga;
private int colonna;
// costruttore, mouseClicked, ecc....
}