2012-03-28 8 views
2

これは、MessageBox /ダイアログでどのボタンがクリックされたかを検出する方法に関する質問です。 GXT 2.1または2.2のみ。 GXT 3を使用して回答しないでください。GXT 2.2 - MessageBoxボタンの定数

理想的には、これは確認ダイアログを表示する方法です。しかし

final MessageBox box = MessageBox.confirm(
    "Confirm kill avatar", 
    "Please remove " + getAvatar().getName(), 
    new Listener<MessageBoxEvent>() 
    { 
    @Override 
    public void handleEvent(MessageBoxEvent be) 
    { 
     Button clicked = be.getButtonClicked(); 
     if (clicked == box.getDialog().getButtonById("yes")) 
     deleteAvatar(); 
     else 
     Info.display("Action cancelled"); 
    } 
    }); 
  • 。ボックスが定義されていないため、
  • ボックスにあり、box.getDialogは()、
  • NPEだろうと、コンパイラは、ハスキーで「ボックス初期化されていません」という先取りし、
  • とボックスが最終であることを持っているため初期化できませんそれはanon Listenerクラスで使用されているため最終的なものになります。

代わりに、ボタンのテキストを使用してボタンを比較する必要があります。これはi18nに優しいものではありません。非常に悪い習慣。

@Override 
    public void handleEvent(MessageBoxEvent be) 
    { 
     Button clicked = be.getButtonClicked(); 
     if (clicked.getText().equals("Yes"))) 
     deleteAvatar(); 
     else 
     Info.display("Action cancelled"); 
    } 

GXT 2.2ではこれが推奨されますか?または、ボタンが押されていること、i18nに優しいことを検出する良い方法はありますか?

私は、ボタンのテキストではなく、ボタンを比較すべきです。

答えて

4

あなたは使用することができます。

if (Dialog.CANCEL.equals(be.getButtonClicked().getItemId())) { 

    //do action 

} 
0

気にしないでください。

私はDialogから自分の確認/警告/ etcを構築し、適切なリスナーに自分のサブミット/キャンセルボタンを提供する必要があります。

Messageboxは単純なgxtダイアログを行う方法のサンドボックス/例です。