6

問題が発生しているのですが、その理由がよくわかりません。JFrameとJPanelがあり、すべてが正常に機能します。jMenuBarをJPanelに追加しようとしていますが、表示されません。「その他のコンポーネント」の下に配置されており、実行時に表示されません。助言がありますか?

編集:適切な答えは、NetBeansがJMenuをJFrameに追加できないことのようです。以下の適切な回答が反対票を投じられたため、これを最初の投稿に追加したいと思いました。

4

4 に答える 4

8

JMenuBarは、 setJMenuBar(...)メソッドを使用して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();
            }
        });
    }
}
于 2012-02-18T18:08:23.607 に答える
6

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

于 2012-02-19T11:45:12.257 に答える
5

次のように述べているvextorspaceの場合:

JMenuBarは、JFrames、JDialogs、およびJAppletsにのみ追加できます。

この例は、JMenuBarをJPanel(またはそれに関する任意のコンテナー)に簡単に追加できることを示しています。

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();
         }
      });
   }
}

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

于 2012-02-18T18:22:15.440 に答える
4

JMenuBarはJComponentから派生しているため、任意のコンテナ(通常、BorderLayoutをBorderLayout.PAGE_START位置に使用するコンテナ)に追加できます。最も一般的には、 setJMenuBar(...)メソッドを介してJApplet、JDialog、JFrame、JInternalFrame、JRootPaneに追加されます。 。

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

ほんの少しの追加:

メニューバーには1つ以上のメニューが含まれ、通常はウィンドウの上部に沿って、プラットフォームに依存する通常の場所があります。

于 2012-02-18T18:12:41.237 に答える