Swing でアクションを実装する方法についての専門家がいます。
私の考えは、AbstractAction を拡張するアプリケーションのアクションごとにクラスを作成して、同じ動作をする必要がある多くのコンポーネントで使用できるようにすることです。だから私は最終的に次のようなものを持っています:
public class ActionExample extends AbstractAction {
@Override
public void actionPerformed(ActionEvent arg0) {
System.out.println("Do something");
}
}
さて、私がそれを使いたいとき、私は3つの選択肢を考えています:
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 チュートリアルでは、コンポーネントに設定する前に新しいインスタンスを作成することがわかりました。また、多くのコードがコンポーネントごとに新しいインスタンスを作成することもわかりました。そのため、何が良いのかわかりません。なぜ。
他の方法よりも優先される方法はありますか?