Pergunta

Eu gostaria de um painel no GWT para preencher a página sem ter que realmente definir o tamanho. Existe uma maneira de fazer isso? Atualmente tenho o seguinte:

public class Main  implements EntryPoint
{
    public void onModuleLoad()
    {
        HorizontalSplitPanel split = new HorizontalSplitPanel();
        //split.setSize("250px", "500px");
        split.setSplitPosition("30%");

        DecoratorPanel dp = new DecoratorPanel();
        dp.setWidget(split);

        RootPanel.get().add(dp);
    }

}

Com o trecho de código anterior, nada aparece. Existe uma chamada de método que eu estou ausente?

Graças.


ACTUALIZAÇÃO 17 set '08 às 20:15

Eu coloquei alguns botões (explicitamente definiu seu tamanho) de cada lado e que ainda não funciona. Eu estou realmente surpreso que não é como uma classe FillLayout ou um método setFillLayout ou setDockStyle (DockStyle.Fill) ou algo parecido. Talvez não seja possível? Mas para tão popular como GWT é, eu acho que seria possível.

ACTUALIZAÇÃO 18 de setembro 08 em 14:38

Eu tentei definindo as RootPanel largura e altura para 100% e que ainda não funcionou. Obrigado pela sugestão, porém, que parecia que talvez estava indo para o trabalho. Qualquer outra sugestão ??

Foi útil?

Solução

O Google respondeu à parte principal da sua pergunta em um de seus FAQs: http://code.google.com/webtoolkit/doc/1.6/ FAQ_UI.html # How_do_I_create_an_app_that_fills_the_page_vertically_when_the_b

O ponto principal é que você não pode definir a altura para 100%, você deve fazer algo como isto:

final VerticalPanel vp = new VerticalPanel();
vp.add(mainPanel);
vp.setWidth("100%");
vp.setHeight(Window.getClientHeight() + "px");
Window.addResizeHandler(new ResizeHandler() {

  public void onResize(ResizeEvent event) {
    int height = event.getHeight();
    vp.setHeight(height + "px");
  }
});
RootPanel.get().add(vp);

Outras dicas

A resposta de Ben é muito bom, mas também está fora de data. Um manipulador de redimensionamento foi necessária em GWT 1.6, mas estamos em 2,4 agora. Você pode usar um DockLayoutPanel ter seu conteúdo preencher a página verticalmente. Veja a amostra correio aplicativo, que usa este painel.

Eu acho que você vai precisar para colocar algo à esquerda e / ou direita do split (split.setLeftWidget (widget), split.setRightWidget (widget) OR split.add (widget), que irá adicionar primeiro ao esquerda, depois para a direita) para que qualquer coisa para aparecer.

Tente configurar a largura e / ou altura dos RootPanel a 100% antes de adicionar o seu widget.

Painéis redimensionar automaticamente para o menor largura visível. Portanto, você deve redimensionar cada painel que você adicionar aos RootPanel a 100%, incluindo o seu SplitPanel. Os RootPanel em si não precisa redimensionar. Portanto, tente:

split.setWidth("100%");
split.setHeight("100%");

A documentação para DecoratorPanel diz:

Se você definir a largura ou altura da DecoratorPanel, você precisa definir a altura e largura da célula middleCenter a 100% para que a célula middleCenter ocupa todo o espaço disponível. Se você não definir a largura e altura do DecoratorPanel, ele vai quebrar o seu conteúdo com força.

O problema é que a célula DecoratorPanel middleCenter vai encher apertado em seus conteúdos como padrão, e não SplitPanel não permite "100%" definição do tamanho do estilo. Para fazer o que quiser, definir o estilo da tabela de forma adequada, no seu CSS:

.gwt-DecoratorPanel .middleCenter { altura: 100%; largura: 100%; }

Para mim não funciona se eu apenas definir a largura como

panel.setWidth ( "100%");

O painel é um VerticalPanel que ele só tem um tamanho aleatoriamente que eu não sei de onde vem. Mas o que @ Ben Bederson comentou funcionou muito bem para mim depois de eu adicionei a linha:

panel.setWidth (Window.getClientWidth () + "px");

Apenas isso, nada mais. Graças

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top