Oppure

Loading
21/08/10 14:42
Fr4nk94
ciao a tutti... Allora io vorrei assegnare ad una variabile un textfield, che si trova però in un'altra classe rispetto alla variabile. Cioè ho una classe in cui creo una finestra con un textfield e un bottone, poi aggiungo un ascoltatore per il mouse e quando vado a scrivere il codice per l'ascoltatore avrei bisogno di richiamare il textfield (io avevo pensato di assegnarlo ad una variabile...) ma non so come fare...Grazie in anticipo
aaa
21/08/10 15:56
paoloricciuti
Beh nel costruttore dell'ascoltatore fatti passare il JTextField su cui devi lavorare e lo salvi come variabile di istanza dell'ascoltatore.

EDIT PER: oppure puoi creare una inner class all'interno del frame (classe interna)
Ultima modifica effettuata da paoloricciuti 21/08/10 16:05
aaa
21/08/10 19:36
nihal
O meglio ancora una classe anonima...
aaa
22/08/10 9:59
Fr4nk94
Postato originariamente da paoloricciuti:

Beh nel costruttore dell'ascoltatore fatti passare il JTextField su cui devi lavorare e lo salvi come variabile di istanza dell'ascoltatore.


beh è proprio quello che volevo fare, solo che non sono capace... e cmq preciso che sto semplicemente usando la classe Frame non JFrame, perciò non ho un JTextField ma un semplice TextField...
aaa
22/08/10 10:02
nihal
Secondo me è più facile creare una classe anonima nel frame, in questo modo hai accesso a tutte le variabili...
aaa
22/08/10 11:26
Fr4nk94
ok... e come faccio a creare una classe anonima? (ho cercato con google ma non ho capito benissimo)
Vi posto comunque la parte del codice interessata:

public class Login
{
public static void main(String[] args)
{
Frame f = new Frame("LogIn");
Panel p1 = new Panel();
Panel p2 = new Panel();
TextField tf1 = new TextField(20);
TextField tf2 = new TextField(20);
Label l1 = new Label("Nickname:");
Label l2 = new Label("Password:");
Button b = new Button("SALVA");
p1.add(l1);
p1.add(tf1);
p2.add(l2);
p2.add(tf2);
f.add(p1,BorderLayout.NORTH);
f.add(p2,BorderLayout.CENTER);
f.add(b,BorderLayout.SOUTH);
f.addWindowListener(new chiudi());
b.addMouseListener(new ascoltaclick());
f.setBounds(100,100,350,150);
f.setVisible(true);
}
}

class ascoltaclick extends MouseAdapter
{
public void mouseClciked(MouseEvent e)
{
try
{
FileOutputStream prova = new FileOutputStream("prova.txt");
PrintStream scrivi = new PrintStream(prova);
scrivi.print(???.getText + ???.getText);
System.out.println("Ho scritto sul file");
}
catch(IOException er)
{
System.out.println("Errore:"+er);
System.exit(1);
}
}
}

Ho messo dei punti di domanda dove devo inserire il riferimento ai TextField (rispettivamente tf1 e tf2)...
Ultima modifica effettuata da Fr4nk94 22/08/10 11:57
aaa
22/08/10 12:09
nihal
Si fa così:
public class Login 
{ 
public static void main(String[] args) 
{ 
Frame f = new Frame("LogIn"); 
Panel p1 = new Panel(); 
Panel p2 = new Panel(); 
TextField tf1 = new TextField(20); 
TextField tf2 = new TextField(20); 
Label l1 = new Label("Nickname:"); 
Label l2 = new Label("Password:"); 
Button b = new Button("SALVA"); 
p1.add(l1); 
p1.add(tf1); 
p2.add(l2); 
p2.add(tf2); 
f.add(p1,BorderLayout.NORTH); 
f.add(p2,BorderLayout.CENTER); 
f.add(b,BorderLayout.SOUTH); 
f.addWindowListener(new chiudi()); 
b.addMouseListener(new MouseListener(){
/* codice della classe ascoltaclick in cui puoi usare i reference tf1 e tf2
    */
}); 
f.setBounds(100,100,350,150); 
f.setVisible(true); 
} 
} 

Le classi anonime sono state implementate proprio per semplificare la gestione degli eventi nelle GUI, e nonostante la sintassi non convenzionale una volta che ci si è abituati è difficile farne a meno...
aaa
22/08/10 13:31
Fr4nk94
grazie mille! Ora ho capito... Praticamente specifico direttamente il metodo quando dichiaro l'ascoltatore
aaa