2013-07-20 14 views
0

我正在研究可以作爲JApplet運行並作爲應用程序使用的計算器。 當我將我的代碼作爲應用程序運行時,菜單欄顯示出來。但是當我將它作爲JApplet運行時,它不會。Java - JMenuBar沒有顯示在JApplet中,但它在作爲應用程序運行時確實運行

這是JApplet限制嗎?因爲當我把所有的代碼(新的JMenuBar,添加按鈕等)在計算器類它的作品。但使用我自己的靜態方法MenuBar.create(),它做同樣的事情並返回一個JMenuBar,它不起作用。

這裏的代碼,也許我忘了一些東西,使菜單欄不出現在小程序中?

計算器

private void BuildGui() { 
//MenuBar.create() returns an JMenuBar filled with menus/items. 
    menuBar = MenuBar.create(); 
    panel.add(new JButton("test")); 
} 

private void Go() { 
// NOTE: this.isApplet works, it's a boolean i set during init() or main() 
    if (this.isApplet == true) { 
     setJMenuBar(menuBar); 
     setSize(500,600); 
     add(panel); 
    } else { 
     JFrame frame = new JFrame(); 
     frame.setJMenuBar(menuBar); 
     frame.getContentPane().add(BorderLayout.CENTER, panel); 
     frame.setSize(500,600); 
     frame.setVisible(true); 
    } 
} 
+1

爲了更好地提供幫助,請發佈[SSCCE](http://sscce.org/)。 –

+0

我找到了解決我的問題的方法,我會盡我所能發佈答案。 (作爲新用戶,我必須等待8個小時)。 –

回答

0

我經歷過了小時後想通了這個問題。

看來,在一個類中聲明的靜態JMenu的/ JMenuItem的像

public class MenuBar { 
private static JMenu[] menu = {new JMenu("Edit"), new JMenu("View") }; 

public static JMenuBar create() { 
    JMenuBar menuBar = new JMenuBar(); 
    for (JMenu m : menu) { 
     menuBar.add(m); 
    } 
    return menuBar 
} 

是導致不出現的菜單欄。經過一番試驗後,我發現當作爲JApplet運行時,JApplet會運行兩次void init()。 修改我的init方法後,我所有的其他代碼工作。

// I declared an boolean runOnce = false; 
public void init() { 
    if (runOnce) { 
    new Calculator(); 
    } 
runOnce = true 
} 
相關問題