Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione Google Pixel 11: non ha l'HiLight dei Pro, ma è il Pixel più equilibrato di sempre
Recensione Google Pixel 11: non ha l'HiLight dei Pro, ma è il Pixel più equilibrato di sempre
Abbiamo provato Google Pixel 11, il più accessibile della nuova gamma: chip Tensor G6 condiviso con i modelli Pro, fotocamera 48 MP con Magic Capture e Stili Fotografici, display Actua da 3000 nit e batteria da 4985 mAh. Ecco come si comporta nell'uso quotidiano, e cosa cambia davvero rispetto a Pixel 11 Pro e Pro XL
Google Pixel 11 Pro XL: fotocamera al top, batteria indietro. Luci e ombre del nuovo flagship
Google Pixel 11 Pro XL: fotocamera al top, batteria indietro. Luci e ombre del nuovo flagship
Google Pixel 11 Pro XL debutta in Italia con il nuovo Tensor G6, lo Zoom Pro fino a 120x, il display Super Actua da 3600 nit e la new entry HiLight riservata ai modelli Pro: lo abbiamo provato in anteprima per diversi giorni prima del lancio commerciale, tra fotocamera generativa, ricarica ancora indietro rispetto ai rivali e un prezzo che parte da 1399 euro
Non sai programmare? Ecco cosa si può fare con un LLM e una GeForce RTX 5070 Ti
Non sai programmare? Ecco cosa si può fare con un LLM e una GeForce RTX 5070 Ti
Con un semplice dialogo in linguaggio naturale e la potenza di una scheda video di fascia alta è possibile costruire software funzionante da zero, senza scrivere una riga di codice e senza inviare un solo byte dei propri dati a server esterni
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 23-09-2009, 13:51   #1
ally
Bannato
 
L'Avatar di ally
 
Iscritto dal: Jan 2003
Città:
Messaggi: 4423
[Java]completamento automatico su textfield

...ciao...

...come da titolo...come si imposta il completamento automatico su una text field che pesca i propri valori da una tabella db?...avete esperienze in merito?...

...ciao Andrea...
ally è offline   Rispondi citando il messaggio o parte di esso
Old 23-09-2009, 15:43   #2
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Un programmatore non imposta, realizza!



Completamento automatico 101

Prendi il Document del campo di testo, quando il contenuto cambia consideri come iniziale del testo la porzione che va da 0 a getCaretPosition(). Fai la ricerca nel database, trovi la migliore corrispondenza, imposti come testo attuale la corrispondenza e selezioni (setSelectionStart, setSelectionEnd) la porzione di testo da getCaretPosition() a getLength().

Et voilà.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 23-09-2009, 17:38   #3
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
ally, devi solo risolvere questo:
Quote:
Originariamente inviato da PGI-Bis Guarda i messaggi
Fai la ricerca nel database, trovi la migliore corrispondenza...
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 23-09-2009, 20:00   #4
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Su un Athlon XP3200 con un dizionario di 704938 parole interamente caricato in memoria (circa 50 megabyte) una semplice scansione lineare con un "word.startsWith(prefisso)" richiede circa 2 centesimi di secondo nel caso peggiore. Considerando che le performace di un homo-digitans medio si attestano sui 2 o 3 caratteri al secondo non risulterebbero problemi di "lag" nell'interazione utente.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 24-09-2009, 00:16   #5
morskott
Member
 
Iscritto dal: Jul 2005
Messaggi: 291
Quote:
Originariamente inviato da PGI-Bis Guarda i messaggi
Un programmatore non imposta, realizza!
[OT]
Questa me la segno!!!!

PS: perchè (non solo in questo 3d) mi trovo sempre d'accordo con te??
[/OT]
__________________
CPU: Intel Core 2 Quad Q6600 - Mobo: Asus P5E - RAM:4x2GB DDR2 - sk video: Power Color ATI Radeon HD3870 - HD:Western Digital 750GB
morskott è offline   Rispondi citando il messaggio o parte di esso
Old 24-09-2009, 00:39   #6
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Perchè sei matto anche tu?
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 01-10-2009, 10:25   #7
ally
Bannato
 
L'Avatar di ally
 
Iscritto dal: Jan 2003
Città:
Messaggi: 4423
...ecco la soluzione al mio cruccio...se mai dovesse servire a qualcuno...presa e legerissimamente modificata da java2s...

Codice:
public class AutoTextField extends JTextField {
    
    class AutoDocument extends PlainDocument {
        
        public void replace(int i, int j, String s, AttributeSet attributeset) throws BadLocationException {
            super.remove(i, j);
            insertString(i, s, attributeset);
        }
        
