Estou vendo de maneira diferente da resposta aceita.
1) Devo evitar completamente o uso desses métodos?
Nunca evite! Eles estão lá para expressar as restrições de tamanho de seus componentes ao gerente de layout. Você pode evitar usá-los se não estiver usando nenhum gerenciador de layout e tentar gerenciar o layout visual por conta própria.
Infelizmente, o Swing não vem com dimensões padrão razoáveis. No entanto, em vez de definir as dimensões de um componente, é melhor OOP descer seu próprio componente com padrões razoáveis. (Nesse caso, você chama setXXX na sua classe descendente.) Como alternativa, você pode substituir os métodos getXXX para o mesmo efeito.
2) Os métodos foram definidos por uma razão. Então, quando devo usá-los? Em que contexto? Para que finalidades?
Sempre. Ao criar um componente, defina seu tamanho mínimo / preferido / máximo realista de acordo com o uso desse componente. Por exemplo, se você possui um JTextField para inserir símbolos de países como o Reino Unido, seu tamanho preferido deve ser tão largo para caber dois caracteres (com a fonte atual etc.), mas provavelmente não faz sentido deixá-lo crescer. Afinal, os símbolos dos países são dois caracteres. Por outro lado, se você tiver um JTextField para inserir, por exemplo, o nome de um cliente, ele pode ter um tamanho preferido, como o tamanho do pixel para 20 caracteres, mas pode aumentar se o layout for redimensionado, então defina o tamanho máximo para mais. Ao mesmo tempo, ter um JTextField de 0px de largura não faz sentido; portanto, defina um tamanho mínimo realista (eu diria que o tamanho de pixel de 2 caracteres).
3) Quais são exatamente as consequências negativas do uso desses métodos?
(Só posso pensar em adicionar portabilidade entre sistemas com resolução de tela diferente).
Sem consequências negativas. Essas são dicas para o gerenciador de layout.
4) Não acho que nenhum LayoutManager possa satisfazer exatamente todas as necessidades de layout desejadas.
Eu realmente preciso implementar um novo LayoutManager para cada pequena variação no meu layout?
Não definitivamente NÃO. A abordagem usual é colocar em cascata diferentes gerenciadores de layout básicos, como layout horizontal e vertical.
Por exemplo, o layout abaixo:
<pre>
+--------------+--------+
| ###JTABLE### | [Add] |
| ...data... |[Remove]|
| ...data... | |
| ...data... | |
+--------------+--------+
</pre>
está tendo duas partes. As partes esquerda e direita são um layout horizontal. A parte direita é um JPanel adicionado ao layout horizontal, e este JPanel está tendo um layout vertical que expõe os botões verticalmente.
Obviamente, isso pode se tornar complicado com um layout da vida real. Portanto, os gerenciadores de layout baseados em grade, como o MigLayout, são muito melhores se você estiver prestes a desenvolver algo sério.
5) Se a resposta a 4 for "sim", isso não levará a uma proliferação de classes LayoutManager que se tornarão difíceis de manter?
Não, você definitivamente não deve desenvolver gerenciadores de layout, a menos que precise de algo muito especial.
6) Em uma situação em que preciso definir proporções ...
entre filhos de um componente (por exemplo, filho1 deve usar 10% do espaço, filho2 40%, filho3 50%), é possível conseguir isso sem implementar um LayoutManager personalizado?
Basicamente, depois que os tamanhos preferidos estiverem definidos, talvez você não queira fazer nada em porcentagem. Simplesmente, porque as porcentagens são inúteis (por exemplo, não faz sentido ter um JTextField 10% do tamanho da janela - pois é possível reduzir a janela para que o JTextField fique com 0 px de largura ou pode expandir a janela para que o JTextField fique entre duas exibições em um configuração de vários monitores).
Mas, às vezes você pode usar as porcentagens para controlar tamanhos de blocos maiores de sua GUI (painéis, por exemplo).
Você pode usar o JSplitPane, onde pode predefinir a proporção dos dois lados. Ou você pode usar o MigLayout, que permite definir essas restrições em porcentagem, pixels e outras unidades.
JEditorPane
com HTML que não sugere uma largura. OTOH Não tenho certeza se perdi alguma coisa. Analisarei cuidadosamente as respostas no tópico, mas fiquei interessado se você tiver algum comentário, principalmente no último caso.