0

1 つのリスナーで多くのボタンをリッスンできないことを除いて、この種のハックの欠点は何ですか。

   public class Activator<E> extends JButton implements ActionListener {

        protected E controller;

        public Activator( String label, E controller ) {
            super( label );
            this.addActionListener( this );
            this.controller = controller;
        }

        @Override
        public void actionPerformed( ActionEvent e ) {
            return;
        }

    }

ボタンは次によってインスタンス化されます。

    this.buttons = new LinkedHashMap<String, JButton>();

    this.buttons.put( "create",
        new Activator<MainMenu>( "Create new definition", this ) {
            @Override
            public void actionPerformed( ActionEvent e ) {
                this.controller.createDefinition();
            }
        }
    );
4

2 に答える 2

2

私が見る明らかな欠点は、ボタンを作成してリスナーを追加した場合よりも、余分なクラスとコードが必要になることです。を使用する場合、インライン リスナーの実装がまだありますが、Activator何か役に立つことはありますか (このパターンを使用する複数のボタンがあっても)? Activatorクラスはまったく必要ですか?

于 2012-04-19T05:53:27.523 に答える
2

簡単なメソッドで簡単に置き換えることができる、この余分なクラスの利点はわかりません。

this.buttons.put( "create", 
    createButton( "Create new definition", new ActionListener(){...} );

public JButton createButton( String label, ActionListener actionListener ){
  JButton button = new JButton( label );
  button.addActionListener ( actionListener );
  return button;
}

これには、コードと同じように匿名クラスも必要ですが、余分な (奇妙な) クラスを回避します (ボタンがアクションリスナーであり、他のものにアタッチされるべきではないという意味で奇妙です)。

于 2012-04-19T06:10:53.750 に答える