View Full Version : [Java] JTextField Inserimento Particolare
Salve,
Il mio problema oggi consiste nell'implementare un JTextField con autocompletamento! :D
Cioè, mi spiego meglio: nel mio JTextField comincio a scrivere e (come fà ad esempio Eclipse) sotto mi compaiono tutte le possibili voci che posso scegliere!
Si Può Fare?
Qualcuno sà darmi qualche consiglio?
Grazie!
Andrea
Il mio problema oggi consiste nell'implementare un JTextField con autocompletamento! :D
Cioè, mi spiego meglio: nel mio JTextField comincio a scrivere e (come fà ad esempio Eclipse) sotto mi compaiono tutte le possibili voci che posso scegliere!
Si Può Fare?Allora credo che ti convenga usare un JComboBox, che è in grado di combinare un campo editabile e una lista drop-down. L'autocompletamento comunque lo devi gestire tu.
Ma sul JComboBox devo premere il tastino?
Io non voglio che si debba premere il tasto!
Comincio a scrivere e sotto mi compaia un elenco di suggerimenti.
Ho detto autocompletamento, ma non intendevo quello scusatemi :doh:
Ma sul JComboBox devo premere il tastino?
Io non voglio che si debba premere il tasto!
Comincio a scrivere e sotto mi compaia un elenco di suggerimenti.Bene, allora gestisci un KeyListener, ogni volta che viene premuto un tasto prendi il testo completo e fai una ricerca. Se trovi dei match, reimposti la lista e la visualizzi con setPopupVisible().
Devi ovviamente tenere da qualche parte una "collezione" di stringhe. Il problema semmai è come fare una ricerca "parziale".
Come si reiposta una lista! (JList???) Mai utilizzata!
I Dati ce li ho su DB, dici di leggere tutte le possibilità e di mettermele in memoria in una struttura ad hoc?
Grazie per la tua disponibilità! :)
Come si reiposta una lista! (JList???) Mai utilizzata!
I Dati ce li ho su DB, dici di leggere tutte le possibilità e di mettermele in memoria in una struttura ad hoc?Calma ... un pezzo per volta. Non sono un guru di Swing! ;)
Iniziamo dalla ricerca, credo che possa andare bene un TreeSet. Ecco un esempio di ricerca.
TreeSet<String> ts = new TreeSet<String> ();
ts.add ("pala");
ts.add ("pipa");
ts.add ("pippo");
ts.add ("pizza");
ts.add ("pluto");
String cerca = "pip";
int l = cerca.length ();
String cercaEnd = cerca.substring (0, l-1) + (char) (cerca.charAt (l-1)+1);
SortedSet<String> ss = ts.subSet (cerca, cercaEnd);
Iterator<String> it = ss.iterator ();
while (it.hasNext ())
{
String s = it.next ();
System.out.println ("Trovato: " + s);
}
Come vedi inserisco nel TreeSet un po' di stringhe. Poi vado a cercare "pip" che non c'è come parola intera tra le stringhe. Ma ottengo un sottoinsieme delle stringhe e prendo quelle che iniziano con "pip".
EDIT: ho modificato il codice per usare subSet() invece di tailSet(), così è più efficiente.
Sono "quasi" riuscito a fare una combo-box come chiedi. Ho solamente ancora 2 problemini: la lettura del campo di testo e il fatto che quando apro la lista drop-down il primo elemento viene selezionato e quindi mi sovrascrive il testo nel campo di edit.
Scusa, non volevo metterti fretta! :D Pensavo di non essermi spiegato!!
Crea Problemi se il mio JTextField è un TableCellEditor???
Cioè l'editor associato ad una cella di una JTable!!!
Ci sono quasi!!!
Tu mi dicevi di utilizzare il metodo setPopupVisible(). Ma quello è un metodo della classe MultiComboBox, io ti ricordo che ho un JTextField!
Io ho la mia Jlist installata su un JScrollPane, questa l'ho definita come JPopUpMenu!! Il problema è che la visualizzo solo se clicco sul tasto dx del mouse!
C'è un modo per farla comparire automaticamente??? :mc:
Grazie Ancora.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.