2009-11-12 2 views
2

Итак, я сделал простую программу с основным меню в верхней части кадра. Теперь мне просто нужно поместить действия за каждым JMenuItem. Im изо всех сил работать код, хотя, вот что я думал, что будет работать:Выполнение действия при нажатии 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); 

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

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

+1

Будет ли он печатать что угодно, если вы добавите System.out.println («привет!») В начало вашего метода actionPerformed()? – Dmitry

ответ

0

Приведите пример действий (простираться от AbstractAction) до JMenuItem

0

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

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

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

+0

Это, кажется, комментарий, а не ответ. –

0

Исправлено.

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

+0

Вы можете удостовериться, что функция переопределения 'superPortformed' суперкласса правильно указана, предшествуя ей' @ Override'. –

2

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

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

hello.setDefaultCloseOperation(hello.EXIT_ON_CLOSE); 

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

+0

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

5

Предложение: Вместо добавления отдельного 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().

Смежные вопросы