2011-12-06 51 views
2

我對Java比較陌生,我花了過去兩個晚上試圖讓我的Java程序正確鋪設,我希望有人可以爲我清除一些東西。使用Swing佈局我的基本應用程序的困難

佈局一切都很順利,直到我決定使用JMenuBar將菜單欄添加到我的應用程序中,而現在由於某種原因,我的應用程序的菜單欄消失了,附加到窗格頂部中心的文件菜單寬度酒吧,或完美的作品,但隱藏下面的按鈕。

我最近的嘗試讓我有點接近,但由於某種原因,菜單欄的高度現在似乎很大,當我將菜單欄容器設置爲BorderLayout時。

任何人都可以指出我在正確的方向,我要去哪裏錯了嗎?

JPanel mainPane = new JPanel(); 
BoxLayout progLayout = new BoxLayout(mainPane, BoxLayout.Y_AXIS); 

mainPane.setLayout(progLayout); 
setContentPane(mainPane); 

JMenuBar menuBar = new JMenuBar(); 

JMenu file = new JMenu("File"); 
menuBar.add(file); 

JMenuItem project = new JMenuItem("New Project"); 
JMenuItem exit = new JMenuItem("Exit"); 
file.add(project); 
file.add(exit); 

JPanel row0 = new JPanel(); 
BorderLayout menuBarLayout = new BorderLayout(); 
row0.setLayout(menuBarLayout); 
row0.add(menuBar); 
add(row0); 


JPanel row1 = new JPanel(); 
row1.setOpaque(false); 
row1.add(domainLabel); 
row1.add(projectNameInput); 
row1.add(userSubmit); 
row1.add(userClear); 
add(row1); 

非常感謝。

*編輯:我終於設法得到它的工作得益於下面的答案。請參閱下面的解決方案的評論。

+1

通常我通過它的'setJMenuBar(...)'方法添加的JMenuBar到JFrame本身。這將以BorderLayout.NORTH方式將其添加到contentPane之上。如果我的JFrame是在其他地方創建的,我有時會將類放在公共'getJMenuBar()'方法之上,以允許其他類提取此處創建的菜單欄。 –

+0

首先,這是不合適的:)「File.add(exit);」在java變量中應該以小寫字母開頭並且任何其他的字由駱駝大小寫聯合。大聲笑我以爲我從來沒有見過靜態方法如.add()在文件類...... :(不好的做法 – doNotCheckMyBlog

+1

@編程器感謝您指出了這一點。您可以告訴其餘的代碼,我確實遵循命名你提到的約定,我必須在不考慮它的情況下輸入大寫字母,現在已經被編輯以阻止其他人感到困惑; –

回答

5

重申:通常我已經通過其setJMenuBar(...)方法將JMenuBar添加到JFrame本身。這將以BorderLayout.NORTH的方式將其添加到contentPane的正上方。如果我的JFrame是在其他地方創建的,我有時會將方法提供給公共getJMenuBar()方法以允許其他類提取在此創建的菜單欄。

如果我絕對需要將JMenuBar添加到JPanel,我給JPanel一個BorderLayout並將JMenuBar添加到BorderLayout.NORTH的位置。如果我需要通過BoxLayout添加其他組件,則將一個使用BoxLayout的JPanel添加到主JPanel的BorderLayout.CENTER位置,並將其他子組件添加到使用JPanel的BoxLayout。

教程包括:
Using Top-Level Containers
Using Menus

+0

另外:本網站有很好的教程,它可以引導你通過... http://www.roseindia.net/java/java-get-example/menu-bar-java.shtml – doNotCheckMyBlog

+2

@程序員:謝謝你的信息。我不得不說,我不願意推薦roseindia網站,因爲我看到很多建議都是錯誤的。我更喜歡在上面的回答中推薦標準的Oracle Swing教程。 –

+0

哎呀...我應該小心!謝謝,另一個資源是:http://docs.oracle.com/javase/tutorial/uiswing/components/menu.html但有點複雜... :)希望OP會檢查這個oracle鏈接 – doNotCheckMyBlog