有什么解决办法吗?
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 不是内容 Pane 的一部分。
请参阅 Swing 教程中 Using Top Level Containers 的部分有关框架及其组件的结构的信息。
setJMenuBar()方法中的实际代码是:
getRootPane().setMenuBar(menubar);
所以我猜测 ContainerListener 需要添加到根 Pane 中。
编辑:
从教程链接中您可以看到框架结构如下所示:
- 根 Pane
- 分层 Pane
- 菜单栏
- 内容 Pane
- 分层 Pane
从我发布的代码来看,菜单栏似乎已添加到根 Pane ,这就是我建议将容器监听器添加到根 Pane 的原因。但是,您似乎需要将 ContainerListener 添加到分层 Pane :
getLayeredPane().addContainerListener(new ContainerAdapter()...
关于java - 为什么 setJMenuBar() 不触发 ContainerEvent?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5147854/