2012-04-01 11 views
1

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); 
    } 
} 
} 
+0

これを解決しましたか?私はテキストフィールドにデータを表示し、ユーザーがテキストフィールドをクリックしてそれを編集するときにListBoxを表示するように切り替える同様の設定をしています。 ListBoxを開くには2回目のクリックが必要です。私たちはまた、ListBoxをサブクラス化していますが、まだ清潔なソリューションではないようです。 – user26270

答えて

0

あなた自身で既にウィジェットをプログラミングしているので、どうぞお試しください。リストボックスウィジェットのテキストボックスをスワップしないでください。テキストボックスの代わりにラベルを使用します。マウスの上にラベルの背景に矢印を追加し、リスト自体にpopupPanelを使用します。 popupPanelでは、好きなようにリスト項目を作成できます。クリックすると、元のラベルにテキストが設定されます。

+0

あなたの答えにDeannaを感謝します。もちろん、「すぐに使える」ソリューションが優れていますが、私が提案する方法を試してみます。 – furby91

関連する問題