Upload
beatriz
View
230
Download
18
Tags:
Embed Size (px)
DESCRIPTION
La biblia de java
Citation preview
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;}
}