简体   繁体   中英

One ActionListener for many JButtons

I would like to add an ActionListener to a group of buttons. Is there any class that wrap the buttons? Something like GroupJButtons or something more generally group of objects? so I can set an ActionListener to all of them. After all I don't really care which buttons is pressed I just want to change his text so all I need to do is casting it to a JButton and changing the text.

The whole process would reduce the code lines in 1 or 2 (in case you use a loop) but I want to do that since it sounds logically better.

In this case you can extend the AbstractAction class and simply apply the same action to many buttons.

  class MyAction extends AbstractAction {
       public MyAction(String text, ImageIcon icon,
                  String desc, Integer mnemonic) {
       super(text, icon);
       putValue(SHORT_DESCRIPTION, desc);
        putValue(MNEMONIC_KEY, mnemonic);
   }
   public void actionPerformed(ActionEvent e) {
        //do the action of the button here
    }
  }

Then for each button that you want the same thing to happen you can:

 Action myAction = new MyAction("button Text", anImage, "Tooltip Text", KeyEvent.VK_A);
 button = new JButton(myAction);

You can use this to create each button

private JButton createButton(String title, ActionListener al) {
    JButton button = new JButton(title);
    button.addActionListener(al);
    return button;
}

And this to process the action

public void actionPerformed (ActionEvent ae) {
    JButton button = (JButton)ae.getSource();
    button.setText("Wherever you want");
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM