Newsgroup: it.comp.java
Titolo: jetextfield controllo su db

Buonasera, come da oggetto, devo realizzare una jtextfield che permetta l'input su un db, ma che segnali "visivamente" all'operatore se il valore che sta inserendo è già presente in archivio.
Avevo pensato a questa soluzione:
un JPanel che contenga all'interno una jtextfield e una jlist (chiaramente anche una jscrollpane), inserisco un listener sulla jtextfield in modo che ad ogni carattere inserito esegua un filtro , scrivo di seguito i punti salienti:
 
public class Pan extends javax.swing.JPanel {
 
private TypedQuery qry;
 
    public Pan() {
        setPreferredSize(new Dimension(300, 20));
    }
 
    public void setQuery(TypedQuery qry){
        this.qry = qry;
        qry.setParameter("nominativo","%"+jTextField1.getText()+"%");
        List<String> results = qry.getResultList();
        MyListModel mylistmodel = new MyListModel(qry.getResultList());
        jList1.setModel(mylistmodel);
 
    }
 
    public String getText(){
           return jTextField1.getText();
    }
 
 
    private void jTextField1KeyReleased(java.awt.event.KeyEvent evt) {                                       
 
        qry.setParameter("nominativo","%"+jTextField1.getText()+"%");
        List<String> results = qry.getResultList();
        if(results.isEmpty()){
 
           // jList1.setVisible(false);
            //jScrollPane1.setVisible(false);
 
 
        }
        else{
            System.out.println("piebno");
            MyListModel mylistmodel = new MyListModel(qry.getResultList());
            jList1.setModel(mylistmodel);
            //jList1.setVisible(true);
            //jScrollPane1.setVisible(true);
            setPreferredSize(new Dimension(300, 100));
        }
 
 
    }                                       
 
Diciamo che a livello di funzionalità va bene, quello che non va è il modo in cui si presenta, mi spiego.
Il panel qui scritto va inserito in un'altro pannello dove ci sono altre jtextfield su cui non ho bisogno di fare controlli; inizialmente si deve presentare come una jtextfield come le altre, nel caso i valori immessi corrispondano a dei dati già esistenti, deve apparire la jlist , altrimenti scomparire.
Inizialmente avevo pensato di fare scomparire e comparire la jlist con setVisible(), poi però il suo container rimaneva visibile e quindi ho utilizzato setVisible() sulla jscrollpane, ma qui sono cominciati i problemi perchè se dichiaro invisibile jscrollpane nel costruttore della classe, poi il setVisible(true) non gli fa ne caldo e ne freddo; allorchè ho pensato di agire sul panel vero e proprio impostandone le dimensioni e scoprendo la lista a bisogno; ma non prende il comando setPreferredSize(new Dimension(300, 100)); perciò, chiedo a voi come posso ovviare a queste problematiche, ditemi se magari devo cambiare strategia
NB non vorrei ricorrere alla jlist all'interno di un popup.
 
Grazie mille a tutti

 Buonasera, come da oggetto, devo realizzare una jtextfield che permetta l'input su un db,  ma che segnali "visivamente" all'operatore se il valore che sta 
inserendo è già presente in archivio.
 
Vorresti semplicemente l'"autocomplete" su un jtextfield?
 
In questo caso basta googlare:
jtextfield autocomplete
 
e trovi tutto quelli che vuoi.
 
Ciao.


Ciao in realtà non voglio un autocomplete , ma semplicemente una lista che segnali all'utente che quel nome inserito è già presente a dei nomi simili o uguali già archiviati...quindi il concetto è di avvertire l'utente che quel nome già c'è e quindi il sistema non glielo farà inserire (chiaramente applicherò un blocco per l'inserimento); dico avvertire perchè voglio escludere che se il sistema non gli inserisce poi mi venga a dire "non me lo fà inserire , perchè?"...non so se mi spiego...

 dico avvertire perchè voglio escludere che se il sistema non gli inserisce poi mi venga a dire "non me lo fà inserire , perchè?"...non so se mi spiego...
 
Allora mi sembra che sia il caso d'uso classico di quando un utente si 
registra su un servizio di posta e si sceglie l'indirizzo di posta.
 
Prova ad andare a vedere su gmail o su yahoo cosa succede quando 
inserisci nella textbox un indirizzo gia' usato. Mi sembra un meccanismo 
ampiamente risolto, senza andare a inventare niente di nuovo.
 
Ciao.


Bè il mio è un caso affrontato da tutti coloro che sviluppano gestionali che si appoggiano su base dati , quindi nulla di nuovo, lo so.
La cosa che però vorrei cercare di risolvere è la parte grafica, cioè ritengo che sia necessario che l'utente veda man mano che scrive cosa esiste e cosa no.
Il meccanismo usato da gmail non mi va bene per due motivi, innanzitutto fa un controllo di uguaglianza sull'account , quindi ti avverte solo nel caso tu hai inserito un indirizzo proprio tale e quale.
Questo meccanismo non è sufficiente poichè nel mio caso viene inserito nome e cognome 
es. ciccio capriccio
nel caso commetta in seguito un errore di digitazione in un successivo inserimento 
es. cicio capriccio
voglio che l'utente sia allertato ugualmente poichè potrebbe anche inserire il nuovo visto che non ne esiste uno completamente uguale ma al tempo stessose venisse informato che esiste già ciccio capriccio, potrebbe capire che non è il caso di inserire cicio capriccio, non so se mi spiego..il tutto con un aspetto grafico adeguato.
Se vi interessa vi dico che ho risolto così:
ho un jpanel con all'interno una jtextfield e una jlist  (jscrollpane chiaramente).Le dimensioni di partenza del pannello sono tali che mostrano solo la jtextfield; ad ogni pressione della tastiera viene fatto un controllo sull' esistenza di una parola simile nel db e nel caso di risultati, il pannello assume una dimensione tale che mostri anche la jlist con le alternative...
 
Grazie del supporto