Java 设置JMenu,I';我试图在布局框的顶部创建一个菜单,它不是组合框

Java 设置JMenu,I';我试图在布局框的顶部创建一个菜单,它不是组合框,java,user-interface,layout,menu,menubar,Java,User Interface,Layout,Menu,Menubar,这是我用来设置菜单的,我想在我完成应用程序的其余部分之前解决这个问题 import java.awt.*; import java.awt.Event.*; import java.awt.event.ActionEvent; import java.awt.event.KeyEvent; import javax.swing.*; import javax.swing.event.*; public class Layout_Manager extends JPanel{ //ins

这是我用来设置菜单的,我想在我完成应用程序的其余部分之前解决这个问题

import java.awt.*;
import java.awt.Event.*;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import javax.swing.*;
import javax.swing.event.*;

public class Layout_Manager extends JPanel{
    //instance variables for panels
    private JPanel panel1;
    private JPanel panel2;
    private JPanel panel3;
    private JPanel panel4;
    private JPanel panel5;
    private JPanel panel6;
    //instance variables for help and shapes tab
    private JMenu shapesMenu;
    private JMenu helpMenu;
    private JMenuBar Bar1;
    private JMenuItem menuItem;
    private JMenuItem CircleMenuItem;
    private JMenuItem RectangleMenuItem;
    private JMenuItem SquareMenuItem;
    private JMenuItem LineMenuItem;
    Layout_Manager(){
        //set up panel
        panel1 =new JPanel(new FlowLayout(FlowLayout.LEFT));
        //Create MenuBar and add menu to it
        Bar1 = new JMenuBar();
        shapesMenu = new JMenu("Shapes");
        CircleMenuItem = new JMenuItem("Circle");
        CircleMenuItem.setAccelerator(KeyStroke.getKeyStroke(ActionEvent.CTRL_MASK,KeyEvent.VK_C));
        RectangleMenuItem = new JMenuItem("Rectangle");
        RectangleMenuItem.setAccelerator(KeyStroke.getKeyStroke(ActionEvent.CTRL_MASK, KeyEvent.VK_R)); 
        SquareMenuItem = new JMenuItem("Square");
        SquareMenuItem.setAccelerator(KeyStroke.getKeyStroke(ActionEvent.CTRL_MASK,KeyEvent.VK_S));
        LineMenuItem = new JMenuItem("Line");
        LineMenuItem.setAccelerator(KeyStroke.getKeyStroke(ActionEvent.CTRL_MASK,KeyEvent.VK_L));
        shapesMenu.add(CircleMenuItem,RectangleMenuItem);
        shapesMenu.add(SquareMenuItem,LineMenuItem);
        JMenu add = Bar1.add(shapesMenu);
        panel1.add(Bar1);
        panel2 = new JPanel(new FlowLayout(FlowLayout.LEFT));
        panel3= new JPanel(new FlowLayout(FlowLayout.LEFT));
        panel4= new JPanel(new FlowLayout(FlowLayout.LEFT));
        panel5 = new JPanel(new GridLayout(5,1));
        panel5.add(panel1);
        panel5.add(panel2);
        panel5.add(panel3);
        panel5.add(panel4);

        add(panel5);

}           
}

我添加其他面板的目的是让其他面板帮助塑造布局管理器,但我不太明白为什么它不创建菜单

这也是我的测试仪,我遵循了我以前使用过的有效示例,这就是为什么这让我感到困惑


import javax.swing.*;

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author ethubbard
 */
public class GUI_ShapeTester {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        JFrame frame = new JFrame("Layout Manager");
        Layout_Manager layout = new Layout_Manager();
        frame.add(layout);
        frame.pack();
        frame.setVisible(true);
        frame.setLocation(null);
    }

}

我认为这就是创建GUI所需要做的一切,并且在顶部只有菜单栏,显然我缺少了另一个组件,但我不知道是什么。

您没有正确构建菜单/菜单项。另外,应使用
setJMenuBar()
方法将
JMenuBar
添加到
JFrame
。请参阅以下版式管理器构造函数的更正代码:

 Layout_Manager(){
        //set up panel
        panel1 =new JPanel(new FlowLayout(FlowLayout.LEFT));
        //Create MenuBar and add menu to it
        Bar1 = new JMenuBar();
        shapesMenu = new JMenu("Shapes");
        CircleMenuItem = new JMenuItem("Circle");
        CircleMenuItem.setAccelerator(KeyStroke.getKeyStroke(ActionEvent.CTRL_MASK,KeyEvent.VK_C));
        RectangleMenuItem = new JMenuItem("Rectangle");
        RectangleMenuItem.setAccelerator(KeyStroke.getKeyStroke(ActionEvent.CTRL_MASK, KeyEvent.VK_R)); 
        SquareMenuItem = new JMenuItem("Square");
        SquareMenuItem.setAccelerator(KeyStroke.getKeyStroke(ActionEvent.CTRL_MASK,KeyEvent.VK_S));
        LineMenuItem = new JMenuItem("Line");
        LineMenuItem.setAccelerator(KeyStroke.getKeyStroke(ActionEvent.CTRL_MASK,KeyEvent.VK_L));
        shapesMenu.add(CircleMenuItem);     // corrected
        shapesMenu.add(RectangleMenuItem);  // corrected
        shapesMenu.add(SquareMenuItem);     // corrected
        shapesMenu.add(LineMenuItem);       // corrected
        Bar1.add(shapesMenu);               // corrected
        panel2 = new JPanel(new FlowLayout(FlowLayout.LEFT));
        panel3= new JPanel(new FlowLayout(FlowLayout.LEFT));
        panel4= new JPanel(new FlowLayout(FlowLayout.LEFT));
        panel5 = new JPanel(new GridLayout(5,1));
        panel5.add(panel1);
        panel5.add(panel2);
        panel5.add(panel3);
        panel5.add(panel4);        
        add(panel5);      
        JFrame frame = new JFrame("Layout Manager");   //create JFrame
        frame.add(this);
        frame.setJMenuBar(Bar1);                       // add menu bar built earlier
        frame.pack();
        frame.setVisible(true);
}  
然后从GUI_ShapeTester类中,您可以简单地创建布局管理器对象,例如:

    public static void main(String[] args) {
        new Layout_Manager();
    }