RISPOSTE AD ALCUNE QUESTIONI EMERSE IN LABORATORIO ================================================== (1) ETICHETTE VUOTE PER RIEMPITIVO Per riempire gli spazi "vuoti" della griglia e' bisogna usare delle etichette con stringa vuota, create con new Label(""). Queste appaiono come uno sfondo di colore neutro con scritto nulla sopra, quindi si prestano egregiamente allo scopo di "tappabuchi". - Devono essere 4 etichette diverse e non la stessa aggiunta 4 volte. - Non e' necessario definire 4 variabili, ma si puo' usare direttamente new Label("") come argomento di add: add(new Label("")); questo crea al volo un'etichetta e, senza salvarla in una variabile, la aggiunge. (2) ABILITAZIONI E DINTORNI Il metodo per rendere editabile o no un campo di testo e' setEditable con argomento un booleano true o false. Il metodo per abilitare o disabilitare un componente e' setEnabled con argomento un booleano. Se lo cercate nella lista dei metodi della classe Button non lo trovate, dovete cercarlo tra i metodi ereditati! (3) CONVERSIONE NUMERO - STRINGA Il modo piu' semplice per convertire un numero, per es. contenuto in una variabile intera count, in stringa e' scrivere: "" + count. Infatti Java converte in stringa tutto cio' che viene concatenato con l'operatore + a una stringa; la stringa vuota serve al nostro scopo. (4) VARI MODI DI DEFINIRE ACTION LISTENER PER I 5 BOTTONI Supponiamo di aver deciso di definire un unico listener per tutti e 5 i bottoni, che va a guardare quale e' stato azionato con getSource. - Non si puo' usare la notazione abbreviata (usata nell'esempio visto a lezione) che condensa in un'istruzione sola le tre fasi: I-definizione della classe che implementa ActionListener, II-creazione di un oggetto di detta classe e III-aggiunta di questo al bottone. Questa notazione ci costringerebbe a definire una diversa classe per ogni bottone, mentre noi abbiamo deciso do farne una unica. - Bisogna quindi separare le tre fasi. Ci sono vari modi. A)- Separiamo la fase III e facciamo le fasi I e II insieme (quindi definizione della classe e creazione dell'oggetto in una sola istruzione, poi questo oggetto sara' associato ai 5 bottoni chiamando 5 volte addActionListener): ActionListener aa = new ActionListener() {....qui nostra definizione della funzione actionPerformed... }; bottone1.addActionListener(aa); bottone2.addActionListener(aa); ecc. B)- Separiamo tutte e 3 le fasi. Definiamo una classe che implementa ActionListener come classe interna della nostra classe. Una classe interna e' una classe definita dentro le {} di un'altra e puo' usare tutte le variabili della classe che la contiene, nel nostro caso puo' usare le variabili che contengono i 5 bottoni ecc. Di questa classe poi creeremo un oggetto e poi lo assoceremo ai 5 bottoni (e' equivalente creare 5 oggetti uno per ogni bottone): Dentro la nostra classe: class AA extends ActionListener {....qui nostra definizione della funzione actionPerformed... }; Dentro il costruttore della nostra classe: AA aa = new AA(); bottone1.addActionListener(aa); bottone2.addActionListener(aa); ecc. oppure: bottone1.addActionListener(new AA()); bottone2.addActionListener(new AA()); ecc. C)- Facciamo si' che la nostra classe, oltre ad estendere Frame, implementi ActionListener. Quindi l'oggetto che stiamo costruendo e' un Frame, ma e' anche un ActionListener, e puo' essere associato lui stesso (identificato in Java con la variabile predefinita this) ai 5 bottoni: Il metodo actionPerformed e' definito come metodo di questa classe, al pari del costruttore e del main. Nel costruttore chiamo: bottone1.addActionListener(this); bottone2.addActionListener(this); ecc.