Una gran diferencia es cómo el valor puede cambiar con el tiempo, por lo que el que elija debe depender de lo que quiere hacer con el código.
Si simplemente llama al setPreferredSize(new Dimension(500, 500));
en su código, hará lo que espera: establece el tamaño preferido a 500x500. Sin embargo, otro código en su aplicación puede sobrescribir este valor con uno nuevo, cualquier cosa puede llamar al setPreferredSize()
y la última llamada a este método será el resultado final.
Sin embargo, si reemplaza el método getPreferredSize()
en su código, será siempre devolverá 500x500. No importa si alguno de sus códigos llama al método setPreferredSize()
, porque se ignoran de manera efectiva. Si también reemplaza getMinimumSize()
y getMaximumSize()
, puede forzar un tamaño fijo en un componente que no debería cambiar independientemente del tamaño de la ventana y los demás componentes.
Sin embargo, como menciona @Andrew Thompson en los comentarios, esto no está garantizado ya que algunos administradores de diseño pueden elegir ignorarlos, especialmente si está escribiendo su propio administrador de diseño y agregar un componente personalizado a algunos padres los contenedores también ignorarán estos métodos, dependiendo de dónde/cómo se usa el componente. A pesar de todo, es aún más rígido que llamar al setPreferredSize()
, que puede ser llamado fácilmente por otro código y se sobrescribe por completo.
también puedo reemplazar el método getPreferredSize()
(más getMinimumSize()
y getMaximumSize()
) para cualquiera de mis componentes personalizados, tales como un selector de color que necesite disponer de dimensiones específicas para el componente a pintar correctamente. Sin anular estos métodos, los administradores de diseño de Swing no entienden cómo su componente personalizado puede ser posicionado y dimensionado apropiadamente para el tamaño de JFrame
o JPanel
.
[algunas reglas] (http://stackoverflow.com/questions/7229226/should-i-avoid-the-use-of-setpreferredmaximumminimumsize-methods-in-java-swi) – mKorbel
Gracias por el enlace. Aunque es un poco extraño que en un artículo mencionado en la respuesta superior diga "nunca uses este método [setPreferredSize] !!!" porque nunca tuve ningún problema con eso. Pero, nuevamente, nunca escribí UI realmente grandes/complejas. – IchBinKeinBaum
esto es acerca de la programación de alto nivel :-), pero regañar consejos sobre cómo evitar errores, nadie habla allí que usar LayoutManager es un trabajo fácil, requiere a) aprender e intentar, b) hacer algunas preguntas – mKorbel