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