java的JMenuBar的不可见? 为什么?(java JMenuBar not visibl

2019-10-20 15:11发布

我想不通为什么我的菜单栏是不可见的。 我有下面的代码:

//主要

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
public class Menu extends JFrame{
    public static void main(String[] args){

        JFrame frame = new JFrame();
        frame.setSize(500,350);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);

        menuBar mbObj = new menuBar();

        mbObj.menuBar(frame);
    }
}

//菜单栏类

public class menuBar{

        private JMenu file,edit;
        private JMenuItem nFile ,oFile,sFile,saFile,exit;
        private JMenuItem undo,copy,paste;
        private JMenuBar bar;

        public void menuBar(JFrame frame){
            bar = new JMenuBar();
            frame.setJMenuBar(bar);
            bar.setVisible(true);
            file = new JMenu("File");
            edit = new JMenu("Edit");
            bar.add(file);
            bar.add(edit);
        }    
 }

Answer 1:

呼叫setVisible(true)顶层窗口,在这里一个JFrame,只有将所有组件,包括之后 JMenuBar 。 你也想避免调用setSize(...)上的任何东西,而是使用布局管理器和调用pack()在JFrame中添加的所有成分之后和调用之前setVisible(true)

所以顺序应该是:

// create JFrame
JFrame frame = new JFrame("Foo");

// here add all components to the JFrame
// .....
// done adding components

frame.pack();
// frame.setLocationRelativeToPlatform(true); // if you wish
frame.setVisible(true);

顺便说一句类名称应以大写字母开头,并且不具有完全相同的名称作为类的方法,因为这将创建一个“伪” -constructor并会混淆大家。



文章来源: java JMenuBar not visible? Why?