2012-03-02 79 views
5

未選中我有一個GWT的列表框的項目:GWT列表框默認

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

,我想它是initialy未選擇 - 所以沒有項目被採摘。最初缺乏選擇應該用空文本來表示,並且在選擇任何項目後用戶不能選擇「不選項目」。

不幸的是以下行:

listBox.setSelectedIndex(-1); 

拋出IndexOutOfBoundsException

是否有可能通過GWT ListBox獲得這樣的行爲?

+0

然後你可能會有一個空字符串作爲第一個項目,一旦用戶選擇任何東西,你可以刪除第一個。 – Reddy 2012-03-02 13:12:27

+0

然後,如果用戶第一次打開列表,他/她將看到空白選項並且能夠選擇它。 – rafalry 2012-03-02 13:32:42

+0

您可以驗證它或聽取點擊事件並刪除空白項目。 – Reddy 2012-03-02 13:37:18

回答

8

是的,這是正常的情況,因爲當你撥打setSelectedIndex()它會檢查索引是否在範圍內。 ListBox類中有方法。

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

因此,默認情況下會選擇0索引。如果你想添加一個空的文本項目的第一個項目,實現零的索引添加額外的項目與一個空字符串:

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

這不意味着如果用戶選擇空白項目,那麼它會改變爲第一個非空白項目? – 2013-10-16 22:37:50

0

值得一提的是,一個ListBox使用select標籤。使用不指定多個屬性的選擇標記,瀏覽器默認選擇第一個項目,您無法做任何事情來阻止。但是,您可以修改此行爲 - HTML中的選項標記可以具有選定的屬性,這意味着它是默認選擇。但是,GWT似乎沒有提供任何方式將項目設置爲默認選擇的項目(如果addItem的重載採用默認選擇的布爾值,或setDefaultSelected(int index)方法),則會很好。