2012-02-18 11 views
6

私は問題を抱えており、なぜ私は本当に理解できません。私はJFrameとJPanelを持っており、すべて正常に動作します。私はJPanelにjMenuBarを追加しようとしていますが、それを表示することはできません。 「その他のコンポーネント」の下に配置されており、実行時には表示されません。助言がありますか?NetBeansでjMenuBarをJPanelに追加するにはどうすればよいですか?

編集:適切な答えはNetBeansがJFrameにJMenuを追加できないようです。私は、これを最初の投稿に追加したかったのは、以下の適切な回答が投票に失敗したからです。

+0

[JamenuBarをJPanelに追加しますか?](http://stackoverflow.com)/questions/4299846/add-jmenubar-to-a-jpanel) – ryvantage

答えて

6

スマートな方法の一つは、プロジェクトのバー であるJFrameの上 ダブルクリックで左側のパレットバーのみドラッグにあなたが持っているスイング のすべてのコンポーネントがあります表示され、で、これは実際のJFrame と新しいウィンドウが表示されますアイテムをこのフレームにドロップする このコードはnbによって自動的に作成されます 右クリックしてそのアイテムにイベントを追加することもできます

8

setJMenuBar(...)メソッドを使用してJMrameBarをJFrameに追加しました。

あなたの原因を助けるために小さなコード:

import javax.swing.*; 

public class MenuBarTest extends JFrame 
{ 
    public MenuBarTest() 
    { 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setLocationRelativeTo(null); 

     JPanel contentPane = new JPanel(); 
     contentPane.setBackground(java.awt.Color.WHITE); 
     JMenuBar menuBar = new JMenuBar(); 
     JMenu menu = new JMenu("File"); 
     JMenuItem menuItem = new JMenuItem("Open"); 

     menu.add(menuItem); 
     menuBar.add(menu); 

     setContentPane(contentPane); 
     setJMenuBar(menuBar); 
     setSize(200, 200); 
     setVisible(true); 
    } 

    public static void main(String... args) 
    { 
     SwingUtilities.invokeLater(new Runnable() 
     { 
      public void run() 
      { 
       new MenuBarTest(); 
      } 
     }); 
    } 
} 
4

JMenuBarのは、それがどのコンテナ(BorderLayout.PAGE_START位置へのBorderLayoutを使用して、通常は1)に追加することができるのJComponentから派生するので、それは最も一般的ですsetJMenuBar(...)メソッドを使用して、JApplet、JDialog、JFrame、JInternalFrame、JRootPaneに追加されます。ただ、少量の添加

http://docs.oracle.com/javase/tutorial/uiswing/components/toplevel.html

メニューバーは、一個の以上のメニューが含まれており、通例、プラットフォーム依存の場所がある - 通常ウィンドウの上部に沿ってを。述べvextorspaceについては

+0

どうすればいいですか? JFrameに表示するのに問題がありますか? 「その他のコンポーネント」の下に置かれ続けます。 – AdamOutler

+0

申し訳ありませんが、これは間違っています。 JMenuBarを任意のコンポーネントに追加する場合は、自由に行うことができます。 -1票。 –

+0

これが間違っていることを証明するサンプルコードを参照してください。非常に誤解を招くので、あなたの答えを削除してください。私はあなたがそうしないなら、この回答を削除する司会者のための旗を残しました。 –

5

のJMenuBarはJFrames、持たないJDialog、およびJAppletsに追加することができます。

この例では、JPanelの(またはそのことについては任意の容器)にJMenuBarのを追加するのは簡単であることを示しています

import java.awt.BorderLayout; 
import java.awt.Dimension; 
import java.awt.GridLayout; 
import java.awt.event.ActionEvent; 

import javax.swing.*; 

public class MenuBarEg { 
    private static void createAndShowGui() { 
     final JFrame frame = new JFrame("MenuBar Exampe"); 

     JMenuItem barItem = new JMenuItem(new AbstractAction("Bar") { 

     @Override 
     public void actionPerformed(ActionEvent arg0) { 
      JOptionPane.showMessageDialog(frame, "Hello from bar!"); 
     } 
     }); 
     JMenu fooMenu = new JMenu("Foo"); 
     fooMenu.add(barItem); 
     JMenuBar menuBar = new JMenuBar(); 
     menuBar.add(fooMenu); 

     JPanel menuBarHoldingPanel = new JPanel(new BorderLayout()); 
     menuBarHoldingPanel.add(menuBar, BorderLayout.PAGE_START); 

     JPanel mainPanel = new JPanel(new GridLayout(0, 1)); 

     // rigid area just as a place-holder 
     mainPanel.add(Box.createRigidArea(new Dimension(400, 150))); 
     mainPanel.add(menuBarHoldingPanel); 

     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.getContentPane().add(mainPanel); 
     frame.pack(); 
     frame.setLocationByPlatform(true); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
     public void run() { 
      createAndShowGui(); 
     } 
     }); 
    } 
} 

だけでなく、これを行うのは簡単ですが、これは多くの場合があります望ましい。

+0

vextorspaceは実際にスポットライトだった。しかし、今私はJPanelからJFrameへの変換からスタックオーバーフローエラーを処理しています。 – AdamOutler

+0

@AdamOutler:申し訳ありませんが、あなたは間違っています。私が上に引用した彼の陳述は、間違っています。もしあなたが私が間違っていると言っているなら、それを証明するためのコードでこれをバックアップしてください。私はあなたよりもスイングについて少しは知っていると思うので、確かにvextorspace以上です。はい、クラスをJFrameに拡張させることで問題を解決できますが、必ずしもそうではありません。あなたのコードをもっと見せたら、私はあなたにもっと良い方法を示すことができたと思いますが、結論はvextorspaceがあなたや他の人を誤解させるような誤った情報を広げてはならないということです。 –

+1

私は単純に、どのコンポーネントにsetJMenuBar()ルーチンを持っていましたが、Panelに追加できないことでいつも迷惑になりました。 – vextorspace

関連する問題