通常需要根据另一个GUI对象的状态更改其他GUI对象的行为.例如,当按下按钮时,标签应更改其名称.但是,当我使用AbstractAction对象时,JButton myButton = new JButton(myButtonAction);我需要引用继承自AbstractAction的对象中的GUI对象.我应该只是在GUI中创建AbstractAction对象,然后将所有必要的GUI引用传递给AbstractAction对象,还是可以认为是坏样式?
为了使它更具体:
// AbstractAction
public class MyAction extends AbstractAction {
public MyAction(String name,
String description, Integer mnemonic, JLabel) {
super(name);
putValue(SHORT_DESCRIPTION, description);
putValue(MNEMONIC_KEY, mnemonic);
}
public void actionPerformed(ActionEvent e) {
// do something
}
}
}
public class GUI{
public Action myAction = null;
public GUI(){
JLabel label = new JLabel("text");
//This is not a good idea:
myAction = new MyAction("some text" , desc, new Integer(KeyEvent.VK_Q), label);
JButton myButton = new JButton(myAction);
}
}
Run Code Online (Sandbox Code Playgroud) 我目前正在替换我的匿名ActionListeners
new ActionListener() {
@Override
public void actionPerformed(final ActionEvent event) {
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
使用表示操作的类文件:
public class xxxxxxxAction extends AbstractAction {
}
Run Code Online (Sandbox Code Playgroud)
但是,我的GUI能够执行很多操作(例如CreatePersonAction,RenamePersonAction,DeletePersonAction,SwapPeopleAction等).
有没有一种很好的方法将这些类组织成一个连贯的结构?
我有一个JMenuItem限制为一个我可以使用的Action item.getAction().在构造Action时设置动作名称,例如使用匿名new AbstractAction(String text, ...).根据ResourceBundle和本地化信息设置文本字段.现在,如果我想更改本地化,我想更改Action.NAME字段,以便显示正确的本地化名称.我只能获得名称,例如使用item.getAction().NAME但不能更改字段,因为它是最终的.
我怎么能改变它的名字?
类AbstractAction实现接口Action,但是Action,有一个actionPerformed(ActionEvent e)继承自接口的方法 ActionListener
我知道类实现接口必须提供该接口中方法的所有实现
但是我发现没有实现actionPerformed(ActionEvent e)in AbstractAction,为什么?