|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Sep 2005
Città: Torino
Messaggi: 606
|
[JAVA] autocompletamento!!
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! 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
__________________
"Se proprio dovete piratare un prodotto, preferiamo che sia il nostro piuttosto che quello di qualcun altro." [Jeff Raikes] "Pirating software? Choose Microsoft!" |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
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
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Sep 2005
Città: Torino
Messaggi: 606
|
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...
__________________
"Se proprio dovete piratare un prodotto, preferiamo che sia il nostro piuttosto che quello di qualcun altro." [Jeff Raikes] "Pirating software? Choose Microsoft!" |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
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().
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Sep 2005
Città: Torino
Messaggi: 606
|
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ì!!
quindi seguo i tuoi consigli...grazie e ciao!
__________________
"Se proprio dovete piratare un prodotto, preferiamo che sia il nostro piuttosto che quello di qualcun altro." [Jeff Raikes] "Pirating software? Choose Microsoft!" |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 17:15.



















