2012-03-02 37 views
5

Tôi đã ListBox của GWT với các mặt hàng:GWT ListBox không được chọn theo mặc định

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

và tôi muốn nó được khởi tạo là không được chọn - vì vậy mà không có mục được chọn. Việc thiếu lựa chọn ban đầu phải được ký hiệu bằng văn bản trống và sau khi chọn bất kỳ mục nào người dùng không thể chọn "không có mục lựa chọn".

Thật không may là dòng sau:

listBox.setSelectedIndex(-1); 

ném IndexOutOfBoundsException.

Có thể có được hành vi như vậy với ListBox GWT không?

+0

thì bạn có thể có một chuỗi trống làm mục đầu tiên ban đầu, khi người dùng đã chọn bất kỳ thứ gì bạn có thể xóa mục đầu tiên. – Reddy

+0

Sau đó, nếu người dùng sẽ mở danh sách lần đầu tiên, họ sẽ thấy tùy chọn trống và sẽ có thể chọn nó. – rafalry

+0

bạn có thể xác nhận hoặc nghe sự kiện nhấp và xóa mục trống. – Reddy

Trả lời

8

Có tình huống bình thường vì khi bạn gọi setSelectedIndex(), nó sẽ kiểm tra chỉ mục xem có nằm trong phạm vi không. Có phương thức trong lớp ListBox.

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

Vì vậy, theo mặc định 0 chỉ mục sẽ được chọn. Nếu bạn muốn thêm một mục văn bản trống cho mục đầu tiên, hãy thêm một mục bổ sung cho zero-index bằng một chuỗi rỗng:

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

Điều này không có nghĩa là nếu người dùng chọn mục trống mà nó sẽ thay đổi thành bất kỳ mục không trống đầu tiên nào? –

0

Cần lưu ý rằng một ListBox sử dụng thẻ được chọn. Với thẻ chọn không chỉ định thuộc tính nhiều, mục đầu tiên được trình duyệt mặc định chọn, bạn không thể làm bất cứ điều gì để ngăn chặn. Tuy nhiên, bạn có thể sửa đổi hành vi này - một thẻ tùy chọn trong HTML có thể có một thuộc tính được chọn, có nghĩa là nó là lựa chọn mặc định. Nhưng GWT dường như không cung cấp bất kỳ cách nào để thiết lập một mục như được chọn mặc định (nó sẽ là tốt đẹp nếu có quá tải addItem dùng boolean để chọn mặc định hoặc phương thức setDefaultSelected (int index)).

Các vấn đề liên quan