Swing侦听子布局的变化

时间:2009-09-22 17:30:58

标签: java swing layout

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

编辑:澄清

在我的情况下,父母有一些额外的组件需要在孩子改变时被转发,但情况并非总是如此。同一个孩子可以在父母不需要被转发的另一个父母身上使用,所以我想让父母决定是否/什么时候应该将自己转发出去。

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

感谢,

杰夫

1 个答案:

答案 0 :(得分:0)

您可以在父类中implements LayoutChangedListener,初始化子项时,应将父项添加为侦听器。这样你只需要调用验证函数。

一个小例子:

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

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

这可能不是最漂亮的方式,但它有效!

问候!