从外部类为JFrame添加JMenuBar时setJMenuBar调用失败求助
问题根源
JFrame.setJMenuBar()方法要求参数必须是**JMenuBar类型**的对象,但你自定义的Menubar类只是封装了一个JMenuBar成员变量,本身并不是JMenuBar的子类,直接传入Menubar实例会触发类型不匹配错误,导致方法调用失败。
两种解决方法
方法一:让自定义类继承JMenuBar
修改Menubar.java,让它直接继承JMenuBar,这样它本身就属于JMenuBar类型,可直接传入setJMenuBar():
import javax.swing.*; public class Menubar extends JMenuBar { JMenu menu; JMenuItem item1; Menubar(){ menu = new JMenu("File"); item1 = new JMenuItem("item"); this.add(menu); menu.add(item1); } }
此时Window.java中的frame.setJMenuBar(m);可以正常运行,无需额外修改。
方法二:添加获取内部JMenuBar的方法
如果不想修改类的继承关系,可给Menubar类增加一个返回内部JMenuBar实例的方法:
修改Menubar.java:
import javax.swing.*; public class Menubar { JMenuBar menubar; JMenu menu; JMenuItem item1; Menubar(){ menubar = new JMenuBar(); menu = new JMenu("File"); item1 = new JMenuItem("item"); menubar.add(menu); menu.add(item1); } // 新增获取JMenuBar的方法 public JMenuBar getMenuBar() { return menubar; } }
然后修改Window.java中的调用代码:
frame.setJMenuBar(m.getMenuBar());
内容的提问来源于stack exchange,提问作者MorganOC01
相关产品推荐
相关产品推荐

