Cuando supe la creación de la GUI de Java: s en mi primer curso de Java, me enseñaron a crear mis ventanas como JFrame
casos, y luego añadir un JPanel
a cada JFrame
y finalmente añadir todos los componentes GUI a la JPanel
:¿Debo agregar componentes a un JFrame o a su panel de contenido?
class Example extends JFrame {
Example() {
JPanel panel = new JPanel();
this.add(panel);
// Create components here and add them to panel
// Perhaps also change the layoutmanager of panel
this.pack();
this.setVisibility(true);
}
public static void main(String[] args) {
new Example();
}
}
Siempre pensé "bueno, esto huele un poco, no me gusta crear un objeto extra solo para ser un contenedor", pero no conocía otra forma de hacerlo, así que seguí con eso. Hasta hace poco, cuando me tropecé con este "patrón":
class AnotherExample extends JFrame {
AnotherExample() {
Container pane = this.getContentPane();
// Add components to and change layout of pane instead
this.pack();
this.setVisibility(true);
}
public static void main(String[] args) {
new AnotherExample();
}
}
Aún siendo bastante nuevo en Java, me siento mejor sobre el segundo enfoque sólo porque no implica la creación de un JPanel
sólo para envolver los otros componentes. Pero, ¿cuáles son las diferencias reales entre los enfoques, excepto por eso? ¿Alguno de ellos tiene grandes beneficios sobre el otro?
Lea este tutorial para obtener más información: http://docs.oracle.com/javase/tutorial/uiswing/components/toplevel.html –
¡Gran tutorial! Recomiendo a cualquiera que encuentre esta pregunta que la lea. –
no importa (ambos son malos, no hay necesidad de hacerlo, simplemente agregue al marco) - el olor real es _experimenta JFrame_: la regla de OO es extenderse solo si hay un sonido: una relación (vs. el mero uso, como es el caso en el 99.99% en todas las aplicaciones de interfaz gráfica de usuario) – kleopatra