        public void insertString(int i, String s, AttributeSet attributeset) throws BadLocationException {
            if (s == null || "".equals(s))
                return;
            String s1 = getText(0, i);
            String s2 = getMatch(s1 + s);
            int j = (i + s.length()) - 1;
            if (AutoTextField.this.isStrict && s2 == null) {
                s2 = getMatch(s1);
                j--;
            } else if (!AutoTextField.this.isStrict && s2 == null) {
                super.insertString(i, s, attributeset);
                return;
            }
            if (AutoTextField.this.autoComboBox != null && s2 != null)
                AutoTextField.this.autoComboBox.setSelectedValue(s2);
            super.remove(0, getLength());
            super.insertString(0, s2, attributeset);
            setSelectionStart(j + 1);
            setSelectionEnd(getLength());
        }
        
        public void remove(int i, int j) throws BadLocationException {
            int k = getSelectionStart();
            if (k > 0)
                k--;
            String s = getMatch(getText(0, k));
            if (!AutoTextField.this.isStrict && s == null) {
                super.remove(i, j);
            } else {
                super.remove(0, getLength());
                super.insertString(0, s, null);
            }
            if (AutoTextField.this.autoComboBox != null && s != null)
                AutoTextField.this.autoComboBox.setSelectedValue(s);
            try {
                setSelectionStart(k);
                setSelectionEnd(getLength());
            } catch (Exception exception) {
                //
            }
        }
        
    }
    
    public AutoTextField(List list) {
        this.isCaseSensitive = false;
        this.isStrict = true;
        this.autoComboBox = null;
        if (list == null) 
            throw new IllegalArgumentException("values can not be null");
        this.dataList = list;
        init();
        return;
        
    }
    
    AutoTextField(List list, AutoComboBox b) {
        this.isCaseSensitive = false;
        this.isStrict = true;
        this.autoComboBox = null;
        if (list == null) 
            throw new IllegalArgumentException("values can not be null");
        this.dataList = list;
        this.autoComboBox = b;
        init();
        return;
    }
    
    private void init() {
        
        setDocument(new AutoDocument());
        if (this.isStrict && this.dataList.size() > 0)
            setText(this.dataList.get(0).toString());
    }
    
    String getMatch(String s) {
        
        for (int i = 0; i < this.dataList.size(); i++) {
            String s1 = this.dataList.get(i).toString();
            if (s1 != null) {
                if (!this.isCaseSensitive && s1.toLowerCase().startsWith(s.toLowerCase()))
                    return s1;
                if (this.isCaseSensitive && s1.startsWith(s))
                    return s1;
                
            }
        }
        
        return s;
    }
    
    public void replaceSelection(String s) {
        
        AutoDocument _lb = (AutoDocument) getDocument();
        if (_lb != null)
            try {
                int i = Math.min(getCaret().getDot(), getCaret().getMark());
                int j = Math.max(getCaret().getDot(), getCaret().getMark());
                _lb.replace(i, j - i, s, null);
            } catch (Exception exception) {
                System.out.println(exception);
            }
    }
    
    public boolean isCaseSensitive() {
        return this.isCaseSensitive;
    }
    
    public void setCaseSensitive(boolean flag) {
        this.isCaseSensitive = flag;
    }
    
    public boolean isStrict() {
        return this.isStrict;
    }
    
    public void setStrict(boolean flag) {
        this.isStrict = flag;
    }
    
    public List getDataList() {
        return this.dataList;
    }
    
    public void setDataList(List list) {
        if (list == null) 
            throw new IllegalArgumentException("values can not be null");
        	this.dataList = list;
            init();
            return;
    }
    
    private List dataList;
    
    private boolean isCaseSensitive;
    
    boolean isStrict;
    
    AutoComboBox autoComboBox;
}
Codice:
public class AutoComboBox extends JComboBox {
    
  private class AutoTextFieldEditor extends BasicComboBoxEditor {

    private AutoTextField getAutoTextFieldEditor() {
      return (AutoTextField) this.editor;
    }

    AutoTextFieldEditor(java.util.List list) {
      this.editor = new AutoTextField(list, AutoComboBox.this);
    }
  }

  public AutoComboBox(java.util.List list) {
      
    this.isFired = false;
    this.autoTextFieldEditor = new AutoTextFieldEditor(list);
    setEditable(true);
    setModel(new DefaultComboBoxModel(list.toArray()) {

      protected void fireContentsChanged(Object obj, int i, int j) {
        if (!isFired)
          super.fireContentsChanged(obj, i, j);
      }

    });
    setEditor(AutoComboBox.this.autoTextFieldEditor);
  }

  public boolean isCaseSensitive() {
    return autoTextFieldEditor.getAutoTextFieldEditor().isCaseSensitive();
  }

  public void setCaseSensitive(boolean flag) {
    autoTextFieldEditor.getAutoTextFieldEditor().setCaseSensitive(flag);
  }

  public boolean isStrict() {
    return autoTextFieldEditor.getAutoTextFieldEditor().isStrict();
  }

  public void setStrict(boolean flag) {
    autoTextFieldEditor.getAutoTextFieldEditor().setStrict(flag);
  }

  public java.util.List getDataList() {
    return autoTextFieldEditor.getAutoTextFieldEditor().getDataList();
  }

  public void setDataList(java.util.List list) {
    autoTextFieldEditor.getAutoTextFieldEditor().setDataList(list);
    setModel(new DefaultComboBoxModel(list.toArray()));
  }

  void setSelectedValue(Object obj) {
      
    System.out.println("setSelectedValue");  
      
    if (AutoComboBox.this.isFired) 
      return;
    AutoComboBox.this.isFired = true;
      setSelectedItem(obj);
      fireItemStateChanged(new ItemEvent(this, 701, AutoComboBox.this.selectedItemReminder,
          1));
      AutoComboBox.this.isFired = false;
      return;
    
  }

  protected void fireActionEvent() {
      
      System.out.println("fireActionEvent");     
      
    if (!AutoComboBox.this.isFired)
      super.fireActionEvent();
  }

  private AutoTextFieldEditor autoTextFieldEditor;

 private boolean isFired;

}
...in sinto una comboBox travestita da textField...

Codice:
String getMatch(String s) {
        
        for (int i = 0; i < this.dataList.size(); i++) {
            String s1 = this.dataList.get(i).toString();
            if (s1 != null) {
                if (!this.isCaseSensitive && s1.toLowerCase().startsWith(s.toLowerCase()))
                    return s1;
                if (this.isCaseSensitive && s1.startsWith(s))
                    return s1;
                
            }
        }
        
        return s;
    }
...per evitare l'editabilità della lista...per impedire dunque che il text field possa assumere valori diversi da quanto imposto dalla list è necessario eliminare il return nel metodo qui evidenziato facente parte di AutoTextField...

...ciao Andrea...
ally è offline   Rispondi citando il messaggio o parte di esso
Old 15-03-2011, 09:53   #8
Fire Fox II
Senior Member
 
L'Avatar di Fire Fox II
 
Iscritto dal: Nov 2000
Città: Salerno
Messaggi: 4338
Sto provando un pò la soluzione fornita da Andrea/java2s ...

Non riesco a capire se c'è qualche errore o sbaglio qualcosa io...

Io vorrei fare in modo che ad ogni lettera digitata, mi compaia una lista di possibili soluzioni: per farlo l'unico modo è chiamare AutoComboBox, ma io vorrei ottenerlo con il textField...

Ora ci sono i 2 costruttori

AutoTextField(List list)
AutoTextField(List list, AutoComboBox b)

e teoricamente il secondo dovrebbe essere la soluzione al mio problema, ma praticamente non ottengo alcuna differenza chiamando l'uno o l'altro...

Non so se qualcuno ha provato...
__________________
Doc : "Ovviamente, il continuum temporale è stato interrotto creando questa nuova temporale sequenza di eventi risultante in questa realtà alternativa"
Marty : ...... "Che lingua è, Doc?!?"
Fire Fox II è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione Google Pixel 11: non ha l'HiLight dei Pro, ma è il Pixel più equilibrato di sempre Recensione Google Pixel 11: non ha l'HiLight dei...
Google Pixel 11 Pro XL: fotocamera al top, batteria indietro. Luci e ombre del nuovo flagship Google Pixel 11 Pro XL: fotocamera al top, batte...
Non sai programmare? Ecco cosa si può fare con un LLM e una GeForce RTX 5070 Ti Non sai programmare? Ecco cosa si può far...
Recensione Samsung Galaxy Z Fold8 Ultra: il pieghevole più famoso diventa quasi perfetto Recensione Samsung Galaxy Z Fold8 Ultra: il pieg...
Insta360 X6: Dolby Vision, 8K e montaggio "Zero Editing" Insta360 X6: Dolby Vision, 8K e montaggio "...
Il rover lunare Yutu-2 della missione ci...
A causa di una tempesta tropicale, la mi...
Aggiornamenti importanti per le offerte ...
Tutte le offerte sui dispositivi Amazon:...
2 bestseller Amazon di cui non si parla ...
4 friggitrici ad aria a prezzo stracciat...
Sennheiser Momentum 5, i nuovi auricolar...
Serie A e Serie B al via: guida ai nuovi...
CMF Buds Neo, il sub-brand di Nothing pr...
GTA 6 è già un successo: i preordini sta...
Una Visa scaduta può ancora pagar...
I migliori robot aspirapolvere in offert...
The Duskbloods non cambia la direzione d...
Un weekend di ribassi eccezionali su Ama...
Cosa succede se l'IA diventa una persona...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 05:36.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v