Pergunta

Estou usando Swing GroupLayout e estou confuso com os valores GroupLayout.DEFAULT_SIZE e GroupLayout.PREFERRED_SIZE.Nunca sei quando usar cada um deles em métodos como GroupLayout.addComponent(Component, int, int, int).

suponha que eu tenha este código:

GroupLayout l = ...;

l.setHorizontalGroup(l.createSequentialGroup()
    .addComponent(tf1)
    .addComponent(tf2));

l.setVerticalGroup(l.createParallelGroup()
    .addComponent(tf1)
    .addComponent(tf2));

há dois JTextFieldestá em uma única linha disposta com GroupLayout (um grupo sequencial horizontalmente e um grupo paralelo verticalmente).se eu redimensionar a janela agora, ambos os componentes obterão o espaço disponível (50% cada).mas quero que apenas o primeiro campo de texto cresça/diminua horizontalmente e apenas o segundo campo de texto cresça/diminua verticalmente.quais valores de min, preferência e máx. devo usar para conseguir isso?Eu sei que posso tentar e ver qual combinação funciona, mas gostaria de saber o raciocínio por trás desse problema.

Foi útil?

Solução

Algumas orientações podem ser encontradas em Como usar o GroupLayout:Tamanho e redimensionamento do componente.A respeito de DEFAULT_SIZE e PREFERRED_SIZE,

Eles podem ser usados ​​como parâmetros no método

 addComponent(Component comp, int min, int pref, int max)

Para forçar o redimensionamento de um componente (permitir diminuir e aumentar):

 group.addComponent(component, 0, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)

Isso permite que o componente seja redimensionado entre tamanho zero (mínimo) e qualquer tamanho (Short.MAX_VALUE já que tamanho máximo significa "infinito").Se quiséssemos que o componente não diminuísse abaixo do tamanho mínimo padrão, usaríamos GroupLayout.DEFAULT_SIZE em vez de 0 no segundo parâmetro.

Para tornar um componente de tamanho fixo (suprimir o redimensionamento):

 group.addComponent(component, GroupLayout.PREFERRED_SIZE,
     GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)...

Curiosamente, os valores constantes são negativos, portanto não podem ser confundidos com restrições reais.

Outras dicas

Eu também estava confuso sobre como GroupLayout.DEFAULT_SIZE e GroupLayout.PREFERRED_SIZE são usados ​​em GroupLayout.SequentialGroup.addComponent(Component c, int min, int pref, int max), mesmo depois de consultar a seção GroupLayout dos Tutoriais Java e um artigo java.net intitulado Conhecendo o GroupLayout, parte 1.

Mergulhando no JDK 1.6.0_27 GroupLayout.javasource, encontrei as respostas na classe ComponentSpring.A partir disso consegui elaborar estas regras:

Se for necessário um tamanho mínimo:

  1. e o fornecido min o valor não for negativo, esse valor será retornado.
  2. senão se for PREFERRED_SIZE, seguimos as regras de tamanho preferido.
  3. caso contrário, o tamanho mínimo do componente será retornado.

Se um tamanho preferido for necessário:

  1. e o fornecido pref o valor não for negativo, esse valor será retornado.
  2. senão se for DEFAULT_SIZE ou PREFERRED_SIZE, retorne o tamanho preferido do componente.

Se for necessário um tamanho máximo:

  1. e o fornecido max o valor não for negativo, esse valor será retornado.
  2. senão se for PREFERRED_SIZE, seguimos as regras de tamanho preferido.
  3. caso contrário, o tamanho máximo do componente será retornado.

Como trashgod já observou, as definições são negativas.Qualquer outro valor negativo para min, pref e max além DEFAULT_SIZE ou PREFERRED_SIZE são erros e afirmações de acerto.

A interação entre o SequentialGroup.addComponent Os tamanhos min, pref e max não ficaram imediatamente aparentes para mim no tutorial.Agora eu sei por que PREFERRED_SIZE,DEFAULT_SIZE,PREFERRED_SIZE é fixo, por que não importa se o argumento do meio é DEFAULT_SIZE ou PREFERRED_SIZE e como o NetBeans gerou valores de tamanho fixo como DEFAULT_SIZE,300,Short.MAX_VALUE trabalhar.

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