У меня есть пользовательская форма с большим списком 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);
}
}
}