2013-05-19 4 views
0

Я создаю приложение «GUI», чтобы сделать код понятным и разделяя эти компоненты «GUI» на классы (вы увидите ниже, что я имею в виду), который сейчас хорошо с панелью меню, но теперь мне интересно, так как я хочу реализовать ActionListener для них, где лучше всего сделать это, в каком классе, например в этом случае класса меню, в своем классе или реализовать исполнитель действий в Основной и чем реализовать абстрактный метод, который будет использовать методы, которые мы хотим выполнить?Разделение компонентов на классы

import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.JFrame; 

public final class Main extends JFrame { 

    private MenuBar menuBar; 

    public Main() { 
     setTitle("GUI"); 
     setSize(300, 200); 
     setLocationRelativeTo(null); 
     setVisible(true); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 

     initGUI(); 
    } 

    public void initGUI() { 
     menuBar = new MenuBar(this); 
     // this is last update before I started posting this, I decided to 
     // access exitMenu variable and than to addActionListener to it from a here, which is currently not working 
     menuBar.exitMenu.addActionListener(new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       System.exit(0); 
      } 
     }); 
    } 

    public static void main(String[] args) { 
     new Main(); 
    } 

} 

Строка меню Класс:

import javax.swing.JFrame; 
import javax.swing.JMenu; 
import javax.swing.JMenuBar; 

public final class MenuBar { 

    public JMenu newMenu; 
    public JMenu aboutMeMenu; 
    public JMenu exitMenu; 

    public MenuBar(JFrame jFrame) { 
     JMenuBar menubar = new JMenuBar(); 

     initNew(menubar); 
     initAboutMe(menubar); 
     initExit(menubar); 

     jFrame.setJMenuBar(menubar); 
    } 

    public void initNew(JMenuBar menubar) { 
     newMenu = new JMenu("New"); 
     menubar.add(newMenu); 
    } 

    public void initAboutMe(JMenuBar menubar) { 
     aboutMeMenu = new JMenu("About Me"); 
     menubar.add(aboutMeMenu); 
    } 

    public void initExit(JMenuBar menubar) { 
     exitMenu = new JMenu("Exit"); 
     menubar.add(exitMenu); 
    } 


} 

ответ

3

Один стандартный подход к вашему основному классу, или некоторый класс достаточно «близко» к основному, обрабатывать все или большинство действий. Обычно будет гигантский оператор switch, основанный на action.getActionCommand(), который передает управление соответствующей функции. Мне для этого не нравится этот подход, но он имеет то преимущество, что его довольно просто следовать.

ИМО - далеко не лучший способ создать AbstractActions и подключить к ним. Они могут быть организованы любым способом, который имеет смысл для вашего приложения. Приятно, что они красиво инкапсулированы, чувствуют себя намного более «OO-like» и т. Д. Кроме того, несколько элементов GUI могут совместно использовать действие. например как кнопка, так и меню могут вызвать действие «SaveFileAction». И действия могут быть централизованно включены и отключены. Если нет файла для сохранения, то «SaveFileAction» можно довольно легко отключить.

+0

Но есть ли шанс сделать то, что я делаю? Потому что мне действительно нужно ... единственная проблема в том, что actionListener не работает ... –

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