Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 菜单栏出现在JFrame的左侧。如何使其显示在JFrame的顶部?_Java_Swing_Layout Manager_Menubar - Fatal编程技术网

Java 菜单栏出现在JFrame的左侧。如何使其显示在JFrame的顶部?

Java 菜单栏出现在JFrame的左侧。如何使其显示在JFrame的顶部?,java,swing,layout-manager,menubar,Java,Swing,Layout Manager,Menubar,} 我已经编写了上述代码,并试图找出菜单栏出现在框架左侧但失败的原因。此外,layoutmanager在测试构造函数中不起作用。我还试图在代码中插入一个按钮,但它没有出现。那么,框架出现这种行为的可能原因是什么?解决方案是什么?您使用BorderLayout(默认设置)和下一个代码将菜单添加到容器中: import javax.swing.*; import java.awt.event.*; //import java.awt.event.ActionListener; class Te

}


我已经编写了上述代码,并试图找出菜单栏出现在框架左侧但失败的原因。此外,layoutmanager在测试构造函数中不起作用。我还试图在代码中插入一个按钮,但它没有出现。那么,框架出现这种行为的可能原因是什么?解决方案是什么?

您使用
BorderLayout
(默认设置)和下一个代码将菜单添加到容器中:

 import javax.swing.*;
import java.awt.event.*;
//import java.awt.event.ActionListener;

 class Test extends JFrame 
 {
    JButton qb=new JButton("quit");
    JPanel p1=new JPanel();
    JMenuBar menubar = new JMenuBar();
   JMenu file = new JMenu("File");
   JMenuItem eMenuItem = new JMenuItem("Exit");
    public Test()
   {
    //setLayout();
    setTitle("this is a test");
    setSize(300,300);
    setVisible(true);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    setAlwaysOnTop(true);
    setResizable(true);
    setExtendedState( this.getExtendedState()|JFrame.MAXIMIZED_BOTH );//to set initial state of frame as minimized
    menubar.add(file);
    add(menubar);
    file.add(eMenuItem);

}
public static void main (String[] args) 
{
    new Test();
}
但要将菜单添加到
JFrame
中,您可以使用下一行代替您的

add(menubar);
输出:


这就是你要找的

setJMenuBar(menubar);

您可以尝试调用setJMenuBar(..)

更改您的代码

  import javax.swing.*;

import java.awt.GridBagLayout;
import java.awt.event.*;
//import java.awt.event.ActionListener;

 class Test extends JFrame 
 {
    JButton qb=new JButton("quit");
    JPanel p1=new JPanel();

JMenuBar menubar = new JMenuBar();
JMenu file = new JMenu("File");
JMenuItem eMenuItem = new JMenuItem("Exit");
public Test()
{

    setTitle("this is a test");
    setSize(300,300);
    setVisible(true);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    setAlwaysOnTop(true);
    setResizable(true);
    setExtendedState( this.getExtendedState()|JFrame.MAXIMIZED_BOTH );//to set initial state of frame as minimized
    menubar.add(file);
    setJMenuBar(menubar);
    file.add(eMenuItem);

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


那就好了。

简单地说就是这样

menubar.add(file);
file.add(eMenuItem);
this.setJMenuBar(menubar);

thanx@alex2410这真的很有帮助,但你能告诉我为什么布局管理器不能在setLayout()方法中工作吗?在你的代码中,你从来没有使用过
setLayout()
,而且你必须将
LayoutManager
传输到该方法。这是。
menubar.add(file);
file.add(eMenuItem);
this.setJMenuBar(menubar);
add(menubar,BorderLayout.NORTH);