Как сообщить, что панель изменилась на родительский контейнер? - PullRequest
3 голосов
/ 14 июля 2011

У меня есть панель, изменяемая действием, которое заменяет дочернюю панель на новую панель с другим минимальным размером. Мне нужно сообщить моему JSplitPane, что одна из его дочерних панелей изменилась, чтобы я мог вызвать метод updateToPreferedSize. Есть ли уже событие, которое я должен прослушать? Если нет, как я могу вызвать событие, которое родитель может перехватить, чтобы уведомить об этом?

Ответы [ 2 ]

3 голосов
/ 14 июля 2011

Самым простым способом было бы запустить настраиваемое событие propertyChange на панели, которая заменяет дочерний элемент, так что после того, как он заменяет дочерний элемент, оно запускает событие.Вот хороший пример: http://download.oracle.com/javase/tutorial/javabeans/properties/bound.html

Как только вы это сделаете, JSplitpane может зарегистрировать слушателя и прослушать это свойство, как описано здесь: http://download.oracle.com/javase/tutorial/uiswing/events/propertychangelistener.html

Чтобы подвести итогв панели, которая меняет дочерний объект, вам нужно инициализировать PropertyChangeSupport:

private final PropertyChangeSupport pcs = new PropertyChangeSupport( this );

Затем, когда вы меняете панель:

//All code to swap out the panel goes here
this.pcs.firePropertyChange( "childUpdated", false, true );

А в JSplitPane вам нужно что-токак это:

//...where initialization occurs:
...
amountField.addPropertyChangeListener("childUpdated",
                                      new ChildUpdateListener());
...
class ChildUpdateListener implements PropertyChangeListener {
    public void propertyChanged(PropertyChangeEvent e) {
        updateToPreferedSize();
    }
}
0 голосов
/ 14 июля 2011

Я не уверен, но думаю, что это также должно работать:

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