2012-06-02 15 views
14

He leído algunas críticas aquí y empecé por qué algunas personas hacenUso de anular getPreferredSize() en lugar de utilizar setPreferredSize() para los componentes de tamaño fijo

@Override 
public Dimension getPreferredSize() { 
    return new Dimension(500, 500); 
} 

en lugar de

setPreferredSize(new Dimension(500, 500)); 

No se tiene en el segundo mejor porque crea solo un objeto Dimension mientras que el primero posiblemente crea varios (incluso si no se trata de una memoria desperdiciada). ¿O estoy equivocado? ¿Hay alguna diferencia?

+5

[algunas reglas] (http://stackoverflow.com/questions/7229226/should-i-avoid-the-use-of-setpreferredmaximumminimumsize-methods-in-java-swi) – mKorbel

+0

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

+0

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

Respuesta

14

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.

+0

Gracias @AndrewThompson, sí eso es verdad. He intentado cambiar mi respuesta para reflejar esto mejor. Mi intención era que sea una forma más rígida de establecer un tamaño de componentes, pero no está necesariamente garantizada. – wattostudios

+0

Buena edición. Ruido eliminado +1 –

+0

Gracias por aclarar eso. – IchBinKeinBaum

Cuestiones relacionadas