0

这种 hack 的缺点是什么,除了无法用一个听众听很多按钮:

   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 回答