Как заставить перерисовать / изменить макет в Ext GWT (GXT)? - PullRequest
5 голосов
/ 24 января 2011

В GXT у меня есть элемент управления с важной панелью, добавленной к нижнему компоненту, в основном так:

public class SamplePanel extends ContentPanel {

ContentPanel panel = new ContentPanel();    

public SamplePanel() {
    setBottomComponent(panel);
}

public void setVisible(boolean isVisible) {
    panel.setVisible(isVisible);
}

Панель устанавливается как «нижний компонент», потому что она должна оставаться в нижней части виджета и быть доступной для просмотра в любое время.

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

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

Есть ли способ программно заставить перерисовать / перекрасить / изменить макет ... что-нибудь, чтобы нижний компонент изменился, чтобы отразить новый размер его содержимого?

Я пробовал все это, и они не работают:

public void setVisibility(boolean isVisible) {
        panel.setVisible(isVisible);
        doLayout(true);
        recalculate();
        repaint();
    }

Спасибо

Ответы [ 5 ]

8 голосов
/ 05 апреля 2012

В последнем gxt вы можете сделать.

this.layout(true);

В противном случае вы можете запустить событие Events.Resize.

1 голос
/ 11 апреля 2012

Вы пытались использовать setLayoutOnChange() метод ConentPanel?

1 голос
/ 25 января 2011

Я не знаю о GXT, но в GWT я бы использовал один из методов force() или forceLayout() на моей панели. Возможно, есть похожий API для этого!

НТН.

0 голосов
/ 18 апреля 2011

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

Попробуйте найти размеры от родителя и вызвать onResize (ширина, высота)

0 голосов
/ 28 января 2011

Я бы предложил посмотреть на это: http://davidmaddison.blogspot.com/2008/12/gwt-rendering-process.html

То, что вы можете попытаться сделать, это добавить addListeners в Panel и попытаться вызвать там panel.layout ()

...