2012-03-02 15 views
5

ho ListBox di un GWT con gli oggetti:GWT ListBox non selezionata di default

listBox = new ListBox(); 
listBox.addItem("A"); 
listBox.addItem("B"); 
listBox.addItem("C"); 

e vorrei che fosse initialy non selezionato - in modo che nessun oggetto è selezionato. La mancanza iniziale di selezione dovrebbe essere simbolizzata da un testo vuoto e dopo aver selezionato un elemento l'utente non può scegliere "nessun elemento di selezione".

Purtroppo la seguente riga:

listBox.setSelectedIndex(-1); 

tiri IndexOutOfBoundsException.

E 'possibile ottenere un simile comportamento con GWT ListBox?

+0

allora si potrebbe essere avere una stringa vuota come prima voce, inizialmente, una volta che l'utente selezionato qualsiasi cosa è possibile eliminare il primo. – Reddy

+0

Quindi, se l'utente avrebbe aperto la lista per la prima volta, lui/lei vedrà l'opzione vuota e sarà in grado di raccoglierla. – rafalry

+0

è possibile convalidare o ascoltare cliccare evento ed eliminare l'elemento vuoto. – Reddy

risposta

8

Sì, è situazione normale, perché quando si chiama setSelectedIndex() controllerà l'indice se è nella gamma. C'è un metodo nella classe ListBox.

private void checkIndex(int index) { 
    if (index < 0 || index >= getItemCount()) { 
     throw new IndexOutOfBoundsException(); 
    } 
    } 

Quindi, per impostazione predefinita, verrà selezionato 0 indice. Se si desidera aggiungere un elemento di testo vuota per il primo elemento, aggiungere un elemento aggiuntivo per il valore zero indice con una stringa vuota:

listBox = new ListBox(); 
listBox.addItem(" "); 
listBox.addItem("A"); 
listBox.addItem("B"); 
listBox.addItem("C"); 
listBox.addChangeHandler(new ChangeHandler() { 
     public void onChange(ChangeEvent changeEvent) { 
      SelectElement selectElement = listBox.getElement().cast(); 
      selectElement.getOptions().getItem(0).setDisabled(true); 

     } 
    }); 
+0

Questo non significa che se l'utente sceglie l'elemento vuoto che cambierebbe in qualunque sia il primo oggetto non vuoto? –

0

Vale la pena notare che un ListBox utilizza un tag select. Con un tag select che non specifica l'attributo multiple, la prima voce è selezionata di default dal browser, che non si può fare nulla per prevenire. È possibile modificare questo comportamento, tuttavia: un tag di opzione in HTML può avere un attributo selezionato, il che significa che è la selezione predefinita. Ma GWT non sembra fornire un modo per impostare un elemento come predefinito (sarebbe bello se ci fosse un overload di addItem che ha preso un valore booleano per default-selezionato, o un metodo setDefaultSelected (int index)).

Problemi correlati