Está en la página 1de 39

Swing JFrames

Java Intermedio

La jerarqua de clases del paquete Swing


javax.swing Class JFrame java.lang.Object java.awt.Component java.awt.Container java.awt.Window java.awt.Frame javax.swing.JFrame

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)

(Dimension) establece el ancho y la altura de la ventana.


setVisible(true)

(Component) el parmetro indica si la ventana se muestra o no.

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

Caso de estudio Contador, aadiendo eventos


Java Intermedio

16

www.yhavhe.com/Cursos

06/06/2012

Caso de Estudio: Contador


Desarrolle una aplicacin que permita establecer incrementar o decrementar un contador de acuerdo al botn que oprima el usuario. La ventana inicialmente debe aparecer as:

El valor va a ir cambiando a medida que se oprimen los botones.

17

www.yhavhe.com/Cursos

06/06/2012

Caso de Estudio: Contador


public class Test{ public static void main(String[] args){ Contador cuadro = new Contador(); cuadro.setVisible(true); } }

18

www.yhavhe.com/Cursos

06/06/2012

Caso de Estudio: Contador


public class Contador extends JFrame { //Atributos de instancia incluyendo objetos grficos private int numero; private JLabel numeroEtiqueta; private JButton botonIncrementar,botonDecrementar; public Contador() { //Incializa variables numero = 0; //Establece los valores de los atributos del frame setLayout(new FlowLayout()); setSize(200, 120); setDefaultCloseOperation(EXIT_ON_CLOSE); //Invoca al mtodo interno que completa la GUI hacerGUI(); }
19 www.yhavhe.com/Cursos 06/06/2012

Caso de Estudio: Contador

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 }

Caso de Estudio: Contador


Diferentes clases de componentes requieren diferentes clases de oyentes para manejar los eventos internos que los objetos disparan. Un botn dispara eventos llamados eventos de accin que son manejados por oyentes de accin. Es decir un objeto de clase JButton genera un objeto de la clase ActionEvent que es enviado como parmetro a un objeto de una clase que implementa a la interface ActionListener.
21 www.yhavhe.com/Cursos 06/06/2012

Caso de Estudio: Contador


private class OyenteBotonD implements ActionListener { public void actionPerformed(ActionEvent event) { numero--; numeroEtiqueta.setText("" + numero); } } private class OyenteBotonI implements ActionListener { public void actionPerformed(ActionEvent event) { numero++; numeroEtiqueta.setText("" + numero); } }

22

www.yhavhe.com/Cursos

06/06/2012

Caso de Estudio: Contador


El programador redefine el mtodo actionPerformed que no va a ser invocado explcitamente por l mismo, sino que el mensaje que provoca su ejecucin est incluido en algn mtodo definido en una clase provista por Java. Esto es, el programador define (o redefine) un mtodo que l mismo NUNCA VA A INVOCAR al menos explcitamente! El mtodo recibe como argumento un objeto que tampoco ha sido creado explcitamente por el programador.
23 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

En que se basan para distribuir los componentes?


Naturaleza del administrador Configuracin del administrador Configuracin de cada componente
Informacin en el propio componente (mtodos get/set)
Location (por defecto x = 0, y = 0) Size (por defecto alto = 0, ancho = 0) MaximumSize (Calculdo automticamente segn componente) MinimumSize (Calculdo automticamente segn componente) PreferredSize (Calculdo automticamente segn componente) AlignmentX AlignmentY

Informacin asociada al componente


Se asocia esta informacin al asociar el componente al contenedor

27

www.yhavhe.com/Cursos

06/06/2012

Tamao preferido de un contenedor


Cul es?
Depende del administrador de distribucin Depende de los componentes que estn asociados a l

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

Implementacin de los administradores de distribucin


Asociacin de un administrador de distribucin a un contenedor
Container: public void setLayout(LayoutManager administrador)

Asociacin de informacin a un componente


Container: public void add(JComponent componente, Object info)

Cundo se distribuyen los componentes?


Al hacer visible la ventana o applet Container: public void doLayout()

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

Configuracin del administrador


public FlowLayout() public FlowLayout(int alineacion) public FlowLayout(int alineacion, int espacioHorizontal, int espacioVertical)

Informacin en el propio componente


Tamao Preferido

Tamao preferido del contenedor


Tamao para que quepan todos los componentes en una sola lnea

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));

getContentPane().add(eti1); getContentPane().add(eti2); getContentPane().add(eti3); getContentPane().add(eti4);


33 www.yhavhe.com/Cursos 06/06/2012

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

Configuracin del administrador


public GridLayout(int filas, int columnas) public GridLayout(int filas, int columnas, int espacioHorizontal, int espacioVertical)

Informacin en el propio componente


Para calcular su tamao preferido usa el tamao preferido de los componentes

Tamao preferido del contenedor


Se considera el tamao de cada celda como el tamao preferido ms grande de entre todos los componentes.
35 www.yhavhe.com/Cursos 06/06/2012

Border Layout
eti1 = new JLabel (primero); eti2 = new JLabel (segundo); eti3 = new JLabel (tercero);
getContentPane().setLayout(new BorderLayout());

getContentPane().add(eti1,BorderLayout.NORTH); getContentPane().add(eti2,BorderLayout.WEST); getContentPane().add(eti3,BorderLayout.SOUTH);

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

Configuracin del administrador


public BorderLayout(int espacioHorizontal, int espacioVertical) public BorderLayout()

Informacin en el propio componente


Tamao Preferido para obtener su altura o anchura

Tamao preferido del contenedor


Siguiendo el criterio para calcular el tamao de las zonas y con el componente central con su tamao preferido.
38 www.yhavhe.com/Cursos 06/06/2012

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

También podría gustarte