gwt listboxが多いユーザーフォームがあります。フォームは名前付きリストを持つExcelフォームのようなものです。 これは醜いですし、矢印が起こります。プログラムでgwtリストボックスを開くには?
私は細胞が卓越しているように思います。矢印は、セル内をクリックすると表示されます。
テキストボックスとリストボックスをDeckPanelに埋め込み、テキストボックスをクリックしたときや値が変更されたときに、自分のウィジェットをプログラムし始めます。しかし、このソリューションでは、もう一度クリックしてリストボックスを開く必要があります。
ここで、テキストボックスをクリックすると、リストボックスが既に開いていると表示されるようになります。以下のコードで
、私は、この行のwih方法の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);
}
}
}
これを解決しましたか?私はテキストフィールドにデータを表示し、ユーザーがテキストフィールドをクリックしてそれを編集するときにListBoxを表示するように切り替える同様の設定をしています。 ListBoxを開くには2回目のクリックが必要です。私たちはまた、ListBoxをサブクラス化していますが、まだ清潔なソリューションではないようです。 – user26270