任何解决方法?

myContainer.getContentPane().addContainerListener(new ContainerListener(){
    @Override public void componentAdded(ContainerEvent e) {
        System.out.println(e.getChild().getClass().getName().toString());
}});
myContainer.add(new JPanel());
myContainer.setJMenuBar(new JMenuBar());

最佳答案

JMenuBar不在内容窗格中。

有关框架的结构及其组件的信息,请参见Swing教程的Using Top Level Containers部分。

setJMenuBar()方法中的实际代码为:

getRootPane().setMenuBar(menubar);


因此,我猜想ContainerListener需要添加到根窗格中。

编辑:

在教程链接中,您可以看到框架结构如下:


根窗格

分层窗格

菜单栏
内容窗格




从我发布的代码看来,菜单栏已添加到根窗格中,这就是为什么我建议将容器侦听器添加到根窗格中的原因。但是,您似乎需要将ContainerListener添加到分层窗格中:

getLayeredPane().addContainerListener(new ContainerAdapter()...

07-28 03:23