View Full Version : [Java] setText di un JTextField privato
stefandre_nicari
07-03-2010, 17:18
Come faccio a cambiare il testo di un JTextField dichiarato private (da un'altra classe ovviamente)?
Non puoi a meno che non esponi un metodo per farlo nella classe che ti interessa.
Puoi. Devi usare un'invocazione riflessiva. Prima di accedere al membro lo dichiari accessibile (setAccessible(true)). E' una funzione soggetta a restrizioni di sicurezza.
stefandre_nicari
08-03-2010, 13:06
Mi fai un esempio di codice per favore? Metti che il Jbutton si chiama "jButton1"
Puoi. Devi usare un'invocazione riflessiva. Prima di accedere al membro lo dichiari accessibile (setAccessible(true)). E' una funzione soggetta a restrizioni di sicurezza.
Non la sapevo questa cosa... ma come funziona esattamente? Vengono modificati effettivamente i diritti di accesso (da private a public, non credo) oppure viene usato un pattern particolare per modificare questa cosa a run time?
Vado a memoria:
String testoDaImpostare = "qualcosa";
Class<?> classe = NomeClasseColCampo.class
Object x = istanzaDiClasse;
Field campo = classe.getDeclaredField("jButton1");
try {
campo.setAccessible(true);
campo.set(istanzaDiClasse, testoDaImpostare);
} catch(SecurityException ex) {
//log: le impostazioni di sicurezza non consentono l'accesso a membri privati.
}
Ps.: non che sia una bella cosa da fare, normalmente se un membro è privato c'è il suo bel motivo. Ma se si è proprio alle strette...
stefandre_nicari
08-03-2010, 13:29
Molto interessante sta cosa... Per quello che devo fare è uno spreco di codice...tanto vale dichiararli public...ma mi tornerà utile... Grazie mille!
Campo, pubblico? Brutto brutto brutto. Usa sempre un accessore (getter in javese).
DevilMalak
08-03-2010, 13:48
Molto interessante sta cosa... Per quello che devo fare è uno spreco di codice...tanto vale dichiararli public...ma mi tornerà utile... Grazie mille!
Appunto se sei tu che stai scrivendo la classe contenente il JTextField perche` non crei un metodo per modificare il testo di quel campo nella tua classe?
banryu79
08-03-2010, 13:49
Non la sapevo questa cosa... ma come funziona esattamente? Vengono modificati effettivamente i diritti di accesso (da private a public, non credo) oppure viene usato un pattern particolare per modificare questa cosa a run time?
Come ha spiegato PGI.
Considera che questa "tecnica" si usa (ad esempio) nello Unit Test, per testare i metodi privati di una classe dalla classe di test [c'è un topic relativo di qualche giorno fa al proposito].
Usa sempre un accessore (getter in javese).
Senza offesa, ma il termine "accessore" è un'italianizzazione orrenda :cry:
Senza offesa, ma il termine "accessore" è un'italianizzazione orrenda :cry:
E' perchè non hai mai sentito "strumentizzare" :D
banryu79
08-03-2010, 13:59
E' perchè non hai mai sentito "strumentizzare" :D
Non ci credo :O (Oddio!)
In effetti non mi sembra una pratica di tutti i giorni, meglio un campo private e dichiarare i metodi di accesso (accessors :D) getter e setter.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.