5

私は、ユーザーがリストボックスで選択したときにユーザーに警告できるようにしたいリストボックスの実装に取り​​組んでいます。ユーザーがリストボックス内の項目をクリックしたことに応答し、「changeEvent」が発生する前に選択に応答して、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();
      }
   }
});

どんな提案でも大歓迎です、ありがとう!

4

3 に答える 3

3

イベントを処理したくない場合は、単にイベントを強制終了できます。

@Override
onChange(ChangeEvent event) {
    // ask user if he wants to continue
    // if yes
       doSomething();
    // if no
       event.kill();
}
于 2012-09-25T21:23:27.467 に答える
3

ご意見ありがとうございます。私がやったことは、リストボックスがフォーカスされたときに選択の状態を保存することでした。そして、このインデックスを保存し、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に直接追加することによっても実行できます。コメントありがとうございます!

于 2012-09-26T20:03:10.910 に答える
1

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

@Override
onChange(ChangeEvent event) {
    // ask user if he wants to continue
    // if yes
       doSomething();
    // if no
       myList.setSelectedIndex(-1);
} 
于 2012-09-25T21:20:25.470 に答える