Java.use(better);
□ 異種のコンポーネントに対して同一のメソッドを利用する
異種のコンポーネントに対して同一のメソッドを利用したいことがあります。たとえば、
abstract class ValueChanged
implements Reactor, ListSelectionListener, TreeSelectionListener {
public void valueChanged(ListSelectionEvent e) {
execute();
}
public void valueChanged(TreeSelectionEvent e) {
execute();
}
}
リスナー ListSelectionListener/TreeSelectionListener は、リスト項目/ツリー項目を選択したときに発生するイベント ListSelectionEvent/TreeSelectionEvent に呼応して、同じメソッド valueChanged を呼び出すので、必要な処理を実行 execute するように依頼します。そのためには事前に、
abstract class ListSelectionChanged extends ValueChanged { protected JList source; public void listenTo(JList comp) { comp.addListSelectionListener(this); source = comp; } } abstract class TreeSelectionChanged extends ValueChanged { protected JTree source; public void listenTo(JTree comp) { comp.addTreeSelectionListener(this); source = comp; } }
異なるコンポーネント JList/JTree ごとに、対応するメソッド addListSelectionListener/addTreeSelectionListener を利用して、リスナーを登録しておく必要があります。このとき、フィールド source を介して、抽象クラスごとに固有のコンポーネントにアクセスできます。
次の事例では、リスト項目を選択すると、ウインドーのタイトルが変化します。
JList comp = new JList("red,green,blue".split(",")); new ListSelectionChanged() { public void execute() { frame.setTitle(source.getSelectedValue()+""); } }.listenTo(comp);
 ̄抽象クラス ListSelectionChanged を具象化したインスタンスは、リスト項目を選択したときのイベントに呼応 listenTo して、メソッド execute を呼び出します。すると、選択したリスト項目の情報 getSelectedValue をもとに、ウインドーのタイトルを変更します。
次の事例では、ツリー項目を選択すると、ウインドーのタイトルが変化します。
new TreeSelectionChanged() { public void execute() { frame.setTitle(source.getLastSelectedPathComponent()+""); } }.listenTo(comp);
抽象クラス TreeSelectionChanged を具象化したインスタンスは、ツリー項目を選択したときのイベントに呼応 listenTo して、メソッド execute を呼び出します。すると、選択したツリー項目の情報 getLastSelectedPathComponent をもとに、ウインドーのタイトルを変更します。
↑ TOP
》作業中です《