Выполнение действия при нажатии JMenuItem? - PullRequest
2 голосов
/ 13 ноября 2009

Итак, я сделал простую программу с базовым меню в верхней части фрейма. Теперь мне просто нужно поместить действия за каждым JMenuItem. Я изо всех сил пытаюсь разработать код, хотя, вот то, что я думал, будет работать:

JMenu file_Menu = new JMenu("File");
JMenuItem fileExit = new JMenuItem("Exit Program"); 
file_Menu.add(fileExit);
fileExit.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent ae) {
        JFrame hello = new JFrame("POPUP");
        hello.setSize(100,75);
        hello.setDefaultCloseOperation(hello.EXIT_ON_CLOSE);
        hello.setVisible(true);
    }
});
main_Menu.add(file_Menu);

Это, похоже, не работает, я думал, что этот код создаст небольшое всплывающее окно при нажатии на пункт меню.

Может ли кто-нибудь заметить ошибку, потому что я не могу.

Ответы [ 5 ]

5 голосов
/ 17 ноября 2009

Предложение: вместо добавления отдельного ActionListener просто используйте AbstractAction:

JMenuItem fileExit = new JMenuItem(new AbstractAction("Exit Program") {
    public void actionPerformed(ActionEvent ae) {
        JFrame hello = new JFrame("POPUP");
        hello.setSize(100,75);
        hello.setDefaultCloseOperation(hello.EXIT_ON_CLOSE);
        hello.setVisible(true);
    }
});

Я бы также предложил вместо установки EXIT_ON_CLOSE во всплывающем меню установить его в главном фрейме приложения, а действие просто вызвать theMainFrame.dispose().

2 голосов
/ 13 ноября 2009

У вас это работает, но у вас есть другая проблема.

Не делай этого:

hello.setDefaultCloseOperation(hello.EXIT_ON_CLOSE);

Когда вы закрываете всплывающее окно, вся JVM завершается. Обратитесь к JFrame.setDefaultCloseOperation javadocs для более подходящего значения.

0 голосов
/ 13 ноября 2009

Судя по опубликованному вами коду, похоже, что он должен работать, но мы не можем увидеть весь контекст использования этого пункта меню.

Вы отлаживали свой код (с помощью System.out.println), чтобы увидеть, вызывается ли ActionListener?

Если вам нужна дополнительная помощь, опубликуйте SSCCE , который демонстрирует проблему.

0 голосов
/ 13 ноября 2009

Исправлено.

Забыл добавить метод actionPerformed.

0 голосов
/ 13 ноября 2009

Дайте экземпляр Action (расширение от AbstractAction) для JMenuItem

...