首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >具有相同java的多个按钮的Action与ActionListener

具有相同java的多个按钮的Action与ActionListener
EN

Stack Overflow用户
提问于 2012-11-07 05:17:55
回答 2查看 1.6K关注 0票数 3

我想澄清一下我对使用Action而不是ActionListener的理解。

如果我有多个JButtons,它们都需要相同的功能才能被点击(例如,按钮将被禁用),使用操作是否更适合这种情况?

如果是这样,是否因为您可以通过将Action的状态设置为disabled来更改按钮的状态(例如,将其设置为禁用)?

这对于actionListener来说是不可能的吗?

下面是演示上述示例的一些代码:

代码语言:javascript
运行
复制
JButton[] button = new JButton[10];

for(int i = 0; i < 10; i++){
    button[i] = new JButton();
    Action buttonAction = new ButtonAction();
    button[i].setAction(buttonAction);  
}

class ButtonAction extends AbstractAction{
    public void actionPerformed(ActionEvent e){
        setEnabled(false);
    }
}

如果我弄错了,真抱歉!

谢谢!

EN

回答 2

Stack Overflow用户

发布于 2012-11-07 05:20:45

根据Javadoc的说法

在相同的功能可能被多个控件访问的情况下,

接口为ActionListener接口提供了一个有用的扩展。

所以我同意你的断言,情况就是这样。

票数 5
EN

Stack Overflow用户

发布于 2012-11-07 05:46:30

扩展AbstractAction使您能够以相同的方式在代码中的某一点添加其他信息:

代码语言:javascript
运行
复制
public class NewFileAction extends AbstractAction
{
 /**
   * 
   */
protected NewFileAction()
{
  super("NewFile");
  this.putValue(NAME, "New File");
  this.putValue(SHORT_DESCRIPTION, "New file");
  this.putValue(LONG_DESCRIPTION, "New file");
  this.putValue(SMALL_ICON,ImageIconFactory.getSmallImageIcon(ImageIconFactory.Option.SUN_New24));
}

相同的信息将自动出现在任何按钮、MenuItem等上。

关于您的示例的一点备注:通常您不希望创建许多动作,例如

代码语言:javascript
运行
复制
Action buttonAction = new ButtonAction();

在你的循环中。你通常会有一个动作对象,并在所有的MenuItems、按钮等中重用它。一个典型的例外情况是,如果你的动作的行为改变了传递给构造函数的参数。

代码语言:javascript
运行
复制
Action buttonAction = new ButtonAction(loopCounter);

在这种情况下,许多动作对象可能是有用的-而且loopCounter可能会转到标签,等等。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13259562

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档