【问题标题】:Java - JMenuBar not showing up in JApplet, but it does when run as applicationJava - JMenuBar 没有出现在 JApplet 中,但它在作为应用程序运行时出现
【发布时间】:2013-07-21 00:56:53
【问题描述】:

我正在开发一个可以作为 JApplet 和应用程序运行的计算器。 当我将代码作为应用程序运行时,会显示菜单栏。但是当我将它作为 JApplet 运行时,它不会。

这是一个 JApplet 限制吗?因为当我将所有代码(新的 JMenuBar、添加按钮等)放在计算器类中时,它就可以工作了。但是使用我自己的静态方法MenuBar.create(),它做同样的事情并返回一个JMenuBar,它不起作用。

这是代码,也许我忘记了使菜单栏不出现在小程序中的东西?

计算器

private void BuildGui() {
//MenuBar.create() returns an JMenuBar filled with menus/items.
    menuBar = MenuBar.create();
    panel.add(new JButton("test"));
}

private void Go() {
// NOTE: this.isApplet works, it's a boolean i set during init() or main()
    if (this.isApplet == true) {
        setJMenuBar(menuBar);
        setSize(500,600);
        add(panel);
    } else {
        JFrame frame = new JFrame();
        frame.setJMenuBar(menuBar);
        frame.getContentPane().add(BorderLayout.CENTER, panel);
        frame.setSize(500,600);
        frame.setVisible(true);
    }
}

【问题讨论】:

  • 如需尽快获得更好的帮助,请发帖SSCCE
  • 我找到了解决问题的方法,我会尽快发布答案。 (作为新用户,我必须等待 8 小时)。

标签: java swing japplet jmenubar


【解决方案1】:

经过几个小时的试验,我发现了问题所在。

似乎在类中声明静态 JMenu/JMenuItem

public class MenuBar {
private static JMenu[] menu = {new JMenu("Edit"), new JMenu("View") };

public static JMenuBar create() {
    JMenuBar menuBar = new JMenuBar();
    for (JMenu m : menu) {
        menuBar.add(m);
    }
    return menuBar
}

导致菜单栏不显示。经过一番试验,我发现当作为 JApplet 运行时,JApplet 会运行 void init() 两次! 修改我的 init 方法后,我的所有其他代码都可以正常工作。

// I declared an boolean runOnce = false;
public void init() {
    if (runOnce) {
    new Calculator();
    }
runOnce = true
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多