java09

50
Lenguaje de Programación JAVA – 2º IINF y 2º ITIG Lenguaje JAVA David Contreras Bárcena - ETSI David Contreras Bárcena 185 9. AWT (Abstract Window Toolkit) Índice 9.0 Introducción 9.1 Contenedores 9.2 Layouts 9.3 Componentes 9.4 Eventos 9.5 Swing 9.6 HowTo Swing 9.7 Ejemplo 9.8 Applets David Contreras Bárcena 186 9. AWT (Abstract Window Toolkit) AWT es el acrónimo del X Window Toolkit para Java. Es una biblioteca de clases Java para el desarrollo de Interfaces de Usuario Gráficas. La versión del AWT que Sun proporcionó con el JDK se desarrolló en sólo dos meses y es la parte más débil de todo lo que representa Java como lenguaje. Por este motivo se ha implementado el entorno gráfico llamado Swing, desarrollado conjuntamente con Netscape. Un entorno muy potente con todas las mejoras visuales que hoy en día se ofrecen.

Upload: beatriz

Post on 30-Sep-2015

230 views

Category:

Documents


18 download

DESCRIPTION

La biblia de java

TRANSCRIPT

  • Lenguaje de Programacin JAVA 2 IINF y 2 ITIGLenguaje JAVA

    David Contreras Brcena - ETSI

    David Contreras Brcena 185

    9. AWT (Abstract Window Toolkit)ndice

    9.0 Introduccin

    9.1 Contenedores

    9.2 Layouts

    9.3 Componentes

    9.4 Eventos

    9.5 Swing

    9.6 HowTo Swing

    9.7 Ejemplo

    9.8 Applets

    David Contreras Brcena 186

    9. AWT (Abstract Window Toolkit)AWT es el acrnimo del X Window Toolkit para Java.Es una biblioteca de clases Java para el desarrollo de Interfaces de Usuario Grficas. La versin del AWT que Sun proporcion con el JDK se desarroll en slo dos meses y es la parte ms dbil de todo lo que representa Java como lenguaje. Por este motivo se ha implementado el entorno grfico llamado Swing, desarrollado conjuntamente con Netscape. Un entorno muy potente con todas las mejoras visuales que hoy en da se ofrecen.

  • Lenguaje de Programacin JAVA 2 IINF y 2 ITIGLenguaje JAVA

    David Contreras Brcena - ETSI

    David Contreras Brcena 187

    9. AWT (Abstract Window Toolkit)Proporciona al programador todos los elementos necesarios para desarrollar aplicaciones grficas, como son ventanas, botones, etc y un sistema de eventos para gestionar las acciones producidas por el usuario con cualquier elemento de la aplicacin.

    David Contreras Brcena 188

    9. AWT java.awt

    Object

    Component

    Button

    Window

    Dialog

    Canvas TextComponentContainer

    Frame

    FileDialog

    LabelList

    TextField TextArea

    Cursor Event FlowLayout

    Panel ScrollPaneJComponent

    JWindow

    JFrameJDialog

    javax.swing

  • Lenguaje de Programacin JAVA 2 IINF y 2 ITIGLenguaje JAVA

    David Contreras Brcena - ETSI

    David Contreras Brcena 189

    9. AWT Estructura de una aplicacin GUIObjetos que debe contener toda aplicacin GUI:

    9.1 Contenedores (Containers): Elementos que se emplean para colocar componentes en la ventana. La forma en la que se distribuyan estos objetos en el container, depender del Layout que se aplique al mismo. Un container que no posea un layout, slo podr colocar un componente sobre s mismo. Tipos de container:

    Ventanas: Elemento donde se muestra cualquier contenido visual.

    Paneles: Una ventana podr contener tantos paneles como le permita el layout. Un panel, a su vez, deber aplicar un layout para agregar componentes.

    David Contreras Brcena 190

    9. AWT Estructura de una aplicacin GUI9.2 Layout Manager:

    Indican la forma de organizar los componentes dentro del container. Determinan el tamao y posicin de los componentes.

    Pasos a dar:1. Crear el container.

    2. Aplicar el tipo de Layout Manager.

    3. Agregar los componentes al container.

    Tipos de Layout Manager ms importantes (todos elllos heredan del interface LayoutManager): FlowLayout

    BorderLayout

    GridLayout.

    BoxLayout

    CardLayout

  • Lenguaje de Programacin JAVA 2 IINF y 2 ITIGLenguaje JAVA

    David Contreras Brcena - ETSI

    David Contreras Brcena 191

    9. AWT Estructura de una aplicacin GUI9.3 Componentes (Components): Representan cada uno de los controles que aparecen en toda ventana (botones, cajas de texto, mens, ...)

    David Contreras Brcena 192

    9.1 Contenedores - VentanasLa clase Window permite crear ventanas cualquier tipo.Subclases:

    Frame: es la tpica ventana de aplicacin.Dialog: es la ventana que utilizan los cuadros de dilogo.Window: es una ventana sin marco ni barra de ttulo. Utlizada para las ventanas de presentacin.

    Mtodos:void setVisible (boolean visible)void pack()void setSize (int width, int height)void setTitle (String title) void setMenuBar (MenuBar mb) void setResizable (boolean resizable) void setState (int state)

  • Lenguaje de Programacin JAVA 2 IINF y 2 ITIGLenguaje JAVA

    David Contreras Brcena - ETSI

    David Contreras Brcena 193

    9.1 Contenedores Cuadros de DilogoSon ventanas transitorias para mostrar advertencias, errores, informacin especifica, etc.No tienen barra de mens.Pueden ser de dos tipos:

    JDialog: proporciona un dialogo general.JFileChooser: dialogo especifico para escoger archivos para guardar o abrir.

    JOptionPane: manera fcil y rpida de generar dilogo personalizados.

    David Contreras Brcena 194

    9.1 Contenedores Estructura de una aplicacin GUIEjemplo de creacin de una ventana:

    public class MiFrame extends Frame{

    Button boton;

    public static void main(String s[]){

    new MiFrame();}

    public MiFrame(){

    boton = new Button("Aceptar");this.setLayout(new FlowLayout());this.add(boton);this.setSize(250,250);this.setVisible(true);

    }}

  • Lenguaje de Programacin JAVA 2 IINF y 2 ITIGLenguaje JAVA

    David Contreras Brcena - ETSI

    David Contreras Brcena 195

    9.1 Contenedores Estructura de una aplicacin GUIEjemplos:

    CONTAINER > Frame

    COMPONENTE -> Button

    DISTRIBUCION > FlowLayout

    COMPONENTE -> Button

    CONTAINER > Frame

    DISTRIBUCION > BorderLayoutCONTAINER > Frame

    DISTRIBUCION > FlowLayout

    COMPONENTE -> Button

    CONTAINER > Panel en la zona Sur

    David Contreras Brcena 196

    9.1 Contenedores Estructura de una aplicacin GUIEjemplos:

    public MiFrame(){

    boton = new JButton("Aceptar");Panel panel= new Panel(new FlowLayout());panel.add(boton);this.setLayout(new BorderLayout());this.add(panel,BorderLayout.SOUTH);this.setSize(250,250);this.setVisible(true);

    }

    public MiFrame(){

    boton = new JButton("Aceptar");this.setLayout(new FlowLayout());this.add(boton);this.setSize(250,250);this.setVisible(true);

    }

    public MiFrame(){

    boton = new Button("Aceptar");this.add(boton);this.setSize(250,250);this.setVisible(true);

    }

  • Lenguaje de Programacin JAVA 2 IINF y 2 ITIGLenguaje JAVA

    David Contreras Brcena - ETSI

    David Contreras Brcena 197

    9.1 Contenedores - ContainerMtodos importantes definidos en la clase Container:

    Component add(Component comp)void setLayout(LayoutManager mgr)void remove(Component comp)void remove(int index)void removeAll()void doLayout()

    David Contreras Brcena 198

    9.2 LayoutManagerFlowLayout (java.awt)

    Permite una distribucin lineal de los componentes.

    Crea nuevas lneas cuando as lo exige el ancho del container.

    Container

    Components

    this.setLayout (new FlowLayout());this.add(new Button(Aceptar));this.add(...);this.add(...);this.add(...);this.add(...);

  • Lenguaje de Programacin JAVA 2 IINF y 2 ITIGLenguaje JAVA

    David Contreras Brcena - ETSI

    David Contreras Brcena 199

    9.2 LayoutManagerGridLayout (java.awt)

    Permite una distribucin en regilla o tabla.

    Los componentes se situan en las celdas de forma secuencial de arriba abajo y de izquierda a derecha.

    No se puede direccionar la posicin de los componentes sobre las celdas.

    El tamao de las celdas es idntico.

    Container

    this.setLayout(new GridLayout(2,3));this.add(new Button(Aceptar));this.add(...);this.add(...);this.add(...);

    Components

    David Contreras Brcena 200

    norte

    este

    sur

    oeste centro

    9.2 LayoutManagerBorderLayout (java.awt)

    Proporciona cinco reas para situar componentes.

    La ausencia de una de ellas produce la extensin horizontal o vertical de las contiguas.

    ContainerComponents

    this.setLayout(new BorderLayout());this.add(new Button(Aceptar), BorderLayout.NORTH);this.add(..., BorderLayout.EAST);this.add(..., BorderLayout.WEST);this.add(..., BorderLayout.SOUTH);this.add(..., BorderLayout.CENTER);

  • Lenguaje de Programacin JAVA 2 IINF y 2 ITIGLenguaje JAVA

    David Contreras Brcena - ETSI

    David Contreras Brcena 201

    9.2 LayoutManagerCardLayout (java.awt)

    Permite alternar el contenido de un container entre varios paneles creados anteriormente.

    El cambio se puede producir en tiempo de ejecucin.

    Cada panel deber tener un identificador del tipo String.

    this.setLayout(new CardLayout());

    Panel panelA = new JPanel ();panelA.add(....);Panel panelB = new JPanel ();panelB.add(....);

    this.add(panelA, A);this.add(panelB, B);

    CardLayout cl = (CardLayout)this.getLayout();cl.show(c, B");

    David Contreras Brcena 202

    9.2 LayoutManagerBoxLayout (javax.swing)

    Permite visualizar los componentes alineados vertical u horizontalmente.

    ContainerComponents

    this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));Button boton1 = new Button(Aceptar");boton1.setAlignmentX(Component.CENTER_ALIGNMENT);this.add(boton1);this.add(...);this.add(...);this.add(...);

  • Lenguaje de Programacin JAVA 2 IINF y 2 ITIGLenguaje JAVA

    David Contreras Brcena - ETSI

    David Contreras Brcena 203

    9.3 Componentes (Component)Como superclase de todos los componentes java (AWT y Swing), esta clase generaliza el comportamiento de todos ellos.Todos los componentes AWT heredan de Component, mientras que los desarrollados en Swing lo hacen de JComponent.

    Component

    Button Container LabelList

    JComponent

    David Contreras Brcena 204

    9.3 Componentes (Component)Mtodos importantes definidos en la clase Component:

    void setEnabled(boolean b)void setVisible(boolean b)void requestFocus() void setBounds(int x, int y, int width, int height)void setLocation(int x, int y)void setSize(int width, int height)void setCursor(Cursor cursor)void setFont(Font f)void setBackground(Color c)void setForeground(Color c)void setName(String name)void updateUI()

  • Lenguaje de Programacin JAVA 2 IINF y 2 ITIGLenguaje JAVA

    David Contreras Brcena - ETSI

    David Contreras Brcena 205

    9.3 Componentes (Component)Dado que las aplicaciones GUI desarrolladas hoy en da se basan en componentes Swing, se ver un ejemplo mnimo de componentes AWT.Algunos de estos componentes se siguen empleando aunque la gran mayora han sido sustituidos por los nuevos desarrollados en Swing.

    Button: botones (JButton en Swing)

    Label: etiquetas (JLabel en Swing)

    TextField: campos de texto (JTextField en Swing)

    Canvas: lienzo para dibujar

    David Contreras Brcena 206

    9.3 Componentes - ButtonButton(): crea un botn vacio sin etiquetaButton(String): crea un botn con el string como etiquetaString getLabel(): devuelve la etiqueta del botn.void setLabel(String): pone como etiqueta el String del parmetro.

  • Lenguaje de Programacin JAVA 2 IINF y 2 ITIGLenguaje JAVA

    David Contreras Brcena - ETSI

    David Contreras Brcena 207

    9.3 Componentes - LabelLabel(): Crea una etiqueta vaca con el texto alineado a la izquierda.Label(String): Crea una etiqueta con la cadena de texto dada, alineada a la izquierda.

    Label(String, int): Crea una etiqueta con la cadena de texto y la alineacin dadas. La alineacin disponible se almacena en variables de clase en Label; Label.RIGHT, Label.LEFT, Label.CENTER.

    String getText(): Devuelve el texto de la etiqueta.void setText(String): Cambia el texto de la etiqueta.int getAlignment(): Devuelve un entero que representa la alineacin de la etiqueta:0 es Label.LEFT, 1 es Label.CENTER y 2 es Label.RIGHT.

    void setAlignment(int): Cambia la alineacin con la indicada..

    David Contreras Brcena 208

    9.3 Componentes - TextFieldTextField(): Crea una caja de texto de 0 caracteres de amplitud.TextField(int): Crea un campo de texto vaco con la amplitud dada.TextField(String): Crea una caja de texto con la longitud de la cadena como amplitud, inicializado con la cadena dada.TextField (String,int): crea un campo de texto con la amplitud dada y la cadena dada.String getText(): Devuelve el texto contenido en ese campo de texto.void setText(String): Coloca la cadena dada en el campo de texto.boolean isEditable(): Devuelve true o false basado en si el texto es editable o no.void setEditable(boolean): true (valor predeterminado) permite la edicin del texto; false inmoviliza el texto.void setEchoCar(char): Pone el carcter dado en la entrada para ocultar texto.

  • Lenguaje de Programacin JAVA 2 IINF y 2 ITIGLenguaje JAVA

    David Contreras Brcena - ETSI

    David Contreras Brcena 209

    9.3 Componentes - CanvasLa clase Canvas permite representar elementos grficos en pantalla.

    A travs de su mtodo paint(Graphics g) se realizan todos los dibujos sobre el canvas.

    Es la ocurrencia de la clase Graphics la que permite realmente pintar elementos grficos, el canvas es el soporte.

    Graphics2D hereda de Graphics, aportando una mayor funcionalidad. A travs de un downcasting se puede utilizar este objeto ms refinado.

    Graphics2D g2d = (Graphics2D) g ;

    David Contreras Brcena 210

    9.3 Componentes - CanvasClase GraphicsMtodos:

    drawString(String, int, int)

    drawOval(int, int, int, int)

    drawRect(int, int, int, int)

    drawArc(int, int, int, int, int, int)

    drawImage(Image, int, int, ImageObserver)

    drawLine(int, int, int, int)

    drawPolygon(int[], int[], int)

    setColor(Color)

    setFont(Font)

  • Lenguaje de Programacin JAVA 2 IINF y 2 ITIGLenguaje JAVA

    David Contreras Brcena - ETSI

    David Contreras Brcena 211

    9.3 Componentes - CanvasCrear un rea de dibujo:class MiCanvas extends Canvas implements MouseListener {

    int x=50;int y=50;int radioX=30;int radioY=30;

    MiCanvas(){

    this.setBackground(Color.white);this.addMouseListener(this);this.setFont(new Font("Courier", Font.BOLD, 24));this.setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR));

    }

    public void paint(Graphics g){

    g.setColor(Color.red);g.drawString("Dibuja Circunferencias",50,20);g.setColor(Color.blue);g.drawLine(50,40,340,40);g.setColor(Color.green);g.drawOval(x,y,radioX, radioY);

    }

    David Contreras Brcena 212

    9.3 Componentes - Canvaspublic void mousePressed(MouseEvent e) {

    x=e.getX();y=e.getY();

    }

    public void mouseReleased(MouseEvent e) {

    radioX=(e.getX()-x);radioY=(e.getY()-y);this.repaint();

    }public void mouseEntered(MouseEvent e) {}public void mouseExited(MouseEvent e) {}public void mouseClicked(MouseEvent e) {}

    }

    Posteriormente se podr aadir una ocurrencia de la clase MiCanvas a cualquier Frame como un componente ms.

  • Lenguaje de Programacin JAVA 2 IINF y 2 ITIGLenguaje JAVA

    David Contreras Brcena - ETSI

    David Contreras Brcena 213

    9.4 Eventos java.awt.eventEste paquete proporciona las clases e interfaces necesarias para gestionar los diferentes tipos de eventos de los componentes de AWT.Los eventos ms importantes que una aplicacin grfica puede registrar son:

    Ratn

    Ratn (Drag & Drop)

    Accin

    Teclado

    Ventana

    Un evento del tipo accin se produce cuando se acciona algn control

    David Contreras Brcena 214

    9.4 Eventos java.awt.eventPara que los componentes puedan recibir eventos deben registrarse previamente indicando qu clase va a gestionarlos.Esta tarea se realiza a travs de la invocacin del mtodo addInterfaz(clase a gestionar el evento).Estas clases deben implementar los interfaces que se correspondan con cada tipo de evento e indicar las acciones a ejecutar en el caso que se active el evento.Los interfaces ms utilizados son los siguientes:

    EventListener

    ActionListener KeyLIstener WindowListenerMouseMotionListenerMouseListener

  • Lenguaje de Programacin JAVA 2 IINF y 2 ITIGLenguaje JAVA

    David Contreras Brcena - ETSI

    David Contreras Brcena 215

    9.4 Eventos java.awt.eventEstos interfaces definen una serie de mtodos que se corresponden con las diferentes acciones asociadas a un tipo de evento determinado.Por ejemplo, en un evento de teclado, el usuario puede presionar o soltar una tecla.Por lo tanto, cuando definamos la clase implementando el interface correspondiente, se tendrn que implementar todos los mtodos definidos en l.Existen tres posibilidades para definir una clase que gestione los eventos de un componente:

    Crear una nueva clase.

    Utilizar la clase que define la ventana, como clase que adems gestionar los eventos.

    Definir una clase annima dentro de la clase de ventana.

    David Contreras Brcena 216

    9.4 Eventos java.awt.event

    public interface ActionListener {

    public void actionPerformed(ActionEvent e); }

    class Ventana extends Frame implements ActionListener{

    }

    Implementacin de todos los mtodos del interface

    Se hereda del interface por parte de la Ventana

    boton.addActionListener(this);

    AceptarEl botn podr recibir eventos del tipo accin y sern

    gestionados por una ocurrencia de la propia clase

  • Lenguaje de Programacin JAVA 2 IINF y 2 ITIGLenguaje JAVA

    David Contreras Brcena - ETSI

    David Contreras Brcena 217

    9.4 Eventos java.awt.eventSi se desea obtener informacin del evento producido, se puede hacer a travs del argumento de cada mtodo invocado.Por ejemplo, si se desea saber la tecla que se ha pulsado sobre una caja de texto, deberemos operar de la siguiente manera:

    Aplicar un listener que gestione los eventos de tipo teclado sobre la caja de texto: cajaTexto.addKeyListener(new A());Implementar el interface KeyListener con todos sus mtodos.Identificar el mtodo asociado al evento pulsar una tecla.Trabajar con el objeto que recibe el mtodo en el argumento, ya que es ste quin posee toda la informacin del evento producido.

    David Contreras Brcena 218

    9.4 Jerarqua de Interfaces de Eventos

    AWTEvent

    WindowEventActionEvent

    InputEvent

    ComponentEvent

    MouseEvent KeyEvent

    Clases que recogen informacin de los eventos:

  • Lenguaje de Programacin JAVA 2 IINF y 2 ITIGLenguaje JAVA

    David Contreras Brcena - ETSI

    David Contreras Brcena 219

    9.4 Jerarqua de Interfaces de EventosClases que implementan los interfaces:

    java.awt.event.KeyAdapter (implements KeyListener) java.awt.event.MouseAdapter (implements MouseListener) java.awt.event.MouseMotionAdapter (implements MouseMotionListener)

    java.awt.event.WindowAdapter (implements WindowListener)

    La ventaja que nos proporcionan las clases del tipo Adapter es que realizan la implementacin de todos los mtodos del interface. De esta manera, se puede heredar de ella, y slo se redefinir el mtodo necesario.

    David Contreras Brcena 220

    9.4 Eventos de VentanaDefinidos en el interface WindowListener:

    Mtodos:public void windowClosed(WindowEvent event) public void windowDeiconified(WindowEvent event) public void windowIconified(WindowEvent event) public void windowActivated(WindowEvent event) public void windowDeactivated(WindowEvent event) public void windowOpened(WindowEvent event) public void windowClosing(WindowEvent event)

  • Lenguaje de Programacin JAVA 2 IINF y 2 ITIGLenguaje JAVA

    David Contreras Brcena - ETSI

    David Contreras Brcena 221

    9.4 Ejemplo eventos de ventana (I)Ejemplo de implementacin del interface.

    class Ventana extends Frame implements WindowListener{

    Ventana() { ;

    this.addWindowListener(this); }//Hay que implementar todos los mtodospublic void windowClosed(WindowEvent event) { }public void windowDeiconified(WindowEvent event) { }public void windowIconified(WindowEvent event) { }public void windowActivated(WindowEvent event) { }public void windowDeactivated(WindowEvent event) { }public void windowOpened(WindowEvent event) { }public void windowClosing(WindowEvent event)

    {System.exit(0);}}

    David Contreras Brcena 222

    9.4 Ejemplo eventos de ventana (II)Ejemplo sin implementacin del interface, a travs de la utilizacin de una clase annima interna.Implementacin del interfaz a travs de WindowAdapter.nicamente se implementa el mtodo deseado.De esta manera, no es nuestra clase la que gestiona el evento, sino la clase annima creada de dentro de ella.

    class Ventana extends Frame{

    Ventana() { this.addWindowListener(new WindowAdapter()

    {public void windowClosing(WindowEvent e) { System.exit(0); }

    });}

    }

  • Lenguaje de Programacin JAVA 2 IINF y 2 ITIGLenguaje JAVA

    David Contreras Brcena - ETSI

    David Contreras Brcena 223

    9.4 Eventos de TecladoImplementar el interface KeyListener:

    Mtodos:public void keyTyped(KeyEvent e) public void keyPressed(KeyEvent e) public void keyReleased(KeyEvent e)

    David Contreras Brcena 224

    9.4 Eventos de Teclado EjemploEjemplo de implementacin del interface.

    public class ClienteWindow extends Applet implements KeyListener

    {

    textoMensaje.addKeyListener(this);

    public void keyTyped(KeyEvent e) {} public void keyReleased(KeyEvent e) {}public void keyPressed(KeyEvent e) {

    int code = e.getKeyCode();if(KeyEvent.VK_ENTER == code){

    }}

    }

  • Lenguaje de Programacin JAVA 2 IINF y 2 ITIGLenguaje JAVA

    David Contreras Brcena - ETSI

    David Contreras Brcena 225

    9.4 Eventos sobre ComponentsImplementar el interface ActionListener:

    Mtodos:public void actionPerformed(ActionEvent e)

    David Contreras Brcena 226

    9.4 Ejemplo de Eventos sobre componentes (I)Ejemplo de implementacin del interface.

    public class ClienteWindow extends Applet implements ActionListener {

    boton.addActionListener(this);

    public void actionPerformed(ActionEvent event) {

    Object source = event.getSource();if (source == boton) {

    }}

  • Lenguaje de Programacin JAVA 2 IINF y 2 ITIGLenguaje JAVA

    David Contreras Brcena - ETSI

    David Contreras Brcena 227

    9.4 Ejemplo de Eventos sobre componentes (II)Ejemplo sin implementacin del interface, a travs de la utilizacin de una clase annima.

    boton.addActionListener(new ActionListener() {

    public void actionPerformed(ActionEvent e){

    }});

    David Contreras Brcena 228

    9.4 Eventos de RatnImplementar el interface MouseListener:

    Mtodos:public void mouseClicked(MouseEvent e)public void mouseEntered(MouseEvent e)public void mouseExited(MouseEvent e)public void mousePressed(MouseEvent e)public void mouseReleased(MouseEvent e)

  • Lenguaje de Programacin JAVA 2 IINF y 2 ITIGLenguaje JAVA

    David Contreras Brcena - ETSI

    David Contreras Brcena 229

    9.5 JFC (Java Foundation Classes)Engloba un conjunto de herramientas para el desarrollo de GUIs que contienen las siguientes caractersticas:

    Componentes Swing: Incluye todo tipo de controles grficos.Soporte Look and Feel

    Permite modificar el entorno grfico de una aplicacin en cualquier momento.

    Look & Feels o entornos disponibles: (Java, Windows y Motif)

    API para Java 2DCapacidad para realizar aplicaciones grficos 2D de alta calidad.

    Soporte Drag and DropPermite esta accin entre aplicaciones Java y aplicaciones nativas.

    David Contreras Brcena 230

    9.5 JFC (Java Foundation Classes)La versin de JFC 1.1 se suele llamar la versin Swing. El API de JFC 1.1 se suele llamar tambin el API Swing. "Swing" fue el nombre del proyecto que desarroll los nuevos componentes.Aunque no es el nombre oficial, se utiliza para referirse a los nuevos componentes y a la API del JFC 1.1. Actualmente los paquetes de la API Swing comienzan con javax.swing. Swing refina el comportamiento de AWT, y de esta manera, los nuevos componentes Swing que mejoran el comportamiento de los anteriores AWT, heredan de ellos.Los componentes Swing se caracterizan por comenzar por J.

    FrameJFrame LabelJLabel ButtonJButton

    http://java.sun.com/products/jfc/http://java.sun.com/products/jfc/

  • Lenguaje de Programacin JAVA 2 IINF y 2 ITIGLenguaje JAVA

    David Contreras Brcena - ETSI

    David Contreras Brcena 231

    9.5 Swing vs AWTSe trabaja con paquetes claramente diferenciados: javax.swing vs java.awtLa jerarqua de componentes debe tener un container Swing como base de toda la estructura de la aplicacin grfica y sin mezclar clases AWT con Swing.No se pueden aadir componentes directamente sobre un JFrame, JApplet o JDialog. Se deben aadir sobre un container que devuelve el mtodo getContentPane() de cada uno de estos contenedores. Lo mismo ocurrir al aplicar el layout al container asociado.Nuevos componentes: JTable, JTree, ventanas MDI, etc...

    http://java.sun.com/docs/books/tutorial/uiswing/http://java.sun.com/docs/books/tutorial/uiswing/

    David Contreras Brcena 232

    9.5 JFC (Java Foundation Classes)javax.swing

    JComponent

    JComboBox AbstractButton JPanel JOptionPane JTextComponent

    JButton JMenuItemJToggleButton

    JCheckBox JRadioButton

    JEditorPane JTextFieldJTextArea

  • Lenguaje de Programacin JAVA 2 IINF y 2 ITIGLenguaje JAVA

    David Contreras Brcena - ETSI

    David Contreras Brcena 233

    9.5 Swing vs AWTComponentes sin cdigo nativo (lightweight).

    Imgenes en JLabels y JButtons

    Bordes

    Cambiar look & feel

    Patrn MVC sobre los componentes de estado: JList, JTable, etc.Nuevos eventos (DocumentEvent, TableModelEvent, ...)Nuevos layouts

    http://java.sun.com/docs/books/tutorial/uiswing/http://java.sun.com/docs/books/tutorial/uiswing/components/components.htmlcomponents/components.html

    David Contreras Brcena 234

    9.5 Paso de AWT a SwingPaso 1: Para la utilizacin de componentes, importar del paquete javax.swing en lugar de java.awt. Ojo, los eventos y layouts siguen siendo del paquete java.awt.Paso 2: Cambiar todos los Component AWT por los equivalentes Swing. (Los containers Frame o Panel- tambin son Component)

    Button btnAceptar=new Button(Aceptar); //AWTJButton btnAceptar=new JButton(Aceptar); //Swing

    Paso 3: Los components no se agregan directamente con add(),se agregan a un container virtual que devuelve el mtodo getContentPane() del container:

    this.add(boton1); //AWTthis.getContentPane().add(boton1); //Swing

    Devuelve una ocurrencia de container

  • Lenguaje de Programacin JAVA 2 IINF y 2 ITIGLenguaje JAVA

    David Contreras Brcena - ETSI

    David Contreras Brcena 235

    9.5 Paso de AWT a SwingPaso 4: Los layouts no se aplican directamente a los container, se aplican al container virtual que devuelve el mtodo getContentPane() del container:

    this.setLayout(new FlowLayout()) //AWT

    this.getContentPane().setLayout(new FlowLayout()); //Swing

    http://java.sun.com/docs/books/tutorial/http://java.sun.com/docs/books/tutorial/uiswing/converting/index.htmluiswing/converting/index.html

    David Contreras Brcena 236

    9.5 Paso de AWT a Swing

  • Lenguaje de Programacin JAVA 2 IINF y 2 ITIGLenguaje JAVA

    David Contreras Brcena - ETSI

    David Contreras Brcena 237

    9.5 Paso de AWT a SwingEjemplo de cdigo Swing

    import javax.swing.*;import java.awt.*; //El layout utilizado es de AWT

    public class MiJFrame extends JFrame{

    JButton boton;

    public static void main(String s[]){

    new MiJFrame();}

    public MiJFrame(){

    boton = new JButton("Aceptar");this.getContentPane().setLayout(new FlowLayout());this.getContentPane().add(boton);this.setSize(250,250);this.setVisible(true);

    }}

    David Contreras Brcena 238

    9.6 HOWTO sobre SwingCon estas transparencias se pretende facilitar el desarrollo de aplicaciones GUI.

    Ventana

    Etiquetas

    Botones, Casillas de Verificacin y Botones de Opcin

    Caja de Texto y ComboBox

    Ventanas de Dilogo

    Apariencia de Ventana

    Canvas

  • Lenguaje de Programacin JAVA 2 IINF y 2 ITIGLenguaje JAVA

    David Contreras Brcena - ETSI

    David Contreras Brcena 239

    9.6 HOWTO sobre Swing - JFrameCrear una ventana:

    class Ventana extends JFrame{

    Ventana(String titulo){

    this.setTitle(titulo);this.getContentPane().add(new JButton(Aceptar)); this.setSize(400,400);this.setVisible(true);

    }}

    Gestin de eventos:this.addWindowListener(new WindowAdapter(){

    public void windowClosing(WindowEvent e) {

    dispose();System.exit(0);

    }});

    David Contreras Brcena 240

    9.6 HOWTO sobre Swing - JLabelCrear una etiqueta:

    JLabel etiq=new JLabel("Nombre: ");/* En la siguiente sentencia se asigna un color a la etiqueta utilizando el constructor Color(R,G,B) */

    etiq.setForeground(new Color(255,0,0)); //Rojoetiq.setFont(new Font("Times New Roman",Font.BOLD, 12));

  • Lenguaje de Programacin JAVA 2 IINF y 2 ITIGLenguaje JAVA

    David Contreras Brcena - ETSI

    David Contreras Brcena 241

    9.6 HOWTO sobre Swing - JButtonCrear un botn:

    JButton botonSalir = new JButton("Aceptar");

    Gestin de eventos:botonSalir.addActionListener(new ActionListener(){

    public void actionPerformed(ActionEvent e){

    dispose();System.exit(0);

    }});

    David Contreras Brcena 242

    9.6 HOWTO sobre Swing - JTextCrear una caja de texto:

    JTextField textNombre = new JTextField(10);

    Gestin de eventos:textNombre.addKeyListener(new KeyAdapter(){

    public void keyTyped(KeyEvent e){

    if ((int)e.getKeyChar()== KeyEvent.VK_ENTER)System.out.println(textNombre.getText());

    }});

  • Lenguaje de Programacin JAVA 2 IINF y 2 ITIGLenguaje JAVA

    David Contreras Brcena - ETSI

    David Contreras Brcena 243

    9.6 HOWTO sobre Swing - JComboBoxCrear una lista combinada:

    String datos[] = { Uno, Dos, Tres, Cuatro, Cinco};JComboBox lista = new JComboBox (datos);lista.setBorder(BorderFactory.createLineBorder(Color.red,

    4));

    Gestin de eventos:lista.addActionListener(new ActionListener() {

    public void actionPerformed(ActionEvent e) {

    System.out.println(lista.getSelectedItem());}

    });

    David Contreras Brcena 244

    9.6 HOWTO sobre Swing - JCheckBoxCrear una casilla de verificacin:JCheckBox ch=new JCheckBox("Estudiante", new

    ImageIcon("images/off.gif"), false);ch.setRolloverSelectedIcon(new ImageIcon("images/over.gif"));ch.setRolloverIcon(new ImageIcon("images/over.gif")); ch.setSelectedIcon(new ImageIcon("images/on.gif"));

    Gestin de eventos:ch.addActionListener(new ActionListener()

    {public void actionPerformed(ActionEvent e){

    if(ch.isSelected())mostrarMensaje("Check Activado");

    }});

    Componente Estndar

    Componente

    personalizado segn

    cdigo superior

  • Lenguaje de Programacin JAVA 2 IINF y 2 ITIGLenguaje JAVA

    David Contreras Brcena - ETSI

    David Contreras Brcena 245

    9.6 HOWTO sobre Swing JRadioButtonCrear una botn de opcin:

    ButtonGroup grupo = new ButtonGroup(); rb1 = new JRadioButton("Hombre");rb2 = new JRadioButton("Mujer");

    rb1.setSelected(true);rb1.setMnemonic(KeyEvent.VK_H);rb2.setMnemonic(KeyEvent.VK_M);grupo.add(rb1);grupo.add(rb2);

    Gestin de eventos:rb1.addActionListener(new ActionListener()

    {public void actionPerformed(ActionEvent e){

    if(rb1.isSelected())mostrarMensaje("Radio Hombre

    Activado");}

    });

    David Contreras Brcena 246

    9.6 HOWTO sobre Swing - JOptionPaneEsta clase se utiliza para crear cualquier tipo de dialogo estndar para mostrar o recoger informacin.Relacin (Tipo de dilogo Mtodo esttico):

    Dilogo de Confirmacin (Si/No/Cancelar) showConfirmDialog

    Dilogo de Entrada - showInputDialog

    Dilogo de Mensaje - showMessageDialog

    Dialogo Personalizable - showOptionDialog

    Ejemplo:String nombre = JOptionPane.showInputDialog(this, "Introduzca su nombre, por favor:");

    JOptionPane.showMessageDialog(this, "Proceso finalizado satisfactoriamente");

  • Lenguaje de Programacin JAVA 2 IINF y 2 ITIGLenguaje JAVA

    David Contreras Brcena - ETSI

    David Contreras Brcena 247

    9.6 HOWTO sobre Swing - JFileChooserPermite mostrar los dilogos de Abrir y Guardar como...Relacin (Tipo de dilogo Mtodo instancia):

    Dilogo de Abrir showOpenDialogDilogo de Guardar como... showSaveDialog

    Ejemplo:JFileChooser j = new JFileChooser();int rtn = j.showOpenDialog(this);if (rtn == JFileChooser.APPROVE_OPTION)

    System.out.println(j.getSelectedFile().getPath());

    David Contreras Brcena 248

    9.6 HOWTO sobre Swing Look & FeelModifica la apariencia de nuestra ventana.Tipos:

    Ejemplo:int i=1; //Apariencia MotifUIManager.LookAndFeelInfo looks[];looks = UIManager.getInstalledLookAndFeels();try {

    UIManager.setLookAndFeel(looks[i].getClassName());SwingUtilities.updateComponentTreeUI(this);

    }catch(Exception e) {}

    Metal (0) Motif (1) Windows (2) Windows Classic (3)

  • Lenguaje de Programacin JAVA 2 IINF y 2 ITIGLenguaje JAVA

    David Contreras Brcena - ETSI

    David Contreras Brcena 249

    9.5 HOWTO sobre Swing Look & FeelTambin es posible pasar como parmetro el nombre de la clase del Look & Feel:

    Metal javax.swing.plaf.metal.MetalLookAndFeel

    Motif com.sun.java.swing.plaf.motif.MotifLookAndFeel

    Windows com.sun.java.swing.plaf.windows.WindowsLookAndFeel

    Windows Classic com.sun.java.swing.plaf.windows.WindowsClassicLookAndFeel

    Ejemplo:try {

    UIManager.setLookAndFeel(com.sun.java.swing.plaf.windows.WindowsLookAndFeel);

    SwingUtilities.updateComponentTreeUI(this);}catch(Exception e) {}

    David Contreras Brcena 250

    9.5 HOWTO sobre Swing Look & Feel (Themes)Un tema contiene los detalles de la apariencia grfica utilizados para personalizar el Look & Feel.Themes definidos en swing:

    SteelOcean (desde J2SE 5.0)

    Ejemplo://theme metal

    MetalLookAndFeel.setCurrentTheme(new DefaultMetalTheme());/* theme oceanMetalLookAndFeel.setCurrentTheme(new OceanTheme());*/try {

    UIManager.setLookAndFeel(new MetalLookAndFeel());SwingUtilities.updateComponentTreeUI(this);

    }catch (Exception e){}

  • Lenguaje de Programacin JAVA 2 IINF y 2 ITIGLenguaje JAVA

    David Contreras Brcena - ETSI

    David Contreras Brcena 251

    9.5 HOWTO sobre Swing Look & Feel (Themes)Es posible definir un tema propio, personalizando de esta manera el Look & Feel. La clase que defina el tema debe heredar de DefaultMetalTheme

    Ejemplo:public class EstiloHalloween extends DefaultMetalTheme{

    public String getName() { return "Halloween";

    }//color del borde externoprivate final ColorUIResource primary1 = new ColorUIResource(204,102,0);//color del borde internoprivate final ColorUIResource primary2 = new ColorUIResource(255,0,0);//color de la barra de tituloprivate final ColorUIResource primary3 = new ColorUIResource(255,204,102);//color de los botones, labelsprivate final ColorUIResource secondary1 = new ColorUIResource(111,111,111);//color de los botones al estar presionadosprivate final ColorUIResource secondary2 = new ColorUIResource(255,204,102);

    }

    David Contreras Brcena 252

    9.5 HOWTO sobre Swing Look & Feel (Themes)import javax.swing.plaf.*;import javax.swing.plaf.metal.*;import javax.swing.*;

    public class HalloweenTheme extends DefaultMetalTheme{

    private final ColorUIResource primary1 = new ColorUIResource(204, 102, 0); //borde externoprivate final ColorUIResource primary2 = new ColorUIResource(255, 0, 0); //borde interno y focoprivate final ColorUIResource primary3 = new ColorUIResource(255, 204, 102); //barra de ttuloprivate final ColorUIResource secondary1 = new ColorUIResource( 111, 111, 111); //borde botonesprivate final ColorUIResource secondary2 = new ColorUIResource(255, 204, 102); //botones clickprivate final ColorUIResource secondary3 = new ColorUIResource(204, 102, 0); //fondo botonesprivate final ColorUIResource black = new ColorUIResource(255, 255, 255); //letras cajas textoprivate final ColorUIResource white = new ColorUIResource(0, 0, 0); //fondo cajas de texto

    public String getName() { return "Halloween"; }

    protected ColorUIResource getPrimary1() { return primary1; }protected ColorUIResource getPrimary2() { return primary2; }protected ColorUIResource getPrimary3() { return primary3; }protected ColorUIResource getSecondary1() { return secondary1; }protected ColorUIResource getSecondary2() { return secondary2; }protected ColorUIResource getSecondary3() { return secondary3; }protected ColorUIResource getBlack() { return black; }protected ColorUIResource getWhite() { return white; }

    }

  • Lenguaje de Programacin JAVA 2 IINF y 2 ITIGLenguaje JAVA

    David Contreras Brcena - ETSI

    David Contreras Brcena 253

    9.6 HOWTO sobre Swing MensCada ventana puede tener su propia barra de mens.

    AWT ofrece:

    JMenuBar: para crear la barra de mens

    JMenu: para los diferente mens de la barra

    Elementos del men:

    instancias de la clase JMenuItem para elementos normales.

    instancias de la clase JCheckBoxMenuItem.

    otros mens.

    separadores, gracias al mtodo addSeparator().

    David Contreras Brcena 254

    9.6 HOWTO sobre Swing MensEjemplo:

    class Ventana{

    ...

    public Ventana(){

    JMenuBar mb=new JMenuBar();JMenu m=new JMenu("Archivo");m.add(new JMenuItem("Abrir..."));m.add(new JMenuItem("Guardar..."));m.addSeparator();m.add(new JCheckBoxMenuItem ("Guardar Cambios"));mb.add(m );this.setJMenuBar(mb);

    ...

    }}

  • Lenguaje de Programacin JAVA 2 IINF y 2 ITIGLenguaje JAVA

    David Contreras Brcena - ETSI

    David Contreras Brcena 255

    9.6 HOWTO sobre Swing ImgenesCrear una imagen:

    JLabel imagen = new JLabel(new ImageIcon("imagen.jpg"));

    Asociar una imagen a un botn:

    JButton btn1 = new JButton("Mostrar", new ImageIcon("imagenSmall.jpg"));JButton btn2 = new JButton("Ocultar");btn2.setIcon(new ImageIcon("imagenSmall.jpg"));

    Asociar una imagen al Frame :

    ImageIcon icono = new ImageIcon("app.jpg")this.setIconImage(icono.getImage());

    David Contreras Brcena 256

    9.6 HOWTO sobre Swing MDICrear aplicaciones MDI (Mltiples ventanas dentro de una principal):

    JDesktopPane desktop = new JDesktopPane();

    JInternalFrame ifr1=new JInternalFrame("Internal 1");ifr1.setSize(100,100);ifr1.setVisible(true);ifr1.setLocation(new Point(1,1));

    JInternalFrame ifr2=new JInternalFrame("Internal 2");ifr2.setSize(100,100);ifr2.setVisible(true);ifr2.setLocation(new Point(10,10));

    ifr2.moveToFront();

    desktop.add(ifr2);desktop.add(ifr1);

    this.getContentPane().add(desktop);

  • Lenguaje de Programacin JAVA 2 IINF y 2 ITIGLenguaje JAVA

    David Contreras Brcena - ETSI

    David Contreras Brcena 257

    9.6 HOWTO sobre Swing TabbedPaneCrear control de pestaas:

    JTabbedPane tabbedPane = new JTabbedPane();

    JPanel panel1 = new JPanel(new BorderLayout());JLabel etiqueta1=new JLabel("HOLA");etiqueta1.setHorizontalAlignment(JLabel.CENTER);panel1.add(etiqueta1, BorderLayout.NORTH);

    JPanel panel2 = new JPanel(new BorderLayout());JLabel etiqueta2=new JLabel("ADIOS");etiqueta2.setHorizontalAlignment(JLabel.CENTER);panel2.add(etiqueta2, BorderLayout.NORTH);

    tabbedPane.addTab("Pestaa 1", panel1);tabbedPane.addTab("Pestaa 2", panel2);

    tabbedPane.setSelectedIndex(0);

    this.getContentPane().add(tabbedPane);

    Crear el contenido

    de una pestaa

    Crear el contenido de la otra pestaa

    David Contreras Brcena 258

    9.5 HOWTO sobre Swing - JSplitPane

    Crear el separador:JPanel jsp1 = new JPanel();JPanel jsp2 = new JPanel();SplitPane splitPane = new JSplitPane

    (JSplitPane.VERTICAL_SPLIT, true, jsp1, jsp2); splitPane.setOneTouchExpandable(true);

    //otra opcinSplitPane splitPane = new JSplitPane

    (JSplitPane.HORIZONTAL_SPLIT, true, jsp1, jsp2);

  • Lenguaje de Programacin JAVA 2 IINF y 2 ITIGLenguaje JAVA

    David Contreras Brcena - ETSI

    David Contreras Brcena 259

    9.5 HOWTO sobre Swing - JProgressBarCrear la barra de progreso:JProgressBar progressBar = new JProgressBar();//para mostrar valoresprogressBar.setStringPainted(true); //si se desconoce la duracin de la tarea: progressBar.setIndeterminate(true);progressBar.setValue(0);//mientras se hace el trabajo:progressBar.setValue(valor);//al terminar el trabajoprogressBar.setIndeterminate(false);

    //si se conoce la duracin de la tarea no hay que //utilizar el mtodo setIndeterminate. Incluir:progressBar.setMaximum(valor);

    David Contreras Brcena 260

    9.5 HOWTO sobre Swing - JTreeCrear un rbol:

    //se crean las hojasDefaultMutableTreeNode nivel1 = new DefaultMutableTreeNode ("Nivel 1");DefaultMutableTreeNode nivel2a = new DefaultMutableTreeNode ("Nivel 2");DefaultMutableTreeNode nivel2b = new DefaultMutableTreeNode ("Nivel 2");DefaultMutableTreeNode nivel3 = new DefaultMutableTreeNode ("Nivel 3");

    //se anidan los nivelesnivel1.add(nivel2a); nivel1.add(nivel2b); nivel2a.add(nivel3);

    //se crea el rbol con el nodo razJTree tree = new JTree(nivel1);

  • Lenguaje de Programacin JAVA 2 IINF y 2 ITIGLenguaje JAVA

    David Contreras Brcena - ETSI

    David Contreras Brcena 261

    9.5 HOWTO sobre Swing - JTreeGestin de eventos:

    tree.addTreeSelectionListener(new TreeSelectionListener() {

    public void valueChanged(TreeSelectionEvent e) {

    DefaultMutableTreeNode node = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent();

    if (node != null)Object nodeInfo = node.getUserObject();

    }});

    David Contreras Brcena 262

    9.5 HOWTO sobre Swing JSliderCrear un deslizador:

    JSlider slider = new JSlider(JSlider.HORIZONTAL, 0, 30, 0);/*se crea con valor inferior 0, superior 30 y valor inicial 0*/slider.setMajorTickSpacing(10);slider.setMinorTickSpacing(1);slider.setPaintTicks(true);slider.setPaintLabels(true);

    Gestin de eventos:

    slider.addChangeListener(new ChangeListener(){

    public void stateChanged(ChangeEvent e){

    int valor = (int) ((JSlider)e.getSource()).getValue(); }

    });

  • Lenguaje de Programacin JAVA 2 IINF y 2 ITIGLenguaje JAVA

    David Contreras Brcena - ETSI

    David Contreras Brcena 263

    9.5 HOWTO sobre Swing - JTableCrear una tabla:

    DefaultTableModel dtm= new DefaultTableModel();JTable tabla = new JTable(dtm);for(int column = 0; column < 5; column++){

    dtm.addColumn("Columna " + column); //insertamos columnas}Object[] data = new Object[5];for(int row = 0; row < 10; row++) {

    for(int column = 0; column < 5; column++) {data[column] = "Celda " + row + "," + column; //contenido

    }dtm.addRow(data);

    }

    Gestin de eventos:tabla.addMouseListener(new MouseAdapter() {

    public void mouseClicked(MouseEvent e) {int fila = tabla.rowAtPoint(e.getPoint());int columna = tabla.columnAtPoint(e.getPoint());String contenido;if ((fila > -1) && (columna > -1))

    contenido = dtm.getValueAt(fila,columna).toString();}});

    David Contreras Brcena 264

    9.5 HOWTO sobre Swing Drag&DropSe descompone en dos roles distintos: Dragging y Dropping

    Dragging: hacer click sobre un objeto, presionar el ratn y arrastrarel objeto hacia alguna otra parte de la aplicacin.Dropping: si se arrastra un tem a un componente, observar estehecho y aceptarlo.

    Se necesita cdigo para facilitar ambos

    Dos clases: DragSource y DropTarget.

    Mediante la propiedad setDragEnabled los siguientes componentes permiten drag and drop sin escribir cdigo:JEditorPane, JFormattedTextField, JTextArea, JTextField, JTextPane

  • Lenguaje de Programacin JAVA 2 IINF y 2 ITIGLenguaje JAVA

    David Contreras Brcena - ETSI

    David Contreras Brcena 265

    9.5 HOWTO sobre Swing Drag&DropEjemplo sobre JTextField y JLabel

    /*Este ejemplo permite arrastrar texto entre JTextField y Jlabel*/

    JTextField textField = new JTextField(40);textField.setDragEnabled(true); //para permitir drag

    Jlabel label = new JLabel(Etiqueta);label.setTransferHandler(new TransferHandler("text"));label.addMouseListener(new DragMouseAdapter());

    /*aade soporte de Drag al Jlabel ya que no acepta el mtodosetDragEnabled*/

    private class DragMouseAdapter extends MouseAdapter {public void mousePressed(MouseEvent e) {

    JComponent c = (JComponent)e.getSource();TransferHandler handler = c.getTransferHandler();handler.exportAsDrag(c, e, TransferHandler.COPY);

    }}

    David Contreras Brcena 266

    9.7 Prctica AWTRealizar la siguiente aplicacin grfica:

    Almacenar en

    disco

    informacin del

    objeto

    Leer de disco y

    mostrar la

    informacin del

    objeto en pantalla

  • Lenguaje de Programacin JAVA 2 IINF y 2 ITIGLenguaje JAVA

    David Contreras Brcena - ETSI

    David Contreras Brcena 267

    9.7 Solucin a la Prcticapublic class VentanaGrid extends Frame implements

    ActionListener, WindowListener{ TextField nombre, dni, tipo;

    Button botonWrite, botonRead;public VentanaGrid(String titulo){ Label label1, label2, label3;

    this.setTitle(titulo);label1 = new Label("Nombre: ");nombre = new TextField(10);label2 = new Label("DNI: ");dni = new TextField(2);label3 = new Label("Tipo: ");tipo = new TextField(2);botonWrite = new Button("Escribir");botonRead = new Button("Leer");

    David Contreras Brcena 268

    9.7 Solucin a la Prcticathis.setLayout(new GridLayout(4,2));this.add(label1);this.add(nombre);this.add(label2);this.add(dni);this.add(label3);this.add(tipo);this.add(botonWrite);this.add(botonRead);botonWrite.addActionListener(this);botonRead.addActionListener(this);this.addWindowListener(this);this.pack();this.show();

    }

  • Lenguaje de Programacin JAVA 2 IINF y 2 ITIGLenguaje JAVA

    David Contreras Brcena - ETSI

    David Contreras Brcena 269

    9.7 Solucin a la Prcticapublic void windowClosed(WindowEvent event) { }public void windowDeiconified(WindowEvent event) {}public void windowIconified(WindowEvent event) {}public void windowActivated(WindowEvent event) {}public void windowDeactivated(WindowEvent event){}public void windowOpened(WindowEvent event) {}public void windowClosing(WindowEvent event) {System.exit(0); }

    David Contreras Brcena 270

    9.7 Solucin a la Prcticapublic void actionPerformed(ActionEvent event) { Object source = event.getSource();

    Programador p=null;if (source == botonWrite) { p=new Programador(nombre.getText(),

    Integer.parseInt(dni.getText()), tipo.getText());p.write();nombre.setText(" ");dni.setText(" ");tipo.setText(" ");

    }if (source == botonRead) { p=(Programador)Programador.read();

    nombre.setText(p.getNombre());dni.setText(String.valueOf(p.getDni()));tipo.setText(p.getTipo());

    }}

    }

  • Lenguaje de Programacin JAVA 2 IINF y 2 ITIGLenguaje JAVA

    David Contreras Brcena - ETSI

    David Contreras Brcena 271

    9.8 AppletsAunque la palabra applet deriva de aplicacin pequea, la mayora de aplicaciones desarrolladas en Java, puede ser un Applet.Un applet es una aplicacin JAVA, capaz de ejecutarse de forma remota a travs de Internet, desde un navegador.Tecnologa cliente: La ejecucin de la aplicacin se realiza en la mquina cliente. Un applet debe heredar de la clase Applet.

    David Contreras Brcena 272

    9.8 Applets De JFrame a JAppletEl mtodo main(String[] )pasa a ser ahora el mtodo init().Las clases y constructores debern ser pblicas.El tamao del frame se asigna ahora a travs de la pginas html. Por este motivo tendrn que desaparecer los mtodos de asignacin de tamao (setSize()) o ajuste (pack()).

  • Lenguaje de Programacin JAVA 2 IINF y 2 ITIGLenguaje JAVA

    David Contreras Brcena - ETSI

    David Contreras Brcena 273

    9.8 Applets - RestriccionesUn applet no puede realizar accesos a disco. De este modo garantiza la seguridad del usuario que ejecuta un applet.Existen los llamados applet trusted, que pueden saltarse esta restriccin en un dominio de confianza.

    David Contreras Brcena 274

    9.8 Applets - Mtodospaint( Graphics g ): Se llama cada vez que se necesita refrescar el rea de dibujo del applet. Se implementa el contenido del applet.init(): Se invoca al crear el applet. Se debe implementar para la inicializacin del applet (p.e. carga de imgenes y sonido, el resize del applet para que tenga su tamao correcto, asignacin de valores a las variables globales, etc.)repaint(): Se invocar este mtodo cuando se necesite actualizar el contenido del applet. Internamente llama a update() que borrar el rectngulo sobre el que se redibujar y luego se llama a paint().

  • Lenguaje de Programacin JAVA 2 IINF y 2 ITIGLenguaje JAVA

    David Contreras Brcena - ETSI

    David Contreras Brcena 275

    9.8 Applets - Mtodosstart(): Se invoca automticamente. Activa el applet. Las clases heredadas deberan sobrecargarlo para comenzar una animacin, sonido, etc.stop(): Se invoca al finalizar el applet.

    David Contreras Brcena 276

    9.8 Applets - Ejemploimport java.awt.Graphics; import java.applet.Applet;

    public class HolaMundo extends Applet {

    public void paint( Graphics g ) {

    g.drawString( Hola Manuel,25,25 );}

    }

  • Lenguaje de Programacin JAVA 2 IINF y 2 ITIGLenguaje JAVA

    David Contreras Brcena - ETSI

    David Contreras Brcena 277

    9.8 Applets - Ejecucin del AppletPara que se pueda visualizar debe ir contenido en una pgina html.La pgina se puede ejecutar de dos formas:

    Navegador

    Appletviewer: Visor de Applets (contenidos en pginas) que posee el SDK.

    David Contreras Brcena 278

    9.8 Applets - Etiqueta

    Parmetros ObligatoriosCODE : Nombre de la clase principal

    WIDTH : Anchura inicial

    HEIGHT : Altura inicial

    Parmetros OpcionalesARCHIVE : Archivo JAR

    CODEBASE : URL base del applet

    ALT : Texto alternativo

    NAME : Nombre de la instancia

  • Lenguaje de Programacin JAVA 2 IINF y 2 ITIGLenguaje JAVA

    David Contreras Brcena - ETSI

    David Contreras Brcena 279

    9.8 Applets - Ejemplo etiqueta

    David Contreras Brcena 280

    9.8 Applets - Ejemplo etiqueta Un applet puede recibir parmetros a travs de la etiqueta .

    El mtodo getParameter(String parametro) es el encargado de recoger estos parmetros.

    public void init() {

    nombre = this.getParameter("Nombre"); }

  • Lenguaje de Programacin JAVA 2 IINF y 2 ITIGLenguaje JAVA

    David Contreras Brcena - ETSI

    David Contreras Brcena 281

    9.8 Applets - Prctica de AppletsRealizar un reloj animado.

    David Contreras Brcena 282

    9.8 Applets - Prctica de Appletsimport java.awt.Graphics;import java.util.*;import java.text.DateFormat;import java.applet.Applet;

    public class Reloj extends Applet implements Runnable { private Thread relojThread = null;

    public void start() {

    if (relojThread == null) {

    relojThread = new Thread(this, Reloj");relojThread.start();

    }}

  • Lenguaje de Programacin JAVA 2 IINF y 2 ITIGLenguaje JAVA

    David Contreras Brcena - ETSI

    David Contreras Brcena 283

    9.8 Applets - Prctica de Appletspublic void run() {

    while (true) {

    repaint();try {

    Thread.sleep(1000);}catch (InterruptedException e){ }

    }}

    David Contreras Brcena 284

    9.8 Applets - Prctica de Appletspublic void paint(Graphics g){

    Calendar cal = Calendar.getInstance();Date date = cal.getTime();DateFormat dateFormatter =

    DateFormat.getTimeInstance();g.drawString(dateFormatter.format(date), 5, 10);

    }

    public void stop() {

    relojThread = null;}

    }