2013-04-09 74 views
0

嘿家伙我试图从其他类的菜单栏到我的JFrame,但它siply否认工作! 我在一个死胡同......Java菜单栏不出现

我真的不知道是怎么回事错了,我尝试了一些其他的方式,但它没有工作......

The code is this : 

    public Engine(int width, int height) { 
    System.out.println("TEST ENGINE CLAASS"); 
    setTitle("Battleship Board - Place Your Ships"); 
    setSize(width, height); 
    setLocation(624, 373); 
    setDefaultCloseOperation(3); 
    setResizable(false); 
    setVisible(true); 
    setLayout(null); 

    System.out.println("TEST ENGINE clas2"); 
    Menu menu = new Menu(this); 
    super.setJMenuBar(menu.getMenuBar()); 




    setDefaultCloseOperation(3); 
} 

和Menu.class:

public class Menu implements ActionListener { 
    private Engine cc; 
    private JMenuBar menuBar; 
    private JMenu game; 
    private JMenu help; 
    private JMenuItem aboutItem; 
    private JMenuItem quitItem; 
    private JMenuItem newGameItem; 

    public Menu (Engine cc) { 
     System.out.println("testing menu class"); 
     this.cc = cc; 
     this.menuBar = new JMenuBar(); 
     this.game = new JMenu("Game"); 
     this.help = new JMenu("Help"); 

     makeGameMenu(); 
     makeAboutMenu(); 


    } 



    private void makeGameMenu() { 
     System.out.println("Making game menu"); 
     this.newGameItem = new JMenuItem("New Game"); 
     this.game.add(this.newGameItem); 
     this.newGameItem.addActionListener(this); 
     this.game.addSeparator(); 

     this.quitItem.addActionListener(this); 


     this.game.add(this.quitItem); 
     this.menuBar.add(this.game); 

    } 

    private void makeAboutMenu() { 
     this.aboutItem = new JMenuItem("About"); 
     this.help.add(aboutItem); 
     this.menuBar.add(this.help); 


    } 

    public void actionPerformed(ActionEvent event) { 
     JMenuItem source = (JMenuItem)event.getSource(); 

     //If user clicks new game then: 
     if (source == this.newGameItem) { 
      this.cc.newGame(); 
     } 
     //If user clicks Quit then: 
     else if (source == this.quitItem) { 
      System.exit(0); 
     } 
     //If user clicks Help - About then: 
     else if (source == this.aboutItem) { 
      JOptionPane.showMessageDialog(null, "This Battleship Game was created by Manos Kontakis for Object Oriented Programming Lab", "About", 1); 
     } 
    } 

    public JMenuBar getMenuBar() 
    { 
    return this.menuBar; 
    } 


} 

回答

2

JMenuItemquitItem尚未在任何地方初始化,因此前JMenuBar可以被添加到JFrame的,会引发异常:除了

quitItem = new JMenuItem("Quit Game"); 
quitItem.addActionListener(...); 

:避免使用绝对定位(null布局),始终使用布局管理器。

+0

真的解决了它,但问题是,它甚至没有去菜单类。问题在这里:super.setJMenuBar(menu.getMenuBar()); ....你知道那里有什么问题吗? – Manos 2013-04-09 18:16:42

+0

“GameEngine”类的签名是什么? – Reimeus 2013-04-09 18:21:28

+0

对不起,错误是引擎,在我的代码上这是正确的,这不是错误(从错误的包复制)。 – Manos 2013-04-09 18:25:11

0

我认为你必须从JMenuBar扩展并添加组件到“this”。

+0

尝试过,但没有运气 – Manos 2013-04-09 18:27:19