2011-12-06 5 views
2

私は比較的新しいJavaです。私はJavaプログラムを正しくレイアウトするために過去2つの夜を過ごしました。私は誰かが私のためにいくつかのことをクリアできることを望んでいます。スイングを使用した基本的なアプリケーションのレイアウトが難しい

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(...)'メソッドを介したJFrame自体にJMenuBarのを追加しました。これにより、BorderLayout.NORTH形式でcontentPaneのすぐ上に追加されます。私のJFrameが他の場所に作成されている場合、他のクラスがここで作成したメニューバーを抽出できるように、時に公開の 'getJMenuBar()'メソッドの上にクラスを与えます。 –

+0

まずはこれはとても不適切です:) "File.add(exit);" Java変数では、小文字で始まる必要があります。 LOL私はFileクラスの.add()のような静的メソッドを見たことがないと思っていました。(悪い練習 – doNotCheckMyBlog

+1

@Brogrammerそれを指摘してくれてありがとう。コードの残りの部分からわかるように、あなたが言ったコンベンションでは、大文字を考えずに入力しなければなりません。これは他の人が混乱するのを防ぐために編集されました;) –

答えて

5

繰り返してください:通常、JFrame自体にsetJMenuBar(...)メソッドを使用してJMenuBarを追加しました。これにより、BorderLayout.NORTHという形でcontentPaneのすぐ上に追加されます。私のJFrameがどこか他の場所に作成されている場合は、公開されたクラスの上にあるクラスを与えて、他のクラスがここで作成したメニューバーを抽出できるようにすることがあります。

JPanelにJMenuBarを追加する必要がある場合は、JPanelにBorderLayoutを与え、JMenuBarをBorderLayout.NORTHの位置に追加します。 BoxLayoutを介して追加された他のコンポーネントが必要な場合、JPanelをメインのJPanelのBorderLayout.CENTER位置に追加し、その他のサブコンポーネントをBoxLayoutを使用してJPanelに追加します。

チュートリアルが含まれます:
Using Top-Level Containers
Using Menus

+0

さらに:このウェブサイトこれはあなたを導くことができます... http://www.roseindia.net/java/java-get-example/menu-bar-java.shtml – doNotCheckMyBlog

+2

@Brogrammer:情報ありがとうございます。私は、ローゼンディアのサイトを推薦することに消極的だと言わざるを得ません。そこには多くの推奨事項がありましたが、それは間違っているだけです。私は上記の私の答えにリンクされているような標準のOracle Swingチュートリアルをお勧めします。 –

+0

おっと...私もあまりにも注意する必要があります!ありがとう、もう一つのリソースは、http://docs.oracle.com/javase/tutorial/uiswing/components/menu.htmlですが、少し複雑です:) OPがこのオラクルのリンクをチェックします。 – doNotCheckMyBlog

関連する問題