我想澄清一下我对使用Action而不是ActionListener的理解。
如果我有多个JButtons,它们都需要相同的功能才能被点击(例如,按钮将被禁用),使用操作是否更适合这种情况?
如果是这样,是否因为您可以通过将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);
}
}如果我弄错了,真抱歉!
谢谢!
发布于 2012-11-07 05:20:45
根据Javadoc的说法
在相同的功能可能被多个控件访问的情况下,
接口为ActionListener接口提供了一个有用的扩展。
所以我同意你的断言,情况就是这样。
发布于 2012-11-07 05:46:30
扩展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();在你的循环中。你通常会有一个动作对象,并在所有的MenuItems、按钮等中重用它。一个典型的例外情况是,如果你的动作的行为改变了传递给构造函数的参数。
Action buttonAction = new ButtonAction(loopCounter);在这种情况下,许多动作对象可能是有用的-而且loopCounter可能会转到标签,等等。
https://stackoverflow.com/questions/13259562
复制相似问题