我遇到了问题,我不明白为什么。我有一个JFrame和一个JPanel,一切正常。我正在尝试将jMenuBar添加到JPanel中,但我无法让它显示出来。它被放置在“其他组件”下,并且在运行时不会显示。有什么建议吗?
编辑:似乎适当的答案是NetBeans无法将JMenu添加到JFrame。我想在第一篇文章中添加这个内容,因为下面的相应答案是低调的。
答案 0 :(得分:8)
使用setJMenuBar(...)方法将JMenuBar添加到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();
}
});
}
}
答案 1 :(得分:6)
其中一个聪明的方法是 双击项目栏上的JFrame 这是一个带有实际JFrame的新窗口 在左侧调色板栏中出现了摆动的所有组件 你必须只将项目拖放到此框架 代码将由nb自动生成 您还可以通过右键单击该项目来添加事件
答案 2 :(得分: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();
}
});
}
}
这不仅容易做到,而且有很多情况需要这样做。
答案 3 :(得分:4)
由于JMenuBar派生自JComponent,它可以添加到任何容器(通常是使用BorderLayout到BorderLayout.PAGE_START位置的容器),最常将添加到JApplet,JDialog,JFrame,JInternalFrame, JRootPane通过setJMenuBar(...)方法。
http://docs.oracle.com/javase/tutorial/uiswing/components/toplevel.html
只是一小部分:
菜单栏包含一个或多个菜单,并且具有通常的,与平台相关的位置 - 通常位于窗口顶部。