Java Swing侦听子布局更改

Java Swing侦听子布局更改,java,swing,layout,Java,Swing,Layout,我有一个JPanel,当它的布局发生变化时,我需要重新布局父级。这可以通过panel.getParent().validate()轻松完成,但问题是,我并不总是知道它的直接父级,或者树中某个地方的某个父级是否真的是需要验证的父级。是否有一种方法可以让父组件在其子组件重新布局时监听并查看,以便父组件可以中继自己 // this layoutChangedListener is what I'm trying to accomplish child.addLayoutChangedListener(

我有一个JPanel,当它的布局发生变化时,我需要重新布局父级。这可以通过panel.getParent().validate()轻松完成,但问题是,我并不总是知道它的直接父级,或者树中某个地方的某个父级是否真的是需要验证的父级。是否有一种方法可以让父组件在其子组件重新布局时监听并查看,以便父组件可以中继自己

// this layoutChangedListener is what I'm trying to accomplish
child.addLayoutChangedListener(new LayoutChangedListener() {
    public void layoutChanged() {
      parent.validate();
    }
});
编辑:澄清

在我的例子中,父级有一些额外的组件需要在子级更改时中继出去,但情况并非总是这样。同一个子级可以用于另一个父级,而父级不需要中继出去,因此我想让父级决定是否/何时中继出去

// this layoutChangedListener is what I'm trying to accomplish
child.addLayoutChangedListener(new LayoutChangedListener() {
    public void layoutChanged() {
      parent.validate();
    }
});
谢谢


Jeff

您可以
在父类中实现LayoutChangedListener
,初始化子类时,应将父类添加为侦听器。这样,您只需调用validate函数

举个小例子:

class Parent extends JPanel implements LayoutChangedListener {
    //Your class code
    ...
    // The LayoutChangedListener function
    public void layoutChanged() {
        validate();
    }
}
您还必须更改子.addLayoutListener()行。新版本必须如下所示:
child.addLayoutListener(此)

也许这不是最漂亮的方式,但它确实有效


问候

你能举一个简短的例子,说明在没有父母参与的情况下,如何重新安排孩子的活动吗?我不明白。对不起,我的帖子有点不清楚。我知道需要涉及父级,但基本上我希望在子布局更改(或重新显示父级的父级)时重新验证父级。我已经添加了一些示例代码,当我尝试这样做时,这些代码可能有助于清理。谢谢。这不是示例代码,这是一个示例解决方案。演示问题的SSCCE在哪里。如果您不知道SSCCE是什么,那么请在您向子级添加组件侦听器的网络扫描中搜索大小或移动事件?你必须做一些检查以避免陷入循环。嗯……我可以看看有哪些组件事件可用。那可能有用,谢谢。