Java-программа с графическим интерфейсом, требующая кнопки события действия

Я делаю простую java-программу, представляющую строку меню Microsoft Word, и в меню файла я добавляю кнопку выхода... она ничего не делает.

Мне нужна ваша помощь, чтобы сказать мне, что сделать, чтобы кнопка выхода действительно вышла и закрыла программу.

Вот мой код:

public class MicrosoftWordMenu {
        public static void main(String [] args)
        {
        JPanel panel = new JPanel();
        JFrame frame = new JFrame("Microsoft Word");
        JMenuBar bar = new JMenuBar();
        JMenu menu = new JMenu("File");
        JMenu menu1 = new JMenu("Edit");
        JMenu menu2 = new JMenu("View");
        JMenu menu3 = new JMenu("Insert");
        JMenu menu4 = new JMenu("Format");
        JMenu menu5 = new JMenu("Tools");
        JMenu menu6 = new JMenu("Table");
        JMenu menu7 = new JMenu("Window");
        JMenu menu8 = new JMenu("Help");

        frame.add(bar, BorderLayout.NORTH);
        frame.add(panel);

        bar.add(menu);
        bar.add(menu1);
        bar.add(menu2);
        bar.add(menu3);
        bar.add(menu4);
        bar.add(menu5);
        bar.add(menu6);
        bar.add(menu7);
        bar.add(menu8);

        JMenuItem menuitem = new JMenuItem("New...");
        JMenuItem menuitem1 = new JMenuItem("Open...");
        JMenuItem menuitem2 = new JMenuItem("Close");
        JMenuItem menuitem3 = new JMenuItem("Save");
        JMenuItem menuitem4 = new JMenuItem("Save as...");
        JMenuItem menuitem5 = new JMenuItem("Save as web page...");
        JMenuItem menuitem6 = new JMenuItem("Web page preview ");
        JMenuItem menuitem7 = new JMenuItem("Print ");
        JMenuItem menuitem8 = new JMenuItem("Exit");

        menu.add(menuitem);
        menu.add(menuitem1);
        menu.add(menuitem2);
        menu.add(menuitem3);
        menu.add(menuitem4);
        menu.add(menuitem5);
        menu.add(menuitem6);
        menu.add(menuitem7);
        menu.add(menuitem8);

        frame.setSize(600,100);
        frame.setVisible(true);
        }

}

person user898342    schedule 17.08.2011    source источник
comment
Всем привет. Добавьте ActionListener в пункт меню и вызовите там System.exit(0);.   -  person ZeissS    schedule 17.08.2011
comment
@ZeissS - не используйте ActionListener, вместо этого используйте действие   -  person kleopatra    schedule 17.08.2011


Ответы (5)


Также рассмотрите возможность использования Action, чтобы позволить компонентам совместно использовать функциональность, как показано здесь.

person trashgod    schedule 17.08.2011

Вызов System.exit(0) для выбора меню вполне подойдет.

person Vlad    schedule 17.08.2011

На данный момент вы просто создаете элемент GUI, но в основном это пустые оболочки. В частности, вы создали элементы, которые отображаются в меню, но не добавили к этим элементам никакого поведения. (Поскольку вы нигде не указали своей программе, что делать при нажатии на элемент, что, по вашему мнению, произойдет)?

Чтобы обеспечить такое поведение, вам необходимо зарегистрировать ActionListener, который будет вызываться, когда что-то происходит с элементом, и позволит вам выполнить соответствующее действие в этот момент (например, вызов System.exit(0) . Подробнее см. в руководстве по Создание прослушивателей событий [Swing]. .

person Andrzej Doyle    schedule 17.08.2011
comment
Я знаю, что сделал их пустыми на данный момент, я добавлю несколько последних, спасибо за прослушивание действий, я не знаю, как я забыл об этом ..... все еще можете ли вы показать мне, где это разместить? (Я имею в виду System.exit(0)) и как мне сделать так, чтобы он работал с кнопкой выхода - person user898342; 17.08.2011
comment
@kleopatra - +1 при условии, что ActionListener - не лучший способ добиться этого. Я предлагаю вам написать альтернативный ответ, используя Action, поскольку я когда-либо работал только со слушателями, и более полное объяснение/иллюстрация было бы гораздо полезнее для меня и других. - person Andrzej Doyle; 17.08.2011

Я всегда расширяю класс AbstractAction (который реализует интерфейс ActionListener), который позволяет вам повторно использовать ваши действия. Расширяя AbstractAction, метод actionPerformed(ActionEvent e) будет вызываться каждый раз, когда вы нажимаете кнопку.

public class CloseAction extends AbstractAction {

  public CloseAction() {
    super("Close");
  }

  public actionPerformed(ActionEvent e) {
    System.exit(1);  
  }

}

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

CloseButton.setAction(новый CloseAction());

Кнопка закрытия теперь будет закрывать ваше приложение при каждом нажатии.

person sbrattla    schedule 17.08.2011

Используйте ExitAction, определенный в разделе Закрытие приложения. Тогда щелчок по пункту меню Exit будет таким же, как щелчок по значку «Закрыть» в правом верхнем углу окна. Это обеспечивает согласованность при закрытии приложения на случай, если вам когда-нибудь понадобится выполнить закрытие обработки.

Редактировать:

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
...
// JMenuItem menuitem8 = new JMenuItem("Exit");
JMenuItem menuitem8 = new JMenuItem( new ExitAction() );
person camickr    schedule 17.08.2011
comment
Спасибо, человек, который помог мне, и я узнал много нового, но я все еще не мог сделать это со своей программой !!!! почему так тяжело? это выглядит просто, но я не могу понять это... может ли кто-нибудь сделать это с моей программой? Я думаю, что пойму это больше, если увижу, как это делается - person user898342; 18.08.2011