2

「Exit」内にテキストが含まれるJMenuItemと、「Exit」というテキストが含まれるJButtonがあるとします。JButtonが使用するコマンドはSystem.exit(0)です。もちろん、アクションリスナーを使用します。 JMenuItemをクリックするときに同じコードを入力しますが、JMenuItemをクリックするとJButtonがクリックされるため、次のコマンドが実行される方法はありません(JButtonコマンド)。

4

4 に答える 4

8

あなたができることは、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);
于 2012-05-24T14:53:41.797 に答える
4

これを行う良い方法は、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

于 2012-05-24T14:53:30.763 に答える
0

これを行う最良の方法は、JMenuItemとJButtonの両方のイベントリスナーに同じActionListenerインスタンスを登録することであると考えています。これは、古いコマンドデザインパターンを使用するのと似ています。

JMenuItemにJButtonの押下に関連するイベントを発生させるように、イベント「エンジン」をだまそうとすることはお勧めしません。これは、発生していることではありませんが、両方のアクションを2つの異なるイベントに再利用することです。

于 2012-05-24T14:54:20.820 に答える
0

ボタンをクラスフィールドとして保存してみることができます

private JButton button;

メニュー項目のクリックイベントハンドラーにコードを挿入します

button.doClick();

しかし、SoboLANのソリューションはよりエレガントです。

于 2012-05-24T14:56:06.783 に答える