Pergunta

Eu tenho que construir uma forma bastante grande, com muitos controles. Os controles são divididos em básicas controles / ajustes e estendidos controles / ajustes. O usuário pode decidir se ele quer ver apenas o básico ou ambos os controles básicos e estendidos.

Eu deixei cair todos os controles estendidos em seus próprios JPanel para que eu possa alternar facilmente entre os dois pontos de vista, mostrando ou escondendo neste painel.

Atualmente estou usando GroupLayout eo que acontece é que os controles em diferentes painéis não estão alinhados:

Label aaa:     Text field
Label a:       Text field
Label aaaaaa:  Text field
----------------------------
Label b:    Text field
Label bbb:  Text field
Label bb:   Text field

Infelizmente eu agora encontrado forma de "sincronizar" os esquemas dos dois painéis (excepto usando AbsoluteLayout e coordenadas de controlo fixos)

  • Existe alguma maneira de obter este?
  • É todo meu projeto falho?

EDIT:. Se for possível, eu gostaria de manter o gerente GroupLayout

Foi útil?

Solução

Tanto quanto eu sei, não Balanço LayoutManager (do JRE ou open source) pode se estender por vários painéis.

Atualmente, estou trabalhando em tal característica um (o que eu chamada "sincronização layouts") para o meu DesignGridLayout projeto, mas não é algo fácil de implementos (eu comecei a cerca de 2 semanas atrás e eu ainda não ver exatamente se e quando eu vou conseguir algo interessante, mas ainda tenho alta esperança para ele ;-))

Uma opção que você poderia verificar seria adicionar todos os componentes para o mesmo painel (com apenas um GroupLayout então) e se esconder / mostrar-lhes com base na seleção do usuário. Felizmente, GroupLayout vai adaptar o tamanho à situação (depois de chamar pack ()).

Se GroupLayout se comporta bem, então seria apenas uma questão de chamar pack () cada vez que depois que o usuário muda a sua selecção para exibir / ocultar estendido campos.

Else você teria que definir manualmente o tamanho do seu painel de cada vez que o usuário muda a sua selecção.

Outras dicas

Provavelmente o (bom) maneira mais fácil de fazer isso é adicionar todos os componentes ao painel principal. Defina os subpainéis para não-opaco, e adicione o também para o painel principal. O painel principal as necessidades optimizada desenhando a ser desligado.

Outra técnica é a de adicionar um componente espaçador. Para o painel de fundo adicionar um componente na mesma coluna que as etiquetas que leva dinamicamente o componente largura dos seus vários métodos de tamanho das etiquetas superiores. Faça o mesmo em sentido inverso ao painel de topo.

Eu acho que não há nenhuma maneira de fazê-lo com os gerenciadores de layout padrão. Você provavelmente terá que escrever o seu próprio gerenciador de layout, mas não deve ser muito difícil se você subclasse GroupLayout.

Você pode usar GridLayout vez de GroupLayout que lhe dará o espaçamento uniforme entre as colunas

Se você quiser mantê-los em painéis separados com layouts diferentes:

iterar sobre todos os rótulos que você adiciona, e encontrar a largura máxima preferida de cada um. Itera uma segunda vez, e definir o tamanho preferido para que a altura preferida de cada etiqueta, mas a largura máxima.

Esta é a explicação de th GridLayout . Isto irá definir todos os componentes para o tamanho, você espera que ele. Com o objeto gridData você pode especificar como os componentes são ordere.

Exemplos

text alt
(fonte: sun.com )

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