我有一个包含大量gwt列表框的用户表单。表单就像一个带有命名列表的excel表单。 它太丑了,箭头就会发生。
我希望细胞像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 :(得分:0)
由于您已经编写了自己的小部件,为什么不一直这样做。不要换出列表框小部件的文本框。而不是文本框使用标签。鼠标悬停时,在标签背景中添加箭头,然后使用popupPanel作为列表本身。在popupPanel中,您可以随意制作列表项,只需确保在单击它时,它会在原始标签中设置文本。