【问题标题】:Java GUI JMenuBarJava GUI JMenuBar
【发布时间】:2015-02-18 05:39:31
【问题描述】:

好的,我有一个带有 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);
  }
}

【问题讨论】:

  • 你应该pack()并在你添加所有元素后显示JFrame

标签: java user-interface jmenubar


【解决方案1】:
  • 确保仅在事件调度线程的上下文中创建/修改 UI。详情请见Initial Threads
  • 只有在建立基本 UI 后,才能调用 packsetVisible

【讨论】:

  • 谢谢你,你修好了!
  • 我还有一个问题...我应该在这里发帖还是发新帖?
【解决方案2】:

永远不要使用 pack() ..它有问题..有时它会失败。通过实验,我学会了在调用 setVisible(true) 之前总是调用 repaint() 这永远不会失败。在调用 setVisible(true) 之前调用 repaint()。--这永远不会失败。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-02
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多