PDA

View Full Version : [JAVA] autocompletamento!!


Oceans11
18-06-2007, 11:00
salve a tutti.

Vorrei implementare l'autocompletamento dei nomi delle cartelle/file (tipo prompt, premendo tab)

siccome l'autocompletamento è da gestire su jtextfield sto procedendo così:

- al textfield ho agganciato un keylistener per il tasto tab!
- premuto tab prendo la sottostringa che ha come ultimo quello della posizione corrente del caret, come primo l'inizio della parola (insomma dalla posizione del caret, a ritroso fino alla prima occorrenza dello spazio (escluso))
questa substring dovrebbe essere il path su cui devo fare l'autocompletamento.

ora però nascono diversi problemi:

1) se nel path c'è un altro spazio sono fregato! :D (es: c:\documents and settings....che macello!)

2) se per sbaglio sono in un caso in cui funziona ed incomincio a premere tab switcho tra le cartelle/file, se ne seleziono uno però (cioè ripremo tab) e dopo cancello il testo non va più!

ce ne saranno altre mille di problemi...secondo me sto sbagliando approccio...avete consigli?

grazie

PGI-Bis
18-06-2007, 12:11
Io prenderei il testo dal primo carattere fino alla posizione corrente del carrello, poi separerei la parte completa del percorso da quella incompleta. Cioè se nel campo di testo c'è scritto:

c:\programmi\ja[carrello]quel che è

Prenderei la stringa

s = c:\programmi\ja

con

int last = s.lastIndexOf(File.separator)
dir = s.substring(0, last + 1)

ricavo la "base" del percorso, esamino il contenuto di quella cartella:

File[] files = new File(base).listFiles();

e con una semplice scansione lineare decido quale sia il candidato ideale. Per lo scorrimento circolare dei candidati si potrebbe usare la condizione "se base è uguale alla base precedente allora il candidato è quello successivo all'ultimo proposto". Per farlo è sufficiente un piccolo caching della base, della lista di file e dell'indice dell'ultimo candidato.

10 a 1 che ho frainteso il problema :D.

Oceans11
18-06-2007, 14:59
no non hai frainteso....

se ho capito bene la base del percorso devo comunque continuare a ricavarla dalle varie posizioni delle slash giusto???

c'è una piccola nota in più...

se il mio testo fosse: "notepad c:\programmi\java\release notes.txt" come la metto?? non si parte più dal primo carattere...:D

PGI-Bis
18-06-2007, 15:25
Potresti leggere i nomi delle radici del filesystem, cercare quelle nella stringa e prendere l'indice della prima occorrenza come inizio del percorso.

Ottieni l'elenco di radici con il metodo statico File.listRoots().

Oceans11
18-06-2007, 17:45
sì così mi può andare bene...in effetti pensavo che alla pressione di tab senza aver inserito alcun percorso uscisse fuori la dir corrente...ma mi pare troppo ingarbugliato così!! :D
quindi seguo i tuoi consigli...grazie e ciao!