Swing слушает изменения дочернего макета - PullRequest
1 голос
/ 22 сентября 2009

У меня есть JPanel, и когда его макет меняется, мне нужно изменить макет родителя. Это легко сделать с помощью panel.getParent (). Validate (), но проблема в том, что я не всегда знаю, действительно ли его родительский элемент или какой-то родительский элемент где-то в дереве действительно нуждается в проверке. Есть ли способ для родительского компонента прослушивать, чтобы увидеть, когда его дочерний компонент перекомпонован, чтобы родительский компонент мог затем ретранслировать себя сам.

редактировать: уточнение

В моем случае у родителя есть некоторые дополнительные компоненты, которые необходимо ретранслировать при изменении потомка, но это не всегда так. Тот же самый дочерний элемент может использоваться другим родителем, где родительский элемент не должен быть ретранслирован, поэтому я хочу позволить родителю решить, следует ли / когда он должен самому ретранслироваться.

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

спасибо,

Джеф

1 Ответ

0 голосов
/ 27 июля 2011

Вы можете implements LayoutChangedListener в своем родительском классе, и когда вы инициализируете ребенка, вы должны добавить родителя как слушателя. Таким образом, вы должны только вызвать функцию проверки.

Небольшой пример:

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

Вы также должны изменить the child.addLayoutListener() строку. Новый должен быть следующим: child.addLayoutListener(this)

Возможно, это не самый красивый способ, но он работает!

Привет! * * 1013

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...