PDA

View Full Version : [Java] JTextField Inserimento Particolare


spv42
13-12-2006, 09:58
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

andbin
13-12-2006, 10:13
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.

spv42
13-12-2006, 10:32
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:

andbin
13-12-2006, 10:46
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".

spv42
13-12-2006, 10:59
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à! :)

andbin
13-12-2006, 11:12
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.

spv42
13-12-2006, 11:30
Ok!
Ci sono!

spv42
13-12-2006, 15:14
Poi?

andbin
13-12-2006, 17:07
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.

spv42
13-12-2006, 18:14
Scusa, non volevo metterti fretta! :D Pensavo di non essermi spiegato!!

spv42
14-12-2006, 18:03
Crea Problemi se il mio JTextField è un TableCellEditor???

Cioè l'editor associato ad una cella di una JTable!!!

spv42
16-12-2006, 11:50
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.

spv42
18-12-2006, 10:10
Up!