我正在开发一个可以作为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);
}
}
答案 0 :(得分:0)
经过几个小时的实验,我发现了问题。
似乎在类
中声明静态JMenu / JMenuItempublic 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
}