Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Swing JFrames
Swing JFrames
Java Intermedio
La clase Frame agrega a la clase Window el marco, la lnea de ttulo y los botones La clase JFrame agrega a Frame el panel de contenido
2 www.yhavhe.com/Cursos 06/06/2012
Desplegando informacin
Todos los objetos grficos en una aplicacin Java forman una jerarqua en donde la mayor jerarqua est un JFrame, un JDialog, o un JApplet. Ahora veremos la estructura de los JFrame. Ejemplo:
Frame Menu Bar Content Pane con un label
www.yhavhe.com/Cursos
06/06/2012
JFrame
Un frame es un objeto contenedor
Toda instancia de JFrame tiene atributos marco, lnea de ttulo, algunos botones y un panel de contenido
4 www.yhavhe.com/Cursos 06/06/2012
Ejemplo
import javax.swing.*; class PrimerEjemplo { public static void main(String [] args) { JFrame f = new JFrame(Mi Aplicacin); f.setSize(400, 300); f.setVisible(true); } }
www.yhavhe.com/Cursos
06/06/2012
JFrame
JFrame f = new JFrame(Mi Aplicacin); f.setSize(400, 300); f.setVisible(true);
La variable f mantiene una referencia a un objeto de clase JFrame y puede recibir cualquiera de los mensajes provistos por esa clase (o sus clases ancestro)
www.yhavhe.com/Cursos
06/06/2012
JFrame
setSize(400,300)
www.yhavhe.com/Cursos
06/06/2012
JFrame
Una alternativa ms adecuada es definir clase que extiende a JFrame una nueva
public class MiVentana extends JFrame{ public MiVentana() { super("Segundo Ejemplo"); setSize(400, 300); setDefaultCloseOperation(EXIT_ON_CLOSE); } }
www.yhavhe.com/Cursos
06/06/2012
JFrame
import javax.swing.*; public class SegundoEjemplo { public static void main(String [] args){ MiVentana f = new MiVentana(); f.setVisible(true); } }
www.yhavhe.com/Cursos
06/06/2012
JFrame
Un objeto de clase JFrame tiene varios atributos, entre ellos el panel de contenido. En lugar de acceder directamente al frame, vamos a trabajar sobre el panel de contenido. Por ejemplo cuando establecemos el color del fondo o insertamos componentes getContentPane().setBackground(col); getContentPane().add(etiqueta);
10 www.yhavhe.com/Cursos 06/06/2012
JFrame
import java.awt.*; import javax.swing.*; public class MiVentanaColor extends JFrame{ JLabel etiqueta; public MiVentanaColor (String titulo, Panel de Color col) { contenido super(titulo); setSize(400, 300); getContentPane().setBackground(col); etiqueta = new JLabel("Panel de contenido"); getContentPane().add(etiqueta); setDefaultCloseOperation(EXIT_ON_CLOSE); } }
11 www.yhavhe.com/Cursos 06/06/2012
JFrame
import java.awt.*; class TercerEjemplo { public static void main(String [] args){ MiVentanaColor f1 = new MiVentanaColor(Una ventana, Color.BLUE); f1.setVisible(true); MiVentanaColor f2= new MiVentanaColor(Otra ventana, Color.RED); f2.setVisible(true); } }
12 www.yhavhe.com/Cursos 06/06/2012
import java.awt.*; import javax.swing.*; public class MiVentanaColor extends JFrame{ JLabel etiqueta; Container panel; public MiVentanaColor(String titulo, Color col) { super(titulo); setSize(400, 300); etiqueta =new JLabel(Panel de contenido"); panel = getContentPane(); panel.setBackground(col); panel.add(etiqueta); setDefaultCloseOperation(EXIT_ON_CLOSE); } } 13 www.yhavhe.com/Cursos 06/06/2012
JFrame
import java.awt.*; import javax.swing.*; public class MiVentanaColor extends JFrame{ JLabel etiqueta; Container panel; public MiVentanaColor(String titulo, Color col) { super(titulo); initGUI (titulo,col); }
14
www.yhavhe.com/Cursos
06/06/2012
JFrame
void initGUI (String titulo, Color col){ etiqueta = new JLabel(Panel de contenido"); panel = getContentPane(); panel.setBackground(col); panel.add(etiqueta); setSize(400, 300); setDefaultCloseOperation(EXIT_ON_CLOSE); }
15
www.yhavhe.com/Cursos
06/06/2012
16
www.yhavhe.com/Cursos
06/06/2012
17
www.yhavhe.com/Cursos
06/06/2012
18
www.yhavhe.com/Cursos
06/06/2012
private void hacerGUI(){ numeroEtiqueta = new JLabel("" + numero); //Crea el boton incrementar, el oyente y lo registra botonIncrementar = new JButton("Incrementar"); OyenteBotonI incrementar = new OyenteBotonI(); botonIncrementar.addActionListener(incrementar); //Crea el boton decrementar, el oyente y lo registra botonDecrementar = new JButton("Decrementar"); OyenteBotonD decrementar = new OyenteBotonD(); botonDecrementar.addActionListener(decrementar); //Inserta las componentes en el panel del frame getContentPane().add(numeroEtiqueta); getContentPane().add(botonIncrementar); getContentPane().add(botonDecrementar); } 20 www.yhavhe.com/Cursos 06/06/2012 }
22
www.yhavhe.com/Cursos
06/06/2012
Layouts
Java Intermedio
24
www.yhavhe.com/Cursos
06/06/2012
Layouts
Algunos componentes son contenedores de otros componentes. Un frame es un tipo especial de contenedor sobre el que puede ejecutarse una aplicacin. Un frame es una instancia de la clase JFrame y como tal tiene un atributo panel de contenido.
El panel de contenido tiene un atributo layout o diagramado de acuerdo al cual se organizan las componentes contenidas.
25 www.yhavhe.com/Cursos 06/06/2012
Layout
El layout de una ventana determina la apariencia de la misma. Un organizador de layout es un objeto que facilita la distribucin de las componentes dentro de un contenedor. Algunas de las clases provistas para crear organizadores son BorderLayout, FlowLayout, GridLayout. Cada clase tiene sus propias reglas de acuerdo a las cuales distribuye las componentes en el contenedor.
26 www.yhavhe.com/Cursos 06/06/2012
27
www.yhavhe.com/Cursos
06/06/2012
Cmo hacer que un JFrame muestre su panel de contenido con el tamao preferido?
En vez de establecer el tamao con setSize() invocamos en JFrame public void pack() justo antes de hacer visible la ventana
28
www.yhavhe.com/Cursos
06/06/2012
29
www.yhavhe.com/Cursos
06/06/2012
Flow Layout
Permite crear organizadores muy simples, las componentes se distribuyen de izquierda a derecha en el orden en el que se agregan.
eti1 = new JLabel (primero); eti2 = new JLabel (segundo); eti3 = new JLabel (tercero); getContentPane().setLayout(new FlowLayout()); getContentPane().add(eti1); getContentPane().add(eti2); getContentPane().add(eti3); getContentPane().add(new JLabel(cuarto));
30 www.yhavhe.com/Cursos 06/06/2012
FlowLayout
Administrador por defecto de JPanel Coloca los componentes con su tamao preferido en filas
31
www.yhavhe.com/Cursos
06/06/2012
FlowLayout
Informacin asociado al componente
No tiene
32
www.yhavhe.com/Cursos
06/06/2012
Grid Layout
Las componentes se distribuyen en una rejilla cuyo nmero de filas y columnas se establece al seleccionar la clase del organizador.
eti1 eti2 eti3 eti4 = = = = new new new new JLabel JLabel JLabel JLabel (primero); (segundo); (tercero); (cuarto);
getContentPane().setLayout(new GridLayout(3,2));
GridLayout
Divide el JPanel en una tabla de celdas iguales La celda donde se coloca cada componente depende del orden en que se asocian los componentes al panel
34
www.yhavhe.com/Cursos
06/06/2012
GridLayout
Informacin asociado al componente
No tiene
Border Layout
eti1 = new JLabel (primero); eti2 = new JLabel (segundo); eti3 = new JLabel (tercero);
getContentPane().setLayout(new BorderLayout());
36
www.yhavhe.com/Cursos
06/06/2012
BorderLayout
El JPanel slo puede contener 5 componentes Se distribuyen segn el esquema
37
www.yhavhe.com/Cursos
06/06/2012
BorderLayout
Informacin asociado al componente
BorderLayout.CENTER BorderLayout.NORTH BorderLayout.WEST BorderLayout.EAST BorderLayout.SOUTH
Ejercicio 2
Crea una calculadora con dos JTextField y cuatro JButtons. Cada botn tendr asociada una operacin:
+, -, *, /
El resultado ser mostrado en un JLabel. El usuario introducir nmeros en cada JTextField y presionar uno de los 4 botones. La calculadora debe mostrar el resultado de la operacin en el JLabel. Utilizar el Grid Layout para la aplicacin.
39 www.yhavhe.com/Cursos 06/06/2012