2013-04-29 55 views
0

我有一個JMenu的和我的JPanel JFrame的內部JMenu對象是不可見的

設置代碼:

public Gui(String title) { 
    super(title); 

    createGUIComponents(); 
    pack(); 

    this.setBackground(Color.WHITE); 
    this.setDefaultCloseOperation(EXIT_ON_CLOSE); 

    this.setResizable(true); 
    this.setMinimumSize(new Dimension(180, 100)); 
    this.setSize(new Dimension(800, 600)); 

    this.setVisible(true); 
} 

private void createGUIComponents() { 
    Container c = this.getContentPane(); 

    JPanel panel = new SpecialJPanel(); 

    JMenuBar menu = new JMenuBar(); 
    fileMenu = new JMenu("File", false); 
    fileMenu.add("New"); 
    fileMenu.add("Open"); 
    fileMenu.add("Save"); 
    fileMenu.add("Save As"); 

    c.add(panel, "Center"); 
    c.add(menu, "Center"); 
} 

每當我點擊JMenuBar上的文件菜單按鈕,什麼也不顯示。我認爲它正在被不斷更新的JPanel封鎖。有沒有什麼辦法解決這一問題?

+1

'我認爲它被正在不斷更新的JPanel阻止 - 那麼也許你應該發佈一個合適的SSCCE,以便我們可以看到你在做什麼。如果您認爲這是問題,那麼停止更新並查看會發生什麼。 'c.add(panel,「Center」);' - 不要爲約束使用字符串文字。使用BorderLayout類中找到的適當的靜態變量。 – camickr 2013-04-29 02:14:29

+0

爲了儘快提供更好的幫助,請發佈[SSCCE](http://sscce.org/)。 – 2013-04-29 02:56:35

回答

2

您還沒有添加菜單,菜單欄,所以加入這一行:

menu.add(fileMenu); 


另外,代替c.add(menu),你應該使用

setJMenuBar(menu); 
+0

它仍然不顯示,但謝謝指出。另外,它應該是this.setJMenuBar(菜單) – 2013-04-29 01:32:30

+0

@JakeSumrican,「this」不是必需的。 – camickr 2013-04-29 02:11:05

+0

+1無視OP正在嘗試做什麼,而是展示了一個更好的方法。 – 2013-04-29 05:32:57

1
  1. 的標準佈局JFrameBorderLayout
  2. BorderLayout提供5個區域,其中可以分別接受組件。

所以wherreas的代碼讀取:

c.add(panel, "Center"); 
c.add(menu, "Center"); 

它實際上應該讀更多的東西一樣:

c.add(panel, BorderLayout.CENTER); // Don't use magic numbers! 
c.add(menu, BorderLayout.PAGE_START); 

話雖如此,一個JFrame有一個更好的方式來顯示JMenuBar,詳見answer by @CoderTitan

+0

我試過這個,但它只是簡單地顯示在消失之前。實際的菜單按鈕保持選中狀態,所以如何讓菜單顯示在上面? – 2013-04-30 23:58:23