Java GUI JMenuBar

Java GUI JMenuBar

好的,我有一个带有 JMenuBar 的 GUI,当我加载它时,有时它不会显示,但如果我将它最小化并再次单击它,JMenuBar 就会显示。我的问题在哪里?我该如何解决?哦,如果我重新调整大小,JMenuBar 出现。

这是我的代码

 import java.awt.Dimension;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;

 import javax.swing.JFrame;
 import javax.swing.JMenu;
 import javax.swing.JMenuBar;
 import javax.swing.JMenuItem;


public class Main {

public static void main(String[] args){
    JFrame frame =  new JFrame("TwitchBot");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    frame.setPreferredSize(new Dimension(700, 500));
    frame.setLocationRelativeTo(null);
    frame.setResizable(true);
    frame.pack();
    frame.setVisible(true);

    KeyGetter.LoadKeys();
    try {
        Config.loadConfig();
    } catch (Exception e) {
        e.printStackTrace();
    }

    JMenuBar mb = new JMenuBar();


    JMenu file = new JMenu("File");
    mb.add(file);
    JMenu edit = new JMenu("Edit");
    mb.add(edit);
    JMenuItem options = new JMenuItem("Options");
    options.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e){
            Config.openConfig(frame);
        }
    });
    frame.setJMenuBar(mb);
    edit.add(options);
  }
}
  • 确保您 creating/modifying 您的 UI 仅来自事件调度线程的上下文。有关详细信息,请参阅 Initial Threads
  • 仅在建立基础 UI 后调用 packsetVisible

永远不要使用 pack() ..它有一些错误的案例..有时它会失败。从实验中我学会了总是在调用 setVisible(true) 之前调用 repaint() 这永远不会失败。在调用 setVisible(true) 之前调用 repaint()。--这永远不会失败。

  repaint();
  setVisible(true);  // assured NEVER FAILS.