PDA

View Full Version : [Java] popupmenu dei metodi disponibili


Oceans11
28-11-2005, 15:03
Qualcuno di voi ha una vaga idea di come posso fare per creare un popupmenu come fa per esempio eclipse quando premi Ctrl+spazio o metti il punto dopo una variabile???

il problema non è il popup ma come faccio per elencare tutti i metodi e i campi???credo che probabilmente devo leggere tutta la classpath o qlc del genere ma come????

Oceans11
01-12-2005, 11:38
up!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

sottovento
01-12-2005, 12:12
Per elencare i metodi ed i campi, hai la possibilita' di usare la reflection. E' molto semplice, e puoi avere anche la segnatura dei metodi.

Siccome in Java e' implementato un ottimo sistema di reflection, questo argomento lo trovi su tutti i libri (non per principianti, anche se e' semplice...) ed online su parecchi siti.

Non ho un esempio sottomano. Se ti serve, cmq, lo posso scrivere...

High flying
Sottovento

Oceans11
01-12-2005, 13:12
grazie mille sei stato di grandissimo aiuto!!!
e pensare che ho letto praticamente tutto sul tutorial della sun...ma evidentemente quel trail mi era proprio scappato!!!!!!!

cmq se ti capita sotto mano un pò di codice esplicativo mandamelo please


...grazie ancora!!!

sottovento
02-12-2005, 08:13
Ciao,
scusa il ritardo nella risposta.
Come sempre il tempo e' tiranno, ma per fortuna in Internet si trova sempre una soluzione :)

La seguente soluzione l'ho trovata su http://www.javastaff.com/article.php?story=20041220234837954, e penso sia quello che ti interessa (e' un programmino a cui passi in ingresso il nome di una classe e ti dice com'e' fatta...).

High Flying
Sottovento


<CODE>
import java.lang.reflect.*;

public class ProvaReflection {
public static void main(String args[]){
if (!args.length>0) {
System.out.println("Nessuna classe specificata");
System.exit(-1);
}
try {
Class classe = Class.forName(args[0]);
System.out.println(args[0]);
Method metodo[] = classe.getDeclaredMethods();
for (int i = 0; i < metodo.length; i++)
System.out.println("Metodo "i+" "+metodo[i].toString());
Field listacampi[] = classe.getDeclaredFields();
for (int i = 0; i < listacampi.length; i++) {
Field fld = listacampi[i];
System.out.println("Nome = " + fld.getName());
System.out.println("Classe = " +fld.getDeclaringClass());
System.out.println("Tipo= " + fld.getType());
int mod = fld.getModifiers();
System.out.println("Modificatore = " +Modifier.toString(mod));
}
}
catch (Throwable e) {
System.err.println(e);
}
}
}
</CODE>

Oceans11
02-12-2005, 16:54
grazie per tutto...cmq avevo già fatto qualche prova di stampa molto simile a quella!!!un'ultima domanda....cosa sono i Signers?????c'è un metodo che li restituisce ma ho provato con qualche classe e da nullpointerEx (se mi ricordo bene) perchè evidentemente non li uso!!!boh!!!

pisto
02-12-2005, 22:04
Ciao,
scusa il ritardo nella risposta.
Come sempre il tempo e' tiranno, ma per fortuna in Internet si trova sempre una soluzione :)

La seguente soluzione l'ho trovata su http://www.javastaff.com/article.php?story=20041220234837954, e penso sia quello che ti interessa (e' un programmino a cui passi in ingresso il nome di una classe e ti dice com'e' fatta...).

High Flying
Sottovento


<CODE>
import java.lang.reflect.*;

public class ProvaReflection {
public static void main(String args[]){
if (!args.length>0) {
System.out.println("Nessuna classe specificata");
System.exit(-1);
}
try {
Class classe = Class.forName(args[0]);
System.out.println(args[0]);
Method metodo[] = classe.getDeclaredMethods();
for (int i = 0; i < metodo.length; i++)
System.out.println("Metodo "i+" "+metodo[i].toString());
Field listacampi[] = classe.getDeclaredFields();
for (int i = 0; i < listacampi.length; i++) {
Field fld = listacampi[i];
System.out.println("Nome = " + fld.getName());
System.out.println("Classe = " +fld.getDeclaringClass());
System.out.println("Tipo= " + fld.getType());
int mod = fld.getModifiers();
System.out.println("Modificatore = " +Modifier.toString(mod));
}
}
catch (Throwable e) {
System.err.println(e);
}
}
}
</CODE>
quello non ti dà i costruttori, aggiungi

Constructor[] costruttori=classe.getConstructors();
e stampa l'array