OK、私はGUI要素にActionListener
を追加し、それは私が持つActionListener
ことを使うのみ要素ですので、もし、それは私が次の行のどの(a、b)は重要ではありませんチェックボックスを選択状態にするために使用しますか?アクションリスナーとイベントソース
final JCheckBox checkbox = (JCheckBox)this.buildResult.get("cbDebugTick");
checkbox.addActionListener(new ActionListener() {
@Override public void actionPerformed(ActionEvent event){
boolean bChecked =
// (a) checkbox.isSelected();
// (b) ((JCheckBox)event.getSource()).isSelected();
model.setPrintDebugOn(bChecked);
}
});
それは私が複数のGUI要素にActionListener
オブジェクトを追加した場合、その後、私は(B)を使用するべきであると私には理にかなっています。
と(B)で、それは私がアクションリスナーを追加した一人、または私は守備のプログラミングとinstanceof
チェックを行う必要があるため、盲目的に、JCheckBox
にevent.getSource()
をキャストするOKでしょうか?
注:この質問は、一般的なイベントリスナーのコンテキストにあります。 kdgregoryには、特に私が考慮しなかったチェックボックスがあります。
詳細を教えてください。匿名の内部クラスの同じメソッド/フィールドにアクセスできる場合、外部クラスへの転送はなぜですか? –
このようにして、同じアクションリスナーに異なるコンポーネントを簡単に追加して、異なるやり方で多態性を扱うことができ、コードが「良くなる」 –
私はdavidのアサーションに同意しません。このようにコールを転送すると、デカップリングが発生します(これが、最初はSwingのイベント通知にリスナーのアプローチが採用された理由です)。理想的なケースは、アクションビヘイビアを完全に取り除き、コントロールを含むビューの外部のアクションリスナーを使用することです。この場合、オプション(b)が優先されます。つまり、あなたが本当にやるべきことは、アクションを作成してそれにコントロールを付けることです。 –