我有一个JPanel,当其布局更改时,我需要重新布局父级。这可以使用panel.getParent()。validate()轻松完成,但是问题是,我并不总是知道它的直接父级,还是树中某个位置的某些父级确实是需要验证的父级。父组件是否可以侦听以查看其子组件何时重新布置,以便父组件可以自行中继。

编辑:澄清

在我的情况下,父级有一些额外的组件,当子级更改时,这些组件需要中继出去,但这并非总是如此。相同的孩子可以用在另一个不需要重新父项的父项上,因此我想让父项决定是否/何时应该将其自身转发出去。

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


谢谢,

杰夫

最佳答案

您可以在父类中使用implements LayoutChangedListener,并且在初始化子级时,应将父级添加为侦听器。这样,您仅需调用validate函数。

一个小例子:

class Parent extends JPanel implements LayoutChangedListener {
    //Your class code
    ...
    // The LayoutChangedListener function
    public void layoutChanged() {
        validate();
    }
}


您还必须更改the child.addLayoutListener()行。新的必须如下:
child.addLayoutListener(this)

可能这不是最漂亮的方法,但是可以!

问候!

10-04 17:55