Java.use(better);
□ 同種のリスナーに対して異種のコンポーネントを扱う
同種のリスナーを異種のコンポーネントと関係付けたいことがあります。たとえば、
abstract class ActionPerformed
implements Reactor, ActionListener {
public void actionPerformed(ActionEvent e) {
execute();
}
}
リスナー ActionListener は、ボタンやメニュー項目を選択したり、フィールドに入力したときに発生するイベント ActionEvent に呼応して、メソッド actionPerformed を呼び出すので、必要な処理を実行 execute するように依頼します。そのためには事前に、
abstract class ButtonClicked extends ActionPerformed { protected AbstractButton source; public void listenTo(AbstractButton comp) { comp.addActionListener(this); source = comp; } } abstract class EditDone extends ActionPerformed { protected JTextField source; public void listenTo(JTextField comp) { comp.addActionListener(this); source = comp; } }
異なるコンポーネント AbstractButton/JTextField に、同じメソッド addActionListener を利用して、リスナーを登録しておく必要があります。このとき、フィールド source を介して、抽象クラスごとに固有のコンポーネントにアクセスできます。
次の事例では、ボタンを選択すると、ウインドーのタイトルが変化します。
JRadioButton comp = new JRadioButton(item);
new ButtonClicked() {
public void execute() {
frame.setTitle(source.getText());
}
}.listenTo(comp);
抽象クラス ButtonClicked を具象化したインスタンスは、ボタンを選択したときのイベントに呼応 listenTo して、メソッド execute を呼び出します。すると、選択したボタンのテキスト getText をもとに、ウインドーのタイトルを変更します。
次の事例では、テキストフィールドに入力すると、ウインドーのタイトルが変化します。
JTextField comp = new JTextField();
new EditDone() {
public void execute() {
frame.setTitle(source.getText());
}
}.listenTo(comp);
抽象クラス EditDone を具象化したインスタンスは、テキストフィールドに入力したときのイベントに呼応 listenTo して、メソッド execute を呼び出します。すると、入力したフィールドのテキスト getText をもとに、ウインドーのタイトルを変更します。
↑ TOP
》作業中です《update*13/01/29 20:07:16