2013-05-19 55 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

一個標準的做法是讓你的主類,或者一些類非常「接近」主,處理行爲的全部或大部分。通常會有一個基於action.getActionCommand()的巨大開關語句,它將控制傳遞給相應的函數。對於我來說,我不喜歡這種方法,但它的優勢在於它很簡單。

國際海事組織遠遠優越的辦法是創建AbstractActions並與他們聯繫起來。他們可以以任何適合您應用程序的方式進行組織。好的是它們很好地封裝,感覺更像「OO-like」等等。另外,多個GUI元素可以共享一個動作。例如按鈕和菜單都可以調用「SaveFileAction」動作。並且可以集中啓用和禁用操作。如果沒有要保存的文件,則可以相當容易地禁用「SaveFileAction」。

+0

但是有沒有機會做我以前做的事情?因爲我真的需要......現在唯一的問題是,actionListener不起作用... –