使用同一java的多个按钮的Action vs ActionListener
我想澄清我对使用Action而不是ActionListener的理解 如果我有多个jbutton,如果单击它们,它们都需要相同的功能(例如,按钮将被禁用),那么使用Action是否更合适 如果是这样,是否因为您可以通过将操作状态设置为disabled来更改按钮的状态(例如使其处于禁用状态) 对于actionListener,这是不可能的吗 下面是演示上述示例的一些代码:使用同一java的多个按钮的Action vs ActionListener,java,action,actionlistener,Java,Action,Actionlistener,我想澄清我对使用Action而不是ActionListener的理解 如果我有多个jbutton,如果单击它们,它们都需要相同的功能(例如,按钮将被禁用),那么使用Action是否更合适 如果是这样,是否因为您可以通过将操作状态设置为disabled来更改按钮的状态(例如使其处于禁用状态) 对于actionListener,这是不可能的吗 下面是演示上述示例的一些代码: JButton[] button = new JButton[10]; for(int i = 0; i < 10;
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);
}
}
JButton[]按钮=新的JButton[10];
对于(int i=0;i<10;i++){
按钮[i]=新的JButton();
动作按钮动作=新按钮动作();
按钮[i]。设置动作(按钮动作);
}
类按钮操作扩展了抽象操作{
已执行的公共无效操作(操作事件e){
setEnabled(假);
}
}
对不起,如果我把棍子的一端弄错了
谢谢大家! 根据:
在多个控件可以访问相同功能的情况下,Action接口为ActionListener接口提供了一个有用的扩展
因此,我同意您的说法,即情况就是这样。扩展AbstractAction使您能够在代码中的某一点以相同的方式添加其他信息:
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));
}
同样的信息将自动出现在任何按钮、菜单项等上
关于你的例子的评论:
通常情况下,您不希望创建许多操作,如
Action buttonAction = new ButtonAction();
在你的循环中。您通常会有一个动作对象,并在所有菜单项、按钮等中重用它。
一个典型的例外是,如果您的操作的行为在构造函数中传递的参数上发生了变化
Action buttonAction = new ButtonAction(loopCounter);
在这种情况下,许多操作对象可能会很有用,而且loopCounter可能会指向标签等。根据我的经验,更常见的情况是,您希望可以从多种类型的控件访问操作。例如,我可能有一个菜单项、一个工具栏按钮和一个右键单击上下文菜单项,它们都绑定到同一个
操作
。一个和另一个都是事件处理程序。