「Exit」内にテキストが含まれるJMenuItemと、「Exit」というテキストが含まれるJButtonがあるとします。JButtonが使用するコマンドはSystem.exit(0)です。もちろん、アクションリスナーを使用します。 JMenuItemをクリックするときに同じコードを入力しますが、JMenuItemをクリックするとJButtonがクリックされるため、次のコマンドが実行される方法はありません(JButtonコマンド)。
4 に答える
あなたができることは、Action
オブジェクトを作成し、それをあなたJButton
とあなたの両方に使用することですJMenuItem
。
Action exit = new AbstractAction() {
private static final long serialVersionUID = -2581717261367873054L;
@Override
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
};
exit.putValue(Action.NAME, "Exit");
exit.putValue(Action.MNEMONIC_KEY, KeyEvent.VK_X);
JButton exitButton = new JButton(exit);
JMenuItem exitItem = new JMenuItem(exit);
これを行う良い方法は、ActionListener
両方のコンポーネントに同じものを設定することです。このような:
JButton button = new JButton ("Exit");
JMenuItem item = new JMenuItem ("Exit");
ActionListener exitaction = new ActionListener ()
{
public void actionPerformed (ActionEvent e)
{
System.exit (0);
}
};
button.addActionListener (exitaction);
item.addActionListener (exitaction);
ただし、を使用しないことをお勧めしSystem.exit (0)
ます。プログラムを閉じるためのより良い方法(私は基本的にはJFrame
)を設定することです
frame.setDefaultCloseOperation (JFrame.DISPOSE_ON_CLOSE)
(frame
プログラムのウィンドウはどこにありますか)
と呼び出しframe.dispose ()
ますActionListener
。
これを行う最良の方法は、JMenuItemとJButtonの両方のイベントリスナーに同じActionListenerインスタンスを登録することであると考えています。これは、古いコマンドデザインパターンを使用するのと似ています。
JMenuItemにJButtonの押下に関連するイベントを発生させるように、イベント「エンジン」をだまそうとすることはお勧めしません。これは、発生していることではありませんが、両方のアクションを2つの異なるイベントに再利用することです。
ボタンをクラスフィールドとして保存してみることができます
private JButton button;
メニュー項目のクリックイベントハンドラーにコードを挿入します
button.doClick();
しかし、SoboLANのソリューションはよりエレガントです。