我想澄清一下我对使用Action而不是ActionListener的理解。
如果我有多个JButton,如果点击它们都需要相同的功能(例如按钮将被禁用),那么使用Action会更合适吗?
如果是这样,是不是因为您可以通过将Action的状态设置为disabled来更改按钮的状态(例如禁用它)?
使用actionListener是不可能的?
下面是一些代码,展示了上面给出的例子:
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);
}
}
很抱歉,如果我的错误结束了!
谢谢!
答案 0 :(得分:5)
答案 1 :(得分:3)
扩展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));
}
然后,相同的信息将自动出现在任何按钮,MenuItem等
上关于你的例子的评论: 通常您不想创建许多操作,如
Action buttonAction = new ButtonAction();
你的循环中的。您通常会有一个Action对象,并在所有MenuItems,Buttons等中重用它。 一个典型的例外是,如果您的操作的行为更改了在构造函数中传递的参数。
Action buttonAction = new ButtonAction(loopCounter);
在这种情况下,许多操作对象可能很有用 - loopCounter也可能会转到标签等。