Should your class implement ActionListener or use an object of an anonymous ActionListener class

前端 未结 3 2012
庸人自扰
庸人自扰 2020-12-05 06:03

What\'s the best way for implementing the java.awt.event.ActionListener interface?

Have your class implement ActionListener and add this as an ActionLis

3条回答
  •  渐次进展
    2020-12-05 06:12

    Some (jeanette/kleopatra) say to almost never use ActionListener, and to instead use Actions such as an AbstractAction. It's almost always a bad ideal to have your GUI class implement your listeners though as this breaks the Single Responsibility Principle and makes your code more difficult to maintain and extend,and so I strongly urge you not to do that.

    So for example, an inner class for this:

    import java.awt.event.ActionEvent;
    import java.awt.event.KeyEvent;
    import javax.swing.AbstractAction;
    import javax.swing.JButton;
    
    class Foo {
    
       public Foo() {
           JButton button = new JButton(new ButtonAction("Action", KeyEvent.VK_A));
       }
    
       private class ButtonAction extends AbstractAction {
          public ButtonAction(String name, Integer mnemonic) {
             super(name);
             putValue(MNEMONIC_KEY, mnemonic);
          }
    
          @Override
          public void actionPerformed(ActionEvent e) {
             System.out.println("button pressed");
          }
       }
    
    }
    

提交回复
热议问题