Lo veo diferente a la respuesta aceptada.
1) ¿Debo evitar por completo el uso de esos métodos?
¡Nunca lo evites! Están allí para expresar las restricciones de tamaño de sus componentes al administrador de diseño. Puede evitar usarlos si no está usando ningún administrador de diseño e intente administrar el diseño visual por su cuenta.
Desafortunadamente, Swing no viene con dimensiones predeterminadas razonables. Sin embargo, en lugar de establecer las dimensiones de un componente, es mejor que OOP descienda su propio componente con valores predeterminados razonables. (En ese caso, llama a setXXX en su clase descendiente). Alternativamente, puede anular los métodos getXXX para obtener el mismo efecto.
2) Los métodos han sido definidos por una razón. Entonces, ¿cuándo debo usarlos? ¿En que contexto? ¿Para que fines?
Siempre. Cuando cree un componente, establezca su tamaño mínimo / preferido / máximo realista de acuerdo con el uso de ese componente. Por ejemplo, si tiene un JTextField para ingresar símbolos de país como el Reino Unido, su tamaño preferido será tan ancho como para caber dos caracteres (con la fuente actual, etc.) pero probablemente no tenga sentido dejar que crezca más. Después de todo, los símbolos de país son dos caracteres. Por el contrario, si tiene un JTextField para ingresar, por ejemplo, el nombre de un cliente, puede tener un tamaño preferido como el tamaño de píxel para 20 caracteres, pero puede crecer hasta ser más grande si se cambia el tamaño del diseño, así que configure el tamaño máximo en más. Al mismo tiempo, tener un JTextField de 0px de ancho no tiene sentido, así que establezca un tamaño mínimo realista (yo diría que el tamaño de píxel de 2 caracteres).
3) ¿Cuáles son exactamente las consecuencias negativas de usar esos métodos?
(Solo puedo pensar en agregar portabilidad entre sistemas con diferente resolución de pantalla).
Sin consecuencias negativas. Estas son sugerencias para el administrador de diseño.
4) No creo que ningún LayoutManager pueda satisfacer exactamente todas las necesidades de diseño deseadas.
¿Realmente necesito implementar un nuevo LayoutManager para cada pequeña variación en mi diseño?
No, definitivamente no. El enfoque habitual es poner en cascada diferentes gestores de diseño básicos, como el diseño horizontal y vertical.
Por ejemplo, el diseño a continuación:
<pre>
+--------------+--------+
| ###JTABLE### | [Add] |
| ...data... |[Remove]|
| ...data... | |
| ...data... | |
+--------------+--------+
</pre>
tiene dos partes Las partes izquierda y derecha son un diseño horizontal. La parte derecha es un JPanel agregado al diseño horizontal, y este JPanel tiene un diseño vertical que presenta los botones verticalmente.
Por supuesto, esto puede volverse complicado con un diseño de la vida real. Por lo tanto, los administradores de diseño basados en cuadrícula como MigLayout son mucho mejores si está a punto de desarrollar algo serio.
5) Si la respuesta a 4 es "sí", ¿no dará lugar a una proliferación de clases LayoutManager que será difícil de mantener?
No, definitivamente no deberá desarrollar administradores de diseño, a menos que necesite algo muy especial.
6) En una situación en la que necesito definir proporciones ...
entre los hijos de un Componente (p. ej., child1 debería usar el 10% del espacio, child2 40%, child3 50%), ¿es posible lograr eso sin implementar un LayoutManager personalizado?
Básicamente, una vez que los tamaños preferidos se configuran correctamente, es posible que no desee hacer nada en porcentaje. Simplemente, porque los porcentajes no tienen sentido (por ejemplo, no tiene sentido tener un JTextField del 10% del tamaño de la ventana, ya que uno puede reducir la ventana para que JTextField tenga 0px de ancho, o puede expandir la ventana para que JTextField esté en dos pantallas en un configuración de pantallas múltiples).
Pero, muchas veces, puede usar los porcentajes para controlar los tamaños de los bloques de construcción más grandes de su interfaz gráfica de usuario (paneles, por ejemplo).
Puede usar JSplitPane donde puede preestablecer la relación de los dos lados. O bien, puede usar MigLayout, que le permite establecer tales restricciones en porcentaje, píxeles y otras unidades.
JEditorPane
con HTML que no sugiere por sí mismo un ancho. OTOH No estoy seguro si me he perdido algo. Revisaré cuidadosamente las respuestas en el hilo, pero estaba interesado si tenía algún comentario, particularmente sobre el último caso.