2012-04-01 22 views
1

我有很多GWT列表框的用戶表單。該表單就像一個具有名稱列表的excel表單。 這是醜陋的,箭頭髮生。如何以編程方式打開gwt listbox?

我想細胞就像在Excel中。箭頭僅在您單擊單元格時出現。

我開始計劃我自己的小工具有一個文本框,並嵌入到DeckPanel一個列表框,當你點擊文本框或當值變化的切換。但有了這個解決方案,有必要再次點擊打開列表框。現在

,這將是巨大的,如果當你點擊文本框,列表框將顯示已打開。

在下面的代碼,我嘗試做入法的onClick這個王氏這一行:

DomEvent.fireNativeEvent(event.getNativeEvent(), listBox); 

但它有沒有影響。 有沒有人有解決方案?

public class CustomListBox extends Composite implements ClickHandler, 
    ChangeHandler, HasChangeHandlers { 

private final StringListBox listBox; 
private final TextBox textBox; 
private final DeckPanel panel; 

public CustomListBox() { 
    textBox = new TextBox(); 
    textBox.addClickHandler(this); 
    textBox.setReadOnly(true); 

    listBox = new StringListBox(); 
    listBox.addChangeHandler(this); 
    panel = new DeckPanel(); 

    panel.add(textBox); 
    panel.add(listBox); 
    panel.showWidget(0); 

    // All composites must call initWidget() in their constructors. 
    initWidget(panel); 
} 

@Override 
public void onClick(ClickEvent event) { 
    Object sender = event.getSource(); 

    if (sender == textBox) { 
     panel.showWidget(1); 
     DomEvent.fireNativeEvent(event.getNativeEvent(), listBox); 
    } 
} 

public void addItem(String item) { 
    listBox.addItem(item); 
} 

public int getSelectedIndex() { 
    return listBox.getSelectedIndex(); 
} 

public String getItemText(int selectedIndex) { 
    return listBox.getItemText(selectedIndex); 
} 

@Override 
public HandlerRegistration addChangeHandler(ChangeHandler handler) { 
    return listBox.addChangeHandler(handler); 
} 

@Override 
public void onChange(ChangeEvent event) { 
    Object sender = event.getSource(); 
    if (sender == listBox) { 
     textBox.setText(getItemText(getSelectedIndex())); 
     panel.showWidget(0); 
    } 
} 
} 
+0

你有沒有解決這個問題?我有一個類似的設置,在這裏我們顯示的文本字段中的數據,然後切換到顯示列表框時,在文本框的用戶點擊編輯。它需要第二次點擊來打開列表框。我們也是ListBox的子類,但似乎還沒有一個乾淨的解決方案。 – user26270 2013-03-20 15:16:26

回答

0

由於您已經在編寫自己的小部件,爲什麼不全部去。不要換出列表框小部件的文本框。而不是文本框使用標籤。將鼠標懸停時,向標籤背景添加箭頭,然後使用popupPanel作爲列表本身。在popupPanel你可以做任何你喜歡的列表項,只要確保當你點擊它,它設置在原始標籤的文本。

+0

感謝Deanna的回答。當然,「開箱即用」解決方案會更好,但我會按照您的建議來嘗試。 – furby91 2012-04-02 20:03:21