Pergunta

No meu aplicativo da GUI, tenho vários JPanels que são instanciados em vários pontos durante a execução do meu programa, e certas ações farão com que um deles seja exibido em um painel de rolagem:

mViewport.setViewportView(currentPanel);

O problema é que meus painéis são feitos usando layouts de bolsa de grade, e o comportamento disso é centralizar -se dentro do JScrollPane de onde está dentro. Isso faz a GUI parecer estranha.

Alguém conhece uma maneira de forçar um painel de layout da bolsa de grade ao alinhamento superior à esquerda?

Obrigado!


EDITAR

Observe que aqui estou perguntando sobre o alinhamento de todo o painel em seu painel de rolagem, não sobre os componentes do painel.

Foi útil?

Solução 2

Encontrei uma solução para minha própria pergunta depois de algumas brincadeiras:

A definição de pesos parece ser capaz de afetar o alinhamento dos componentes dentro do JPanel para o qual o GridBagLayout foi usado. No entanto, não teve efeito sobre o alinhamento do JPanel dentro do JScrollPane.

Eu encontrei uma solução bastante simples, que é para não coloque o JPanel diretamente dentro do JScrollPane, como eu estava fazendo com meu código anterior:

if (currentPanel != mCurrentPanel)
{
    mViewport.setViewportView(currentPanel);
}

... mas em vez de colocar um "exterior" JPanel dentro de JScrollPane, e defina isso para usar um FlowLayout. Então, quando quero trocar de painéis, removo o antigo e coloco o painel dentro do painel "externo".

if (currentPanel != mCurrentPanel)
{
    if (mCurrentPanel != null)
    {
        mOuterPanel.remove(mCurrentPanel);
    }
    mCurrentPanel = currentPanel;
    mOuterPanel.add(mCurrentPanel);
}

Essa abordagem funcionou muito bem, porque significava que eu só tinha que efetuar mudanças em uma classe, em vez de cada um dos muitos painéis que eu tinha.

Outras dicas

Você precisará definir os pesos (no GridBagConstraints) em um ou mais dos componentes dentro do seu painel. Isso tem o efeito de "empurrar" os componentes para ocupar mais espaço disponível (sem pesos, os componentes apenas aceitarão o que precisam e o painel será centrado no espaço disponível).

Se você deseja alinhar os componentes no canto superior esquerdo do painel de rolagem, defina o peso Y do componente inferior para 1.0 e defina o peso x mais à direita do componente para 1.0.

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