【问题标题】:One ActionListener for many JButtons多个 JButton 的一个 ActionListener
【发布时间】:2012-11-27 03:00:43
【问题描述】:

我想将ActionListener 添加到一组按钮中。 有没有包装按钮的类? GroupJButtons 之类的东西或更一般的对象组?所以我可以为所有这些设置一个ActionListener。 毕竟我并不关心按下了哪些按钮,我只想更改他的文本,所以我需要做的就是将其转换为 JButton 并更改文本。

整个过程将减少 1 或 2 中的代码行(以防您使用循环),但我想这样做,因为它在逻辑上听起来更好。

【问题讨论】:

  • 这是一个非常不寻常的 GUI,它有许多按钮完全相同做同样的事情。用例是什么?

标签: java swing jbutton actionlistener


【解决方案1】:

在这种情况下,您可以扩展 AbstractAction 类并将相同的操作应用于多个按钮。

  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
    }
  }

然后,对于您希望发生相同事情的每个按钮,您可以:

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

【讨论】:

  • 非常好的解决方案!但这似乎有点矫枉过正?只是为了一组按钮?
  • @Arno:对我来说这似乎并不过分。 1+的好答案。如果所有按钮都具有相同的文本和操作,您可以创建一个 MyAction 对象并使用它来创建许多按钮。现在,如果按钮有不同的标题,那么您可能需要创建一个 ActionListener,然后将其添加到多个按钮中。
  • @HovercraftFullOfEels,是的,我的解决方案演示了具有不同标题的按钮的方法
  • 在上面的示例中,如果您希望每个按钮有不同的文本和图像,那么您可以使用不同的参数创建不同的 MyAction 实例。您可以修改构造函数以适合自己。
【解决方案2】:

您可以使用它来创建每个按钮

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

这是处理动作

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-21
    • 2012-12-26
    • 2021-02-08
    • 2013-06-05
    • 2015-07-18
    • 2013-10-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多