Salve a tutti, vorrei chiedervi consiglio su come completare questo es, che mi son ritrovato in una sessione d'esame (ahimè!), e non sono riuscito a risolverlo, nemmeno a casa consultando libri e slide sono riuscito a venirne a capo, mi manca poco, però quel poco è molto importante.

Il testo dell'esercizio è il seguente;

Data un interfaccia awt suddivisa in 2 pannelli, il primo in alto con una choice posizionata al centro(NORTH), con una textarea di 10 righe e 30 colonne sempre posizionata al centro ( del frame) e una textfield sul terzo pannello di 10 caratteri in posizionata centralmente in basso (SOUTH).

Scrivere 2 classi:

Una classe Esame che specifica i componenti dell'interfaccia come da figura. La Choice deve presentare come scelte i primi numeri naturali(1,2,3,...), come specificato da un parametro di tipo int passato al costruttore di Esame.

( Suggerimento: il metodo add della classe Choice viene usato per aggiungere le varie opzioni a una Choice; riceve come argomento una String; un modo per trasformare un int in una String è di concatenarlo con la stringa vuota.)


codice:
import java.awt.*;
class Esame extends Frame{
  private Choice c = new Choice();
  private Panel p1= new Panel();
  private Panel p2 = new Panel();
  private TextArea t = new TextArea(10,30);
  private TextField tf = new TextField(10);
 
  public Esame(int[] ch) {
    super("Esame");
	p1.add(c);
	this.add(p1,BorderLayout.NORTH);	
         // array per convertire gli int in stringhe e buttarli in c...
	for(int i = 0; i < ch.length; i++) {
	this.c.add(" "+ch[i]);
	}	
	//tf.add(AscoltatoreTextField2(c,t)); 
       //Questo dovrebbe essere l'ascoltatore del textfield
       //( da assocciare a tf? oppure al frame? bho!)
	this.add(t,BorderLayout.CENTER);
	p2.add(tf);
	this.add(p2,BorderLayout.SOUTH);
	this.setVisible(true);
	this.pack();
} 
  public static void main(String[] args) {
	  int[] ch = {1,2,3,4,5,6,23};
    Frame f = new Esame(ch);
  }
}

Questa è la prima parte e mi sono arrangiato abbastanza dai, il problema è sull'ascoltatore che non riesco ad associarlo al textfield...infatti una volta avviato l'awt dovrebbe generarmi una "moltiplicazione" tra quello che metto nella choice ( moltiplicatore) per il numero nell'textfield e stamparmelo sulla textarea...

ovvero se:
choice = 2;
textField = 3;
premo return e sulla textarea comparirà 6.



Una classe Ascoltatore che deve essere associato al TextField e deve far si che quando l'utente preme return sul textField, il numero intero contenuto nel TextField viene moltiplicato per la scelta della Choice selezionata per ultima e il risultato visualizzato nella TextArea.

(Suggerimento: il costruttore dell'ascoltatore dovrà avere 2 parametri, di tipo CHoice e TextArea. L'evento generato dal return sul TextField è di tipo ActionEvent. Choice ha un metodo d'istanza getSelectedIndex che restituisce l'indice della scelta correntemente selezionata(attenzione: la prima scelta corrisponde allo zero). Per trasformare uno String nell'int corrispondente si usi il metodo di classe Integer.parseInt(). Per visualizzare il risultato nella TextArea usate il metodo append(che come argomento vuole una String).


codice:
import java.awt.*;
import java.awt.event.*;
public class AscoltatoreTextField2 implements ActionListener {
	private Choice c;
	private TextArea t;
		
	public void AscoltatoreTextField2(Choice c, TextArea t) {
        this.c = c;
	this.t = t;	
	}  
	
	public void actionPerformed(ActionEvent Return) {
        int a = c.getSelectedIndex();
	String s = (" +a");
        t.append("s");
	}	  
}
Questo è l'ascoltatore (più o meno) diciamo che ho fatto meglio che ho potuto tuttavia so che è incompleto il metodo actionPerformed non funziona!!
E dovrei riuscire a usare anche la chiamata Integer.parseInt().
Come dice l'es, dovrei convertire 2 volte la choice da string a int e viceversa, in più usare l'append sulla textarea quando premo return....
Ringrazio di cuore chiunque potrà aiutarmi a venire a capo di questo rompicapo!


Da notare che un esercizio di tale complessità non è stato mai nè spiegato nè dato come es. durante il corso!