Меню в Java Swing ?!

Рейтинг: 2Ответов: 3Опубликовано: 07.07.2011

Пишу простое приложение на java. При создании меню возник вопрос :

Для каждого пункта меню необходимо создать обработчик действия. Почитал пример из Хорстманна. И возник вопрос - для каждого действия писать отдельный класс-наследник от AbstractAction или можно поступать например так :

fileMenu.add(new AbstractAction("Exit") 
{ 
  public void actionPerformed(ActionEvent event)
  {
    System.exit(0);
  }
});

Как правильно ?

Ответы

▲ 2Принят

если у вас обработка кода сводится до нескольких строк то создавать отдельный класс совсем не обязательно анонимные подойдут. если вам такой вариант не нравится (или не подходит) используйте листенеры:

class AbcFrame extends JFrame implements ActionListener
{
    public AbcFrame()
    {
        new JMenuItem("Help").addActionListener ( this );
        new JMenuItem("About").addActionListener ( this );
    }    
    public void actionPerformed(ActionEvent event)
    {
        // по event.getSource() определяем кто сгенерировал ивент
        // и обрабатываем 
    }
}

п.с. имхо удобнее 1ый вариант т.к. обработка определенного действия у вас находится в отдельном методе и не мешает удобочитаемости кода

▲ 1

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

▲ 1

Не обязательно на каждое действие делать класс. Можно сделать так к примеру:

JMenuItem b=new JMenuItem(xx[0]);
b.setName(xx[1]);
b.addActionListener(this);
m.add(b);

и public void actionPerformed(ActionEvent ae) обрабатывать по имени