Creo que agregar un elemento a un
JFrame es algo que nos va a tocas que hacer siempre y el concepto es similar para un JPanel, JWindow y JDialog.
Y como siempre lo e dicho hay personas que somos un poco desesperados :D así que acá va el código en general y luego doy -en este mismo post- una explicación un poco más detallada:
import javax.swing.JFrame;
import javax.swing.JButton;
public class Ventana extends JFrame {
public static void main( String []arg ){
new Ventana();
}
public Ventana(){
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(400,400);
//Esto permite que la ventana aparezca al centro
this.setLocationRelativeTo(null);
//
//Para que el JFrame no tenga ningún formato
//se coloca el Layout del JFrame en null
//no hay que olvidarse de colocarle tamaño y posición
//a los elementos que se agregan
this.setLayout(null);
//
JButton boton = new JButton();
boton.setText("¡Presioname!");
//Colocamos la posición y el tamaño
boton.setBounds(135,150,130,50);
//Esto se útiliza para agregar el botón al JFrame
add(boton);
this.setVisible(true);
}
}
El resultado es el siguiente:
Para agregar un elemento lo único que se debe hacer es útilizar el método
add que tiene el
JFrame.
Por ejemplo:
JFrame frame = new JFrame();
//Esto es necesario sino quieres Layout -formato-
frame.setLayout(null);
JLabel label = new JLabel("Etiqueta");
label.setBounds(10,10,100,75);
frame.add(label)
Al JFrame le puedes agrega Paneles, Botones, Etiquetas, Tablas etc.
Nota: Siempre coloca un tamaño al objeto que quieres agregar, si te preguntas porque es que no muestrá el objeto, es porque no le has dado un tamaño al objeto que quieres agregar.
En este caso útilizo
setBounds para dar la
posición y tamaño. Puedes también hacerlo con
setLocation para indicar la posición y con
setSize le indicas el tamaño.
JFrame frame = new JFrame();
//Esto es necesario sino quieres Layout -formato-
frame.setLayout(null);
JLabel label = new JLabel("Etiqueta");
label.setLocation(10,10);
label.setSize(100,75);
frame.add(label)
Pero más que decirte que lo agregas hay una cosa que necesitas saber y es que un
JFrame utiliza algo que se llaman
Layout y hay Layouts que pueden ser tan simples y otros complejos. Ahora un Layout es como un formato para definirlo en pocas palabras, y lo que se pretende es darnos una ayudadita al hora de agregar elementos. Creo que esto se entenderá un poco mejor colocando como ejemplo el siguiente Layout
BorderLayout -es el que más e usado- tiene un formato como el siguiente:
Este es el
Layout que tiene por defecto un
JFrame. La característica que tiene este Layout es que cuando se agrega un objeto automaticamente toma un tamaño aunque nosotros le hayamos asignado un tamaño, el tamaño que toma variará al tamaño del JFrame.
Por ejemplo si a un
JFrame le agrego únicamento un botón entonces el botón tendría el tamaño del JFrame -me imagino que esto ya te a pasado, a mí también me paso :D-. Si hay más objetos entonces variará el tamaño, como en el ejemplo que muestra la imagen. La otra característica es que divide al JFrame en 5 partes, Arriba -PAGE_START-, Abajo -PAGE_END-, Izquierda -LINE_START-, Derecha -LINE_END- y Centro -CENTER-.
Por ejemplo si quires agregar una etiqueta al centro lo debes hacer de la siguiente manera:
JFrame frame = new JFrame();
//Esto es necesario sino quieres Layout -formato-
frame.setLayout(null);
JLabel label = new JLabel("Etiqueta");
label.setBounds(10,10,100,75);
//Se coloca BorderLayout.CENTER para indicar
//que se debe colocará al centro
frame.add(label, BorderLayout.CENTER);
Si quisieras agregalo a:
- La derecha: frame.add(label, BorderLayout.LINE_END);
- La izquierda: frame.add(label, BorderLayout.LINE_START);
- Arriba: frame.add(label, BorderLayout.PAGE_START);
- Abajo: frame.add(label, BorderLayout.PAGE_END);
- Centro: frame.add(label, BorderLayout.CENTER);
Hay varios tipos de
Layout así que colocaré el nombre y una imagen. Las imagenes son tomadas de la página oficial y les dejo el link donde explican como usar cada uno de ellos
http://docs.oracle.com/javase/tutorial/uiswing/layout/index.html.
BoxLayout
CardLayout
FlowLayout