2016-12-16 501 views
1

我是java swing类的新手,并且正在学习如何在JFrame中添加菜单栏和菜单。为什么在添加setJMenubar()方法后,Jmenubar在我的Jframe中不可见?

我写了一个简单的例子,但JFrame显示为空,我不知道为什么,因为我已经在我的代码中包含setJMenuBar()方法,那么菜单栏也不可见。

这里是我的代码

import java.awt.*; 
import javax.swing.*; 
import java.awt.event.*; 
public class jmenuexample extends JFrame //implements ActionListener 
{ 
    JLabel title; 
    JMenuBar menubar; 
    JMenu menu, submenu; 
    JMenuItem menuItem; 
    jmenuexample() 
    { 
     setTitle("JMenu Example"); 
     setSize(750, 450); 
     //setLayout(null); 
     setVisible(true); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     menubar = new JMenuBar(); 
     menu = new JMenu("File"); 
     menuItem = new JMenuItem("New\tCtrl+N"); 
     menu.add(menuItem); 
     menuItem = new JMenuItem("Open\tCtrl+O"); 
     menu.add(menuItem); 
     menuItem = new JMenuItem("Save\tCtrl+S"); 
     menu.add(menuItem); 
     //menu.addSeparator(); 
     menuItem = new JMenuItem("Exit"); 
     menu.add(menuItem); 
     menubar.add(menu); 
     /*panel = new JPanel(); 
     panel.setLayout(new GridLayout()); 
     panel.setBounds(250,10, 400, 300);*/ 
     //add(menubar); 
     //add(panel); 
     this.setJMenuBar(menubar); 
    } 
    public static void main(String argv[]) 
    { 
     new jmenuexample(); 
    } 
} 

这里是这段代码的输出。

Screenshot of output

+1

请勿将“Ctrl_O”添加为菜单项文本的一部分。相反,您需要使用'JMenuItem'的'setAccelerator(...)'方法。阅读[如何使用菜单]的Swing教程部分(http://docs.oracle.com/javase/tutorial/uiswing/components/menu.html)以获取更多信息和工作示例。本教程还将帮助您更好地构建您的课堂,以便您的组件在“事件调度线程(EDT)”上创建。为所有Swing基础知识保留教程链接。 – camickr

+0

*“我是Java swing的新手”*那么开始做对吧:了解[Java命名约定](http://www.oracle.com/technetwork/java/codeconventions-135099.html)并且不会继承来自JFrame(http://stackoverflow.com/questions/15867148/why-do-we-need-to-extend-jframe-in-a-swing-application)。 –

回答

2

由于您使用setVisible(true);之前设置的 this.setJMenuBar(menubar);

所以chnage到底的顺序和setVisible(true);

您的代码应该是这样的:

.... 
menubar.add(menu); 
/*panel = new JPanel(); 
panel.setLayout(new GridLayout()); 
panel.setBounds(250,10, 400, 300);*/ 
//add(menubar); 
//add(panel); 
this.setJMenuBar(menubar); 
setVisible(true); 
.... 

希望这可以帮助你。

相关问题