Vous êtes sur la page 1sur 21

OBJETIVOS Conocer y usar objetos bsicos de programacin con Swing. Conocer la nueva tecnologa para la creacin de interfaces grficas.

as. Comprender y utilizar las clases JFrame, JPanel y JButton.

1. JAVA FOUNDATION CLASSES (JFC) JFC es la abreviatura de Java Foundation Classes, que comprende un grupo de caractersticas para ayudar a construir interfaces grficos de usuario (GUIs). Se creo como una extensin de AWT. Comprende las siguientes caractersticas: Componentes Swing. API de accesibilidad. Java 2D API Soporte de Drag and Drop.

Jerarqua de clases de Swing


Object Graphics Component
Button Canvas Checkbox Choice

TextComponent
TextField TextArea

Container
Window Panel ScrollPane

List Scrollbar

Frame

Dialog FileDialog

Java.applet Applet

2. La clase JComponent Extiende de Container, la lcual a su vez hereda de la clase Component; todas estas del paquete java.awt. Incluye eventos de y tiene soporte para agregar o quitar componentes al contenedor. 3. Clase JFrame: La clase JFrame implementa un objeto ventana, JFrame es una extensin de la clase Frame del paquete AWT. Para crear una ventana, existen dos formas principales de hacerlo: Crear un objeto de la clase JFrame Extender la clase JFrame

El ltimo mtodo es muy til cuando se crean ventanas personalizadas que se invocan repetidamente (como ventanas de error, o de informacin). Crearemos una ventana con el primer mtodo: ventana = new JFrame(); Una vez creado una ventana JFrame, sta obtiene el tamao necesario para mostrar los componentes que existen dentro de la aplicacin, como en nuestro ejemplo no existe componente,

cambiaremos su tamao inicial, con el mtodo: setSize(int ancho, int largo) ventana.setSize(200,300); Despus cambiaremos su ttulo para que sea el nombre de nuestra aplicacin con el mtodo: setTitle(String titulo) ventana.setTitle("Hola mundo Swing"); El objeto existe, pero no es mostrado por defecto, entonces se hace la llamada a: setVisible(boolean)

ventana.setVisible(true); C import java.awt.*; d import java.awt.event.*; i import javax.swing.*; g o public class Window extends JFrame : { public Window() { Sthis.setSize(400,500); e this.setTitle("Primer Aplicacion Swing"); this.setVisible(true); d } e b public static void main(String []args) {e new Window(); n o JFrame jFrameWindow = new JFrame(); t a jFrameWindow.setSize(400,500); r jFrameWindow.setTitle("Segunda Aplicacion Swing"); jFrameWindow.setVisible(true); q } } u e

JFrame JPanel JButton JLabel

JFrame containers JPanel

JButton
Eventos para cerrar la ventana

JLabel

Se puede especificar un comportamiento por defecto al cerrar la ventana utilizando el mtodo setDefaultCloseOperation. Y colocar los siguientes valores: DO_NOTHING_ON_CLOSE: No har nada cuando el usuario le de clic en el botn cerrar de la ventana. HIDE_ON_CLOSE (por defecto): Ocultar la ventana y lo remover de la pantalla de usuario. DISPOSE_ON_CLOSE: Oculta y destruye la ventana cuando el usuario la cierra. EXIT_ON_CLOSE: Termina la ejecucin de la aplicacin. Es como si usramos la sentencia System.exit(0).

ACTIVIDAD
1. Cree un JFrame con dos botones de comando.

Cdigo:

class MiPrimerJFrame extends JFrame{ public MiPrimerJFrame(String nombre, int x, int y){ super(nombre); Icon icon= new ImageIcon("images/DUKE.GIF","Un Gif Animado de Duke en Swing"); JLabel label = new JLabel("Swing!",icon,JLabel.CENTER); add(label,BorderLayout.CENTER); this.setSize(x,y); } public static void main(String[] arg){ // --- Creando componentes MiPrimerJFrame jf=new MiPrimerJFrame("Mi Primer JFrame",200,200); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jf.setVisible(true); } }

2. Cree un formulario con una imagen centrada.

import java.awt.*; import javax.swing.*; import java.awt.event.*; class JFrame03 extends JFrame{ int nveces=1; JLabel label = new JLabel(); public JFrame03(String nombre, int x, int y){ super(nombre); JButton button = new JButton("boton ",new ImageIcon("images/duke.gif")); button.setMnemonic('b'); // Alt+B o Alt+b button.setFont(new Font("Comic sans", Font.PLAIN, 18)); setLayout(new FlowLayout()); add(button); add(label); setSize(x,y); button.addActionListener( new ActionListener(){ public void actionPerformed(ActionEvent event){ label.setText(event.getActionCommand()+" fue activado "+nveces+" veces"); nveces++;} }); } public static void main(String[] arg){ JFrame03 jf=new JFrame03("JFrame con eventos",300,200); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jf.setVisible(true); } }

3. Cree un JFrame que muestre un botn el cual al pulsarlo indique cuantas veces.

import java.awt.*; import javax.swing.*; import java.awt.event.*; class JFrame03 extends JFrame{ int nveces=1; JLabel label = new JLabel(); public JFrame03(String nombre, int x, int y){ super(nombre); JButton button = new JButton("boton ",new ImageIcon("images/duke.gif")); button.setMnemonic('b'); // Alt+B o Alt+b button.setFont(new Font("Comic sans", Font.PLAIN, 18)); setLayout(new FlowLayout()); add(button); add(label); setSize(x,y); button.addActionListener( new ActionListener(){ public void actionPerformed(ActionEvent event){ label.setText(event.getActionCommand()+" fue activado "+nveces+" veces"); nveces++; } }); } public static void main(String[] arg){ JFrame03 jf=new JFrame03("JFrame con eventos",300,200); 8 jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jf.setVisible(true);

4. Cree un Frame que muestre los dos tipos de botones:

import java.awt.*; import javax.swing.*; class JFrame04 extends JFrame{ Button b1,b2,b3,b4; JButton jb1,jb2,jb3; public JFrame04(String nombre, int x, int y){ super(nombre); setLayout(null); //creando componentes AWT Button b1 = new Button("boton AWT 1"); Button b2 = new Button("boton AWT 2"); Button b3 = new Button("boton AWT 3"); Button b4 = new Button("boton AWT 4"); //creando componentes Swing JButton jb1 = new JButton("b Swing 1"); JButton jb2 = new JButton("b Swing 2"); JButton jb3 = new JButton("b Swing 3"); //definiendo coordenadas botones AWT b1.setBounds(10,10,150,25); b2.setBounds(10,65,150,25); b3.setBounds(10,100,150,25); b4.setBounds(10,130,150,25);

//definiendo coordenadas botones Swing jb1.setBounds(170,25,100,40); jb2.setBounds(170,65,100,40); jb3.setBounds(170,105,100,40); //agregando botones awt add(b1); add(b2); add(b3); add(b4); //agregando botones swing add(jb1); add(jb2); add(jb3); this.setSize(x,y);

public static void main(String[] arg){ // --- Creando componentes JFrame04 jf=new JFrame04("Comparacin de clases",500,400); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jf.setVisible(true);

} }

La clase JPanel
JPanel es un contenedor de propsito general para componentes de peso ligero. Como todos los contenedores, utiliza un Controlador de

Distribucin para posicionar y dimensionar sus componentes. Como todos los componentes Swing, JPanel permite aadirle bordes y determinar si utiliza el doble buffer para aumentar el rendimiento. Los mtodos bsicos para trabajar con JPanel son:

10

Para crear un JPanel Mtodo Propsito Crea un panel. Cuando est presente, el JPanel() parmetro boolean determina la estrategia de JPanel(boolean) buffer del panel. Un valor true indica doble JPanel(LayoutManager) buffer. El parmetro LayoutManager JPanel(LayoutManager, proporciona el controlador de distribucin para el boolean) nuevo panel. Si no se especifica, el panel utiliza FlowLayout para distribuir sus componentes.

Para manejar Componentes en un Contenedor Mtodo void add(Component) void add(Component, int) void add(Component, Object) void add(Component, Object, int) void add(String, Component) int getComponentCount() Propsito Aade el componente especificado al panel. Cuando existe, el parmetro int es la posicin o ndice del componente dentro del contenedor. El parmetro Object depende del controlador de distribucin y normalmente proporciona informacin sobre el posicionamiento y restricciones de distribucin cuando se aaden componentes. El parmetro String proporciona un nombre para el componente. Obtiene el nmero de componentes en este panel.

Component getComponent(int) Component getComponentAt(int, Obtiene el componente o componentes int) especificados. Se pueden obtener basndose en Component su ndice, o en sus posiciones x,y. getComponentAt(Point) Component[] getComponents() void remove(Component) void remove(int) void removeAll() Elimina el componente o componentes especificados.

Seleccionar/Obtener el Controlador de Distribucin Mtodo void Propsito Selecciona u obtiene el controlador de

11

setLayout(LayoutManager) distribucin para este panel. El controlador de LayoutManager distribucin es el responsable de posicionar getLayout() los componentes dentro del panel de acuerdo con alguna filosofa. Tenemos la siguiente plantilla de JPanel que insertamos en el rea cliente de un JFrame. Normalmente en este JPanel ubicamos todos nuestros componentes Swing, adems, tambin podemos insertar en este JPanel otros JPanels. import java.awt.*; import java.awt.event.*; import javax.swing.*; class MiPanel extends JPanel // implements ActionListener, { // Aqu declaramos los componentes globales
public MiPanel()

} // --------------------------------------------------------------------Para eventos // public void actionPerformed(ActionEvent e) // { // // } }

// Aqu aadimos controles al panel // ... // Adicionamos interface a los componentes // ...

2. La clase JButton JButton desciende de la clase AbstractButton que define un pequeo API pblico adicional. La siguiente tabla muestra las subclases de AbstractButton definidas en Swing que podemos utilizar:

Clase JButton JCheckBox JMenuItem

Sumario Un botn comn Un checkbox tpico Un tem de un men.

JRadioButton Un botn de radio de un grupo. JToggleButton Implementa la funcionalidad heredada de JCheckBox y

12

JRadioButton. JButton en su nueva versin Swing permite insertar sobre l gif animados (como lo veremos en un ejercicio posterior). Las siguientes tablas listan los mtodos y constructores ms utilizados de AbstractButton y JButton.

Seleccionar u obtener el contenido de un botn Mtodo o Constructor JButton(String, Icon) JButton(String) JButton(Icon) JButton() void setText(String) String getText() void setIcon(Icon) Icon getIcon() void setDisabledIcon(Icon) Icon getDisabledIcon() void setPressedIcon(Icon) Icon getPressedIcon() void setSelectedIcon(Icon) Icon getSelectedIcon() void setDisabledSelectedIcon(Icon) Icon getDisabledSelectedIcon() setRolloverEnabled(boolean) boolean getRolloverEnabled() void setRolloverIcon(Icon) Icon getRolloverIcon() void setRolloverSelectedIcon(Icon) Icon getRolloverSelectedIcon() Propsito Crea un ejemplar de JButton, lo inicializa para tener el texto/imagen especificado. Selecciona u obtiene el texto mostrado en el botn. Selecciona u obtiene la imagen mostrada por el botn, cuando no est seleccionado o pulsado. Selecciona u obtiene la imagen mostrada por el botn cuando est desactivado. Si no se especifica una imagen, el aspecto y comportamiento crea una por defecto. Selecciona u obtiene la imagen mostrada por el botn, cuando est pulsado. Selecciona u obtiene la imagen mostrada por el botn cuando est seleccionado. Si no se especifica una imagen de botn desactivado seleccionado, el aspecto y comportamiento crea una manipulando la imagen de seleccionado. Utiliza setRolloverEnabled(true) y setRolloverIcon(someIcon) para hacer que el botn muestre el cono especificado cuando el cursor pasa sobre l.

13

Ajuste fino de la apariencia del botn Mtodo o constructor Propsito Selecciona u obtiene dnde debe situarse void el contenido del botn. La clase setHorizontalAlignment(int) AbstractButton permite uno de los void setVerticalAlignment(int) siguientes valores para alineamiento int getHorizontalAlignment() horizontal: LEFT, CENTER (por defecto), int getVerticalAlignment() y LEFT. Para alineamiento vertical: TOP, CENTER (por defecto), y BOTTOM. void setHorizontalTextPosition(int) void setVerticalTextPosition(int) int getHorizontalTextPosition() int getVerticalTextPosition() void setMargin(Insets) Insets getMargin() void setFocusPainted(boolean) boolean isFocusPainted() void setBorderPainted(boolean) boolean isBorderPainted() Selecciona u obtiene dnde debera situarse el texto del botn con respecto a la imagen. La clase AbstractButton permite uno de los siguientes valores para alineamineto horizontal: LEFT, CENTER (por defecto), y LEFT. Para alineamiento vertical: TOP, CENTER (por defecto), y BOTTOM. Selecciona u obtiene el nmero de pixels entre el borde del botn y sus contenidos. Selecciona u obtiene si el botn debera parecer diferente si obtiene el foco. Selecciona u obtiene si el borde del botn debera dibujarse.

Implementa la funcionalidad del botn Mtodo o Constructor void setMnemonic(char) char getMnemonic() void setActionCommand(String) String getActionCommand(void) Propsito Selecciona la tecla alternativa para pulsar el botn. Selecciona u obtiene el nombre de la accin realizada por el botn.

void Aade o elimina un objeto que addActionListener(ActionListener) escucha eventos action disparados ActionListener por el botn. removeActionListener() void Aade o elimina un objeto que addItemListener(ItemListener) escucha eventos items disparados ItemListener removeItemListener() por el botn. void setSelected(boolean) boolean isSelected() Selecciona u obtiene si el botn est seleccionado. Tiene sentido slo en

14

botones que tienen un estado on/off, como los checkbox.

El cdigo para este programa est dado por 2 clases: Formulario y MiPanel. El cdigo de la clase Formulario fue dado en anteriores pginas, sin embargo, el cdigo de MiPanel es el siguiente: import java.awt.*; import java.awt.event.*; import javax.swing.*; class MiPanel extends JPanel implements ActionListener { // -------------------------------------------------------Para variables globales JButton bV= new JButton("Vctor ", new ImageIcon(getClass().getResource("images/V.gif"))); JButton bB= new JButton("Balta ", new ImageIcon(getClass().getResource("images/B.gif"))); // ---------------------------------------------------------------------------------public MiPanel() { bV.setMnemonic('V'); // Alt+V o Alt+v
bV.setFont(new Font("Arial", Font.PLAIN, 18));

bV.addActionListener(this); add(bV);

bB.setMnemonic('B'); // Alt+B o Alt+b bB.setFont(new Font("Arial", Font.PLAIN, 18)); bB.addActionListener(this); add(bB); } // --------------------------------------------------------------------------Para eventos public void actionPerformed(ActionEvent e) { if(e.getSource().equals(bV)) setBackground(Color.cyan); if(e.getSource().equals(bB)) setBackground(Color.green); } }

Veamos :

15

JButton JFrame n JPanel: BorderLayout JTextArea c

JButton

JPanel: FlowLayout

16

OBJETIVOS Comprender y utilizar los diferentes tipos de diseo en Swing. Crear diversos diseos de JFrame y distribucin de objetos en el Frame.

1. Concepto: Los layout managers o manejadores de composicin, en traduccin literal, ayudan a adaptar los diversos Componentes que se desean incorporar a un Panel, es decir, especifican la apariencia que tendrn los Componentes a la hora de colocarlos sobre un Contenedor. Java dispone de varios, en la actual versin, tal como se muestra en la imagen:

17

a. FlowLayout
Es el ms simple y el que se utiliza por defecto en todos los Paneles si no se fuerza el uso de alguno de los otros. Los Componentes aadidos a un Panel con FlowLayout se encadenan en forma de lista. La cadena es horizontal, de izquierda a derecha, y se puede seleccionar el espaciado entre cada Componente.

Cdigo : Implemente la clase PanelFlowLayout public class PanelFlowLayout extends JPanel {

JButton b1=new JButton("Boton 1"); JButton b2=new JButton("Boton 2"); JButton b3=new JButton("Boton 3"); JButton b4=new JButton("Boton 4"); JButton b5=new JButton("Boton 5"); JButton b6=new JButton("Boton 6"); JButton b7=new JButton("Boton 7"); JButton b8=new JButton("Boton 8"); JButton b9=new JButton("Boton 9"); public PanelFlowLayout() { setLayout(new FlowLayout()); add(b1); add(b2); .

18

Formulario FlowLayout

public class FormularioFlowLayout extends JFrame{ static int wF=400,hF=300; public FormularioFlowLayout(String s) { super(s); setContentPane(new PanelFlowLayout()); setLocation((getToolkit().getScreenSize().width wF)/2,(getToolkit().getScreenSize().height - hF)/2); } public static void main(String[] args) { FormularioFlowLayout jf = new FormularioFlowLayout("FlowLayout"); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jf.setSize(wF,hF); jf.setVisible(true); } } b. BorderLayout La composicin BorderLayout (de borde) proporciona un esquema ms complejo de colocacin de los Componentes en un panel. La composicin utiliza cinco zonas para colocar los Componentes sobre ellas: Norte, Sur, Este, Oeste y Centro. Es el layout o composicin que se utilizan por defecto Frame y Dialog. El Norte ocupa la parte superior del panel, el Este ocupa el lado derecho, Sur la zona inferior y Oeste el lado izquierdo.

19

Disee la clase que implemente el BorderLayout.

import java.awt.BorderLayout; import javax.swing.*;

public class PanelBorderLayout extends JPanel {

JButton sur JButton norte

=new JButton("Sur"); =new JButton("Norte");

JButton este =new JButton("Este"); JButton oeste JButton centro =new JButton("Oeste"); =new JButton("Centro");

public PanelBorderLayout() { setLayout(new BorderLayout()); add(sur,BorderLayout.SOUTH); add(norte,BorderLayout.NORTH); add(este, BorderLayout.EAST); add(oeste, BorderLayout.WEST); add(centro, BorderLayout.CENTER); } } Cree el formulario que permita ver el layout asignado. public class FormularioBorderLayout extends JFrame{ static int wF=400,hF=300; public FormularioBorderLayout(String s) { super(s); add(new PanelBorderLayout()); setLocation((getToolkit().getScreenSize().width wF)/2,(getToolkit().getScreenSize().height - hF)/2); }

20

ACTIVIDAD
Implemente la clase GridLayout de tal forma que se mueste de la siguiente manera:

21

Vous aimerez peut-être aussi