Какие методы автоматически вызываются при свертывании или развертывании раздела в SWT?

Когда раздел свернут, размер составного контейнера (родительского) этого раздела автоматически уменьшается, чтобы соответствовать размеру свернутого раздела. Поэтому я предполагаю, что такой метод, как layout() (кажется, это не этот метод), называется default (автоматически) для этого контейнера, когда раздел свернут. Я хочу точно знать этот метод. Потому что я хочу, чтобы произошло то же самое, когда я удалил (удалил) раздел. Я хочу уменьшить размер этого контейнерного композита при удалении этого раздела.

1 ответ

Решение

org.eclipse.ui.forms.widgets.Section является частью Eclipse Forms API и может некорректно использоваться вне этого контекста.

Когда раздел развернут / свернут Section.reflow называется, это по сути называет Composite.layout(true) на каждом родительском Composite до первого экземпляра SharedScrolledComposite (так что если вы не используете SharedScrolledComposite это может не работать должным образом). Когда SharedScrolledComposite найдено это вызывает SharedScrolledComposite.reflow(true),

Настоящий reflow код:

protected void reflow() {
    Composite c = this;
    while (c != null) {
        c.setRedraw(false);
        c = c.getParent();
        if (c instanceof SharedScrolledComposite || c instanceof Shell) {
            break;
        }
    }
    c = this;
    while (c != null) {
        c.layout(true);
        c = c.getParent();
        if (c instanceof SharedScrolledComposite) {
            ((SharedScrolledComposite) c).reflow(true);
            break;
        }
    }
    c = this;
    while (c != null) {
        c.setRedraw(true);
        c = c.getParent();
        if (c instanceof SharedScrolledComposite || c instanceof Shell) {
            break;
        }
    }
}

Призывы к setRedraw просто перестать мерцать.

Другие вопросы по тегам