我有一个关于如何在 Swing 中实现动作的家伙。
我的想法是为扩展 AbstractAction 的应用程序的每个操作创建一个类,这样我就可以在许多必须具有相同行为的组件中使用。所以我终于有了一些东西:
public class ActionExample extends AbstractAction {
@Override
public void actionPerformed(ActionEvent arg0) {
System.out.println("Do something");
}
}
好吧,现在当我想使用它时,我想到了三个选项:
public void makeUI1() {
JButton btn = new JButton(new ActionExample("Do it"));
JMenuItem mi = new JMenuItem(new ActionExample("Do it"));
}
public void makeUI2() {
Action a = new ActionExample("Do it");
JButton btn = new JButton(a);
JMenuItem mi = new JMenuItem(a);
}
或者将其用作单例(也更改 ActionExample):
public void makeUI2() {
JButton btn = new JButton(ActionExample.getInstance());
JMenuItem mi = new JMenuItem(ActionExample.getInstance());
}
public class ActionExample extends AbstractAction {
private static final ActionExample INSTANCE = new ActionExample("Do it");
public static Action getInstance() {
return INSTANCE;
}
@Override
public void actionPerformed(ActionEvent arg0) {
System.out.println("Do something");
}
}
我的第一个意见是通过单例实例实现,但我在 oracle 教程中看到它在将其设置为组件之前创建了一个新实例,并且在我还看到许多代码为每个组件创建新实例,所以我不知道哪个更好以及为什么。
是否首选一种方法而不是另一种方法?