Por que é desaprovado usar um layout nulo no Swing?

Recentemente, comecei a criar um programa para a empresa em que trabalho. Assim como informação de fundo, eu ainda sou um estudante e um programador iniciante, então minha solução provavelmente não é recomendada e eu não sei como fazer isso de outra forma, mas funciona e eu não serei julgado por isso porque é um trabalho de estudante totalmente não relacionado à programação.

A coisa sobre o programa é, ele vai ser executado em vários computadores diferentes com diferentes tamanhos de canvas e resoluções (800×600 e acima). Para garantir que ele tire o máximo possível da canvas sem perder nenhuma parte do programa, defino o layout como null e codifiquei tudo usando valores relativos.

O programa é em estilo de quiosque e eu primeiro obtenho os valores de tamanho de canvas e de lá (por exemplo, fora do topo da minha cabeça, o menu do lado esquerdo ocupa um oitavo da canvas, a barra superior 2%, etc.) . Também uso métricas de fonts para garantir que os componentes sejam dimensionados corretamente e que tudo seja exibido corretamente.

Minha pergunta é: por que é tão desaprovado tornar o layout nulo ao invés de usar os gerenciadores de layout? (Foi-me dito em alguns fóruns que esta é uma maneira horrível de fazer as coisas) Eu sei como funciona o gerenciador de layout e saber como usar os diferentes layouts, mas para os requisitos deste programa (várias resoluções diferentes, formatos de botão personalizados e posicionamentos , texto mudando nos componentes quando você muda de idioma, etc.), eu não conseguia me ver usando os gerenciadores de layout para fazer tudo.

Como vocês, programadores mais experientes, usam os gerenciadores de layout em uma situação como essa? E o que você faz quando quer que um botão seja específico e outros componentes em algum outro lugar específico que não combinam com nenhum dos layouts predefinidos?

Se você colocar os gerenciadores de layout corretamente, a canvas voltará a fluir para tamanhos diferentes para você. A ideia é usar um único conjunto de gerenciadores de layout em TODOS os tamanhos de canvas.

Se você usar null, você terá que fazer cada tamanho de canvas sozinho. Não só isso, mas se o aplicativo pode ser em janelas você tem que suportar todos os tamanhos possíveis, eles podem rolar para.

Isso é meio difícil de fazer, mas os gerenciadores de layout são projetados para fazer exatamente isso.

Existem alguns truques comuns. O BorderLayout é um ótimo layout para começar. Às vezes você pode usá-lo em vários níveis – geralmente com apenas 2 ou 3 componentes. Isso é porque é muito bom dar a todos, exceto uma área, a área mínima requerida e dar tudo o mais para o CENTRO.

O FlowLayout pode ser útil, mas é complicado se os seus componentes tiverem tamanhos diferentes.

Eu não tentaria GridBagLayout a menos que você esteja planejando escrever código para alimentar seu gerenciador de layout (uma solução excelente para isso!).

Eu também não usaria construtores GUI, eles não sabem o caminho geral que você quer para refluir seu layout.

Em suma: porque todo o trabalho que você explica acima é feito (ou pelo menos: deve ser feito) pelo gerenciador de layout.

Mais frequentemente do que não, quando um layout nulo é usado, ele também implica que todas as posições e tamanhos são codificados para um único valor, portanto nenhuma flexibilidade é dada. Isso significa que as alterações no tamanho da janela, no idioma, no tamanho da fonte, na densidade de exibição ou em qualquer outro parâmetro relacionado não afetam o layout e você obtém os efeitos mais comuns: partes vazias da janela; listas minúsculas e não atualizáveis; botões com suas etiquetas cortadas; …

Parece que o trabalho que você faz realmente deve ser feito pelo gerenciador de layout. Ou encontre um que faça isso (minha sugestão pessoal seria o MiGLayout , que faz muito e é fácil de usar) ou escreva o seu próprio.

Você está praticamente usando um layout – o seu próprio, com todos os seus sofisticados cálculos de posições.

Você pode mover essa lógica para uma class de gerenciador de layout personalizada para pacificar as críticas.

Hmmm truque deve ser misturando LayoutMangers e pelo uso de números de JPanels nesteds que cada um poderia ter Layout diferente ou não, realmente depende do número de JComponents , que permite criar GUI que se parece com o layed usando AbsoluteLayout mas com a mesma aparência / saída para a GUI para cada resolução de canvas e relação (4: 3, 16: 9, 16:10)