2012-05-27 51 views
1

我想讓我的JMenuBar在GUI中顯示,但它只是在頂部顯示爲1像素行。JMenuBar沒有顯示

這是我的代碼...

public LibraryView() { 
    setBounds(100,100,640,480); 
    setVisible(true); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setLayout(new BorderLayout()); 

    JMenuBar b1 = new JMenuBar(); 
    JMenu m1 = new JMenu("Test"); 
    JMenuItem i1 = new JMenuItem("Item1"); 

    this.setJMenuBar(b1); 
} 

可能有人請幫助我瞭解什麼是錯的。

回答

5

您需要將JMenuJMenuItem添加到JMenuBar。您還需要pack()setVisible(true);在方法結束時,顯示的GUI之前...

public LibraryView() { 
    setBounds(100,100,640,480); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setLayout(new BorderLayout()); 

    JMenuBar b1 = new JMenuBar(); 
    JMenu m1 = new JMenu("Test"); 
    JMenuItem i1 = new JMenuItem("Item1"); 

    m1.add(i1); // ADDED 
    b1.add(m1); // ADDED 

    this.setJMenuBar(b1); 

    pack(); // ADDED 
    setVisible(true); // MOVED 
} 
+0

1+爲好建議。 –

+0

謝謝!忘了將項目添加到酒吧,唉.. 請您簡單解釋爲什麼需要打包()?該代碼似乎沒有它工作正常。 – YemSalat

+1

大多數Java GUI都是自動調整大小的,這意味着它們將根據窗口大小和其中的組件大小而增長和縮小。調用'pack()'將計算窗口的首選大小,以便所有組件都可以按壓大小顯示。對你來說,它可能不是完全必要的,因爲你已經設置了setBounds(),但是無論如何它都是一個很好的習慣來調用'pack()'。 – wattostudios

3

您應該只將所有組件的頂層窗口調用setVisible(true)。另外不要忘記使用佈局管理器,讓這些管理員和組件的preferredSize設置組件的大小,不要忘記撥打pack()

0

在你調用set之前調用repaint()可見(true)這永遠不會失敗。

setJMenuBar(menuBar); 
menuBar.add(jMenuItem); 
repaint(); //then 
setVisible(true); //Assured NEVER FAILS 
+0

重繪()可以解決問題,但只有在您調用setVisible()之後才能正常工作。 –