getContentpane().add() vs add()

Cuando utilicemos la clase JFrame uno de los componentes (objetos) que añadiremos a este elemento contenedor es un panel perteneciente a la clase JPanel. Este último se comportará como una capa que se encuentra por encima del objeto de la clase JFrame. Es encima de este panel donde añadiremos los demás objetos como botones, etiquetas y cuadros de texto, etc.

El símil de un panel, sea JPanel sea el panel por defecto de JFrame (el objeto contentPane), lo podemos ver en un móvil recién comprado. ¿Qué medida adoptamos con la pantalla de dicho dicho móvil? Acoplarle un protector de pantalla con el fin de evitar posibles rayazos, rozaduras o roturas.

A continuación explicaremos la utilización de método add() por defecto, es decir, sin uso de la clase JPanel.

Marcos y panel por defecto (JFrame y contentPane)

Para añadir componentes a un JFrame tenemos dos sentencias posibles:

  1. getContentPane().add(componente);
  2. add(componente);

Antes de continuar debemos considerar dos características importantes de los marcos de la clase JFrame:

  • JFrame, independientemente de que utilicemos JPanel, ya cuenta con una capa por defecto. El método getContentPane() de una instancia a JFrame nos devuelve este panel.
    getcontentpane.add() vs add()
  • add() y getContentPane().add() realizan, por defecto, la misma acción:
    
    JButton boton=new JButton("CANCELAR");
    JFrame marco=new JFrame("Pruebas de JFrame");
    marco.add(boton);// Esta opción es lo mismo que la instrucción siguiente
    //marco.getContentPane().add(boton);//La mejor opción
    

La razón de que add() y getContentPane().add() realicen los mismo es debido a que add() de forma automática "se redirige" a método getContentPane().add() capturando el objeto contentPane del frame.

Para ilustrar con más claridad lo dicho con anterioridad mostraremos otro ejemplo. Observa el siguiente código:


JFrame marco=new JFrame("Pruebas de JFrame");
//damos color de fondo al JFrame, como observamos azul
marco.setBackground(Color.BLUE);
//le otorgo transparencia al panel por defecto que se encuentra por encima
marco.getContentPane().setBackground(new Color(255,255,255,1));
//damos altura y posicionamos JFrame
marco.setBounds(400, 400, 200, 200);
//garantizamos que el JFrame se pueda cerrar
marco.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//lo mostramos
marco.setVisible(true);

En el código superior observamos que con el método setBackground puedo dar formato al fondo tanto del propio objeto marco de la clase JFrame (marco.setBackground(Color.BLUE);) como a su panel por defecto, contentPane, mediante la instrucción marco.getContentPane().setBackground(new Color(255,255,255,1));

Debido a que he pintado el panel (contentPane) en color transparente puedo ver el color de fondo (azul) del marco JFrame.

En conclusión cuando se utiliza una instrucción add() indirectamente manejamos el método getContentPane().add() que hace referencia al panel por defecto. Desde un punto de vista estricto es más exacto utilizar esta última instrucción.

By Xurxo González Tenreiro

Informático de mente inquieta con grandes ideas en el ámbito de la progamación. Especialista en el desarrollo web e interesado en el análisis SEO. Me encanta mi labor en el ámbito de la divulgación por lo cual he ampliado mis horizontes al ámbito de la educación y formación en el desarrollo de aplicaciones web. También como gestor de contenidos web soy muy puntilloso con la divulgación y la elaboración de publicaciones en la red.

Leave a Reply

Your email address will not be published. Required fields are marked *


The reCAPTCHA verification period has expired. Please reload the page.

This site uses Akismet to reduce spam. Learn how your comment data is processed.