Java JMenu不可见

Java JMenu不可见,java,swing,button,Java,Swing,Button,我的JFrame中有一个JMenu和JPanel 设置代码: public Gui(String title) { super(title); createGUIComponents(); pack(); this.setBackground(Color.WHITE); this.setDefaultCloseOperation(EXIT_ON_CLOSE); this.setResizable(true); this.setMini

我的JFrame中有一个JMenu和JPanel

设置代码:

public Gui(String title) {
    super(title);

    createGUIComponents();
    pack();

    this.setBackground(Color.WHITE);
    this.setDefaultCloseOperation(EXIT_ON_CLOSE);

    this.setResizable(true);
    this.setMinimumSize(new Dimension(180, 100));
    this.setSize(new Dimension(800, 600));

    this.setVisible(true);
}

private void createGUIComponents() {
    Container c = this.getContentPane();

    JPanel panel = new SpecialJPanel();

    JMenuBar menu = new JMenuBar();
    fileMenu = new JMenu("File", false);
    fileMenu.add("New");
    fileMenu.add("Open");
    fileMenu.add("Save");
    fileMenu.add("Save As");

    c.add(panel, "Center");
    c.add(menu, "Center");
}

每当我单击JMenuBar上的文件菜单按钮时,都不会显示任何内容。我认为它被JPanel屏蔽了,JPanel正在不断更新。有什么办法可以解决这个问题吗?

您没有将菜单添加到菜单栏,所以添加这一行:

menu.add(fileMenu);

另外,您应该使用

setJMenuBar(menu);

您没有将菜单添加到菜单栏,因此请添加以下行:

menu.add(fileMenu);

另外,您应该使用

setJMenuBar(menu);
  • JFrame
    的标准布局是
    BorderLayout
  • BorderLayout
    提供了5个区域,每个区域可以接受1组件 因此,当代码显示:

    c.add(panel, "Center");
    c.add(menu, "Center");
    
    它应该读得更像:

    c.add(panel, BorderLayout.CENTER); // Don't use magic numbers!
    c.add(menu, BorderLayout.PAGE_START);
    

    话虽如此,
    JFrame
    有一种更好的方式来显示
    JMenuBar
    ,详见

  • JFrame
    的标准布局是
    BorderLayout
  • BorderLayout
    提供了5个区域,每个区域可以接受1组件 因此,当代码显示:

    c.add(panel, "Center");
    c.add(menu, "Center");
    
    它应该读得更像:

    c.add(panel, BorderLayout.CENTER); // Don't use magic numbers!
    c.add(menu, BorderLayout.PAGE_START);
    


    话虽如此,
    JFrame
    有一种更好的方式来显示
    JMenuBar
    ,详细内容见。

    它仍然没有显示,但感谢您指出这一点。另外,它应该是这样的。setJMenuBar(menu)@jakesumerican,不需要“this”。+1表示忽略了OP试图做的事情,而是显示了一个更好的方法。它仍然没有显示,但感谢您指出这一点。另外,它应该是这样的。setJMenuBar(menu)@jakesumerican,不需要“this”。+1表示忽略OP试图做的事情,而是显示了一个更好的方法。
    我认为它被JPanel阻止了,JPanel正在不断更新
    -然后也许你应该发布一个适当的SSCE,以便我们可以看到你在做什么。如果您认为这是问题所在,那么停止更新,看看会发生什么<代码>c.添加(面板,“中心”)-不要对约束使用字符串文字。使用BorderLayout类中正确的静态变量。为了更快地获得更好的帮助,请发布一个。
    我认为它被JPanel阻止了,JPanel正在不断更新
    -然后也许你应该发布一个正确的SSCE,以便我们可以看到你在做什么。如果您认为这是问题所在,那么停止更新,看看会发生什么<代码>c.添加(面板,“中心”)-不要对约束使用字符串文字。使用在BorderLayout类中找到的正确静态变量。为了更快地获得更好的帮助,请发布一个。我尝试过这个方法,但它只是在消失之前短暂显示。但是,实际的菜单按钮仍然处于选中状态,那么您如何允许菜单在其上显示?我已经尝试过了,但它只是在消失之前短暂显示。但是,实际的菜单按钮仍处于选中状态,因此您如何允许菜单显示在其上?