2012-09-25 6 views
5

ListBoxで選択を行う際にユーザーに警告するListBoxを実装しようとしています。ユーザーがリストボックス内の項目をクリックしたときに応答し、「changeEvent」が発生する前にその選択に応答する方法があるので、changeEventが発生するのを防ぐことができます。私はGWT - ListBox、changeEventをプレビューする方法

Event.addNativePreviewHandler(new NativePreviewHandler() { 
    @Override 
    public void onPreviewNativeEvent(NativePreviewEvent event) { 
     System.out.println("EVENT: " + event.getTypeInt()); 
    } 
}); 

を使用して試してみましたが、これはリストボックス内の特定の要素をクリックに反応することはありません、それはあなたがリストボックスを集中するとき、最初にリストボックスをクリックに応答します。私のような何かを行うことができるようにしたい:

Event.addNativePreviewHandler(new NativePreviewHandler() { 
    @Override 
    public void onPreviewNativeEvent(NativePreviewEvent event) { 
     if(event is changeEvent && event source is listBox) { 
      if(do some check here) 
      event.stopPropagation(); 
     } 
    } 
}); 

任意の提案をいただければ幸いです、ありがとう!

+0

@AndreiVolginご返信ありがとうございます。私はそれらがオプションをクリックしてポップアップを表示して続行することに同意してから、changeEventを実行し続けるか、ポップアップへの応答に基づいてchangeEventを取り消すことができるようにします。 –

答えて

4

おかげで皆を。私がやり遂げたことは、リストボックスがフォーカスされたときの選択の状態を保存することでした。このインデックスを保存し、changeEventが発生したときにこのインデックスを切り替えることは、許可されている場合にのみ次の選択に変更します。

@UiHandler("listBox") 
public void onListBoxFocus(FocusEvent event) { 
    this.saveListBoxSelection = listBox.getSelectedIndex(); 
} 

@UiHandler("listBox") 
public void onChange(ChangeEvent event) { 
    int newSelection = listBoxCompliant.getSelectedIndex(); 
    listBox.setSelectedIndex(this.saveListBoxSelection); 
    if(proceed with change) 
     listBox.setSelectedIndex(newSelection); 
    else 
     //cancel event 

これはuibinderを使用して行われますが、このイベントをlistBoxに直接追加することによっても行うことができます。コメントありがとう!

1

ChangeEventを継続することに問題はありません。ロジックをChangeEventハンドラに追加できます。ユーザーが続行しないことを決定した場合は、選択範囲を前の設定に戻すか、選択範囲を削除するだけです。

@Override 
onChange(ChangeEvent event) { 
    // ask user if he wants to continue 
    // if yes 
     doSomething(); 
    // if no 
     myList.setSelectedIndex(-1); 
} 
3

あなたがそれを処理するためにしたくない場合は、単にイベントを殺すことができる:あなたの入力のための

@Override 
onChange(ChangeEvent event) { 
    // ask user if he wants to continue 
    // if yes 
     doSomething(); 
    // if no 
     event.kill(); 
} 
+0

イベントを終了すると、選択が元に戻りますか? –

+0

@AndreiVolgin元に戻す場合は、すべての変更時に選択値を保持する変数を追加します。続行しない場合は、イベントを強制終了し、変数の最後の値に選択をリセットします。 –

+0

@AdelBoutros私は、フォーカスイベントに値を格納し、変更イベントに戻してしまいました。私はイベントの殺害を使用して終了していない、私はそれを見て、提案のおかげで! –

関連する問題