SlideShare una empresa de Scribd logo
1 de 95
Descargar para leer sin conexión
Java GUI
La librería Swing
//java.sun.com/docs/books/tutorial/uiswing
//programacion.com/java/tutorial/swing/
PROGRAMACIÓN CONDUCIDA POR EVENTOS


  En programas tradicionales (basados en texto):
    el programa controla el flujo de la ejecución
    el programa controla la secuencia de las entradas
  Los programas con GUI son “event-driven”
    la secuencia de las entradas controlan el flujo de la
     ejecución
    el sistema invoca código del usuario
PROGRAMACIÓN CONDUCIDA POR EVENTOS




  Código
    del
  sistem
     a

                           Su código
GENERACIÓN DE EVENTOS


 1. Las acciones tales como: pulsar un botón, mover el
    mouse, etc. son reconocidas e identificadas por los
    sistemas operativos (OS) o la JVM.
 2. Por cada acción el OS/JVM determinan cuál de los
   programas que se están ejecutando recibirán la señal
   (de la acción).
 3. Las señales que la aplicaciones reciben del OS/JVM como
   resultado de una acción son llamadas eventos.
GENERACIÓN DE EVENTOS


                             GUI

                              Acciones Mouse, Teclado,etc.
                Sistema Operativo

                    JAVA API /Windows
                                             Eventos


   Métodos y handlers               Métodos y handlers
     Aplicación 1                    Aplicación 2
MANEJO DE EVENTOS

 Una aplicación responde a los eventos ejecutando
 código adecuado para cada tipo particular de eventos.
 No todos los eventos necesitan ser tenidos en cuenta por
 una aplicación. Por ejemplo: Una aplicación para dibujar
 puede estar interesada sólo en movimientos del mouse.
 Como diseñador de una aplicación manejada por eventos,
 deberá escribir clases/métodos para manejar los eventos
 relevantes.
JAVA GUI


    Java provee dos librerías para crear GUIs:
      Java AWT (Abstract Window Toolkit)
      Java Foundation Classes (JFC o Swing), a
       partir de Java2
JAVA FOUNDATION CLASSES


 JFC es una colección muy
  grande de software.
 AWT y Swing son las dos
  grandes familias para                 AWT      Swing
  desarrollo de GUI en
  el entorno Java.                       Drag & Drop

                                        2D API
                             JFC APIs
                                        Accessibility
JAVA FOUNDATION CLASSES
SWING

 Implementada sin usar código nativo (100% Java),
 con lo cual la GUI se verá de la misma forma
 en distintas plataformas.
 Basada en la arquitectura MVC.
 Ofrece una amplia variedad de Look & Feel.
 Los componentes de Swing continuarán siendo
 mejorados en el futuro.
AWT Y SWING

   Los componentes de Swing tienen nombres que
   comienzan con J.
     Ejemplo: Button en AWT es JButton en Swing
   Los componentes de AWT están en el paquete
   java.awt, los de Swing en javax.swing.
   import javax.swing.*;
   import java.awt.*;
   import java.awt.event.*;
PAQUETES JFC/SWING

                                    • javax.swing
 •   javax.swing.plaf               • javax.swing.table
 •   javax.swing.plaf.basic         • javax.swing.tree
 •   javax.swing.plaf.metal         • javax.swing.border
 •   javax.swing.plaf.multi         • javax.swing.colorchooser
                                    • javax.swing.filechooser




 •   javax.swing.text
 •   javax.swing.text.html
 •   javax.swing.text.html.parser
                                    • javax.swing.event
 •   javax.swing.text.rtf           • javax.swing.undo
PAQUETES JFC/SWING

                                           Componentes,
Control del                                incluyendo
“Look & Feel”                              componentes
de Swing                                   complejos




   Widgets basados en texto
                              Paquetes nuevos de eventos
   ( incluyendo html/rtf )
APLICACIONES BASADAS EN GUI

   El desarrollo de una aplicación basada en GUI
   requiere la comprensión de:
     Estructura de la jerarquía de herencia, que define
      el comportamiento y atributos de los componentes
      en la GUI de la aplicación.
     Estructura de la jerarquía de contenedores, que
      define cómo se disponen todos los componentes
      en la GUI de la aplicación.
     Manejo de eventos.
JERARQUÍA DE HERENCIA
HERENCIA “HEAVY”

     java.awt.Panel                               java.awt.Window




       java.applet.Applet       java.awt.Dialog




              JApplet       JDialog               JWindow           JFrame
HEAVYWEIGHT VS. LIGHTWEIGHT
CONTENEDORES EN SWING

                                          java.awt.Container

JMenu


                                                                                           JMenuBar
                                            JComponent


JLayeredPane
                                                                                             JRootPane
                      JPanel




                                                                                             JTabbedPane
JDesktopPane




               JSplitPane
                                           JPopupMenu                     JInternalFrame        JScrollPane



                            JOptionPane                        JToolbar
Similar a
AWT
Nuevos
de Swing
COMPONENTES DE SWING

   La clase Component (y sus subclases) proveen soporte
   para manejo de eventos, cambio del tamaño de un
   componente, control de color y fuentes, pintado.
   Un componente es un objeto de una subclase concreta.
   Se distinguen dos clases de componentes:
     Componentes de control de la GUI: la interacción
     de la GUI con el usuario se realiza a través de ellos.
     Contenedores: contienen otros componentes (u otros
      contenedores).
CONTENEDORES

   Anidamiento de componentes (Jerarquía de contenedores
    en contraste con la Jerarquía de herencia). Cada
    programa Swing contiene al menos una.
   Usan un Layout Manager para determinar cómo se
    disponen los componentes en los contenedores.
   Swing provee 4 contenedores de alto nivel (ventana
    base de la GUI): JFrame, JApplet, JDialog y JWindow.
   La jerarquía está compuesta de diferentes capas.
    Cada contenedor de alto nivel contiene un contenedor
    intermedio conocido como “content pane ”. En casi todos
    los programas no es necesario conocer qué hay entre el
    contenedor de alto nivel y el content pane.
JERARQUÍA DE CONTENEDORES
JERARQUÍA DE CONTENEDORES


  La apariencia de una GUI está determinada por:
     La jerarquía de contenedores
     El Layout Manager de cada contenedor
     Las propiedades de los componentes individuales

  Todos estos ítems trabajan en conjunto para determinar
   el efecto visual final.
ESTRUCTURA DE UN JFRAME
ESTRUCTURA DE UN JFRAME
ROOT PANES

   “Añadido” en forma invisible al contenedor de alto nivel.
   Creado por Swing cuando instancia un contenedor de alto
   nivel.
   Maneja prácticamente todo entre el contenedor de alto
   nivel y los componentes atómicos.
   Tener en cuenta si necesita interceptar clicks del mouse o
   pintar sobre varios componentes.
   Es una instancia de JLayeredPane la que contiene la barra
   de menús y el content pane.
CONTENT PANES


   Usualmente es un JPanel.
   En la mayoría de las aplicaciones Swing contiene casi
   todo, excepto la barra de menú.
   Debe ser creado explícitamente.
LAYERED PANES

   Provisto por root pane pero también puede crearse.
   Contenedor con profundidad, tal que componentes
   que se superponen (ej:popup menus) pueden aparecer
   unos encima de otros (z-buffering).
GLASS PANES

   Util para pintar o interceptar eventos (por ejemplo:
    bloquear todos los eventos del mouse) en un área que
    contenga uno o más componente
CONTENEDORES DE ALTO NIVEL




 Applet      Dialog      Frame
CONTENEDORES GENERALES




             Scroll Pane             SplitPane
Panel




TabbedPane                 Toolbar
CONTENEDORES ESPECIALES




     InternalFrame   LayeredPane



Root Pane
JFRAME
ALGUNOS MÉTODOS DE JFRAME


   Para añadir componentes al content pane:
 myFrameInstance.getContentPane().add(myComponent);



 Usual                 Requerido por           Ej.:
 “this”                Instancias de           “myLabel”
                       JFrame,
                       JDialog y
                       JInternalFrame
ALGUNOS MÉTODOS DE JFRAME


 Para construir una ventana con un título y mostrarla:
   JFrame theWindow = new JFrame( "Graffiti" );
   theWindow.show( );
   //idem theWindow.setVisible(true);

 Para determinar su tamaño:
   theWindow.setJMenuBar(cyanMenuBar);
   theWindow.setSize( 220, 100 );//o mejor
   theWindow.pack();
NUEVA FUNCIONALIDAD DE JFRAME

  setDefaultCloseOperation(int) es la más importante:

    DO_NOTHING_ON_CLOSE

    HIDE_ON_CLOSE (default) oculta el frame cuando el
     usuario lo cierra pero no se deshace de los recursos del
     sistema asociados (puedo volver a mostrar).
    DISPOSE_ON_CLOSE oculta el frame y llama al

     método dispose(), para liberar recursos.

    EXIT_ON_CLOSE, cierra la aplicación (System.exit(0))
HELLO WORLD EN SWING

  import javax.swing.*;
  public class HelloWorldSwing {
   public static void main(String[] args) {// crear un nuevo frame
  JFrame frame = new JFrame("HelloWorldSwing");
  // crear una etiqueta y añadir al frame
  JLabel label = new JLabel("Hello World");
  frame.getContentPane().add(label);
  //especifica la operación de cierre de la ventana
  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  // muestra el frame en pantalla
  frame.pack(); frame.setVisible(true);}}
COMPONENTES ATÓMICOS


   Componentes de tipo JPanel almacenan otros objetos
   de la GUI tales como: botones, etiquetas,
   campos de texto, etc. Estos objetos gráficos son
   considerados componentes atómicos, puesto que no
   pueden almacenar otros objetos de la GUI.
COMPONENTES ATÓMICOS BÁSICOS




 Buttons      Combo Box        List




  Menu     Slider    Spinner   Text Fields
COMPONENTES ATÓMICOS NO EDITABLES




  Label   Progress Bar   Tool tip
OTROS COMPONENTES ATÓMICOS




  Color Chooser          File Chooser




   Table          Text              Tree
API DE LOS COMPONENTES GUI



 Componente GUI en Java= class

  Propiedades                    JButton

  Métodos

  Eventos
COMPONENTES GUI

   1.- Crear
         Instanciar objeto: b = new JButton(“press me”);
   2.- Configurar
         Propiedades: b.text = “press me”; (evitar en Java)
         Métodos:
        b2 = new JButton("Middle button", middleButtonIcon);
         b2.setVerticalTextPosition(AbstractButton.BOTTOM);
        b2.setHorizontalTextPosition(AbstractButton.CENTER);
        b2.setMnemonic(KeyEvent.VK_M);
        b2.setToolTipText("This middle button does nothing “
         + "when you click it.");
   3.- Añadir
         panel.add(b);
   4.- Manejar eventos
CARACTERÍSTICAS ESPECIALES

  Los componentes Swing ofrecen características especiales:


Tool tip          Cuando el cursor del mouse se detiene
                  sobre un componente se muestra una
                  línea de texto.
Mnemonic          Se ejecuta una acción como resultado del
                  pulsado de una combinación de teclas.
Disable           Un componente puede ser explícitamente
                  habilitado o deshabilitado.
Border            Rodea un componente con un borde.
CARACTERÍSTICAS ESPECIALES

   Tool tips
         JButton button = new JButton ("Compute");
         button.setToolTipText ("Calculate size.");

   Mnemonic
         button.setMnemonic ("C");

   Disable
         JButton button = new JButton (“Do It”);
         button.setEnabled (false);
CARACTERÍSTICAS ESPECIALES

  Bordes
    JPanel myPanel = new JPanel();
    Border myBorder = BorderFactory.createEtchedBorder();
    myPanel.setBorder(myBorder);

      Empty                  Titled
      Line                   Matte
      Etched                Compound
      Bevel
BORDES
ANATOMÍA DE UNA APLICACIÓN GUI

                                   JFrame
JFrame
JPanel             contenedores

                                    JPanel
         JButton


                              JButton        JLabel
          JLabel
                              Estructura interna

                    GUI
USO DE UN COMPONENTE GUI


  1. Crearlo
  2. Configurarlo
                                         orden
  3. Añadir hijo (si es contenedor)      importante
  4. Añadir al padre (si no es JFrame)
  5. Manejar los eventos
CONSTRUCCIÓN BOTTOM UP

                                             Listener
   Crear:
     Frame
                                    JLabel   JButton
     Panel
     Componentes
     Listener                          JPanel
   Añadir (bottom up)
     Listeners a los componentes
     Componentes al panel              JFrame
     Panel al Frame
WINDOW LAYOUT

                 contenedores


componentes
WINDOW LAYOUT

  Cada contenedor maneja la disposición de sus
  componentes.
  El programador sólo añade componentes, el contenedor
  se encarga de la disposición de los mismos.
  El contenedor usa un Layout Manager para manejar
  la disposición de los componentes en el mismo.
  Están disponibles diferentes Layout Managers.
  El layout puede ser determinado especificando Layout
  Managers para los contenedores.
LAYOUT MANAGERS

   Hay varios Layout Managers predefinidos en:
     FlowLayout    (en java.awt)
     BorderLayout (en java.awt)
     CardLayout    (en java.awt)
     GridLayout     (en java.awt)
     GridBagLayout (en java.awt)
     BoxLayout     (en javax.swing)
     OverlayLayout (en javax.swing)
LAYOUT MANAGERS (LM)


 Cada contenedor tiene un Layout Manager por defecto, aunque
 se puede establecer otro LM para el mismo, de forma explícita.
 Para anular el LM por defecto se usa el método setLayout (para
 contenedores de alto nivel se usa getContentPane().setLayout().
 El Layout Manager intenta ajustar la disposición de los
 componentes en el contenedor cuando se añade un nuevo
 componente o cuando el contenedor cambia de tamaño.
 Puede crear su propio LM.
Layout Managers de AWT
    null             FlowLayout        GridLayout


  ninguno,
                     Left to right,
programador
                    Top to bottom
setea x,y,w,h


BorderLayout         CardLayout       GridBagLayout
     n

w     c         e   One at a time          JButton

      s
NULL LAYOUT


   setLayout(null);
   El programador es responsable de establecer el tamaño y
   posición de cada componente (setBounds(x,y,w,h))
COMBINACIONES


         JButton JButton




                JTextArea
COMBINACIONES

                              JButton    JButton
 JFrame

               n             JPanel: FlowLayout
      JPanel: BorderLayout


               c
                                 JTextArea
TAREAS COMUNES DEL LM

   Prestar atención a indicaciones de un componente:
     de tamaño:
      setMinimumSize(Dimension), setPreferredSize(..), setMaximumSize(..)

     de alineamiento:
      setAllignmentX(float), setAlignmentY(float)

   Poner espacios entre componentes:
     el LM puede especificar hgap y vgap
     poner componentes invisibles
     bordes vacíos: para componentes que no tienen
      bordes por default, por ej.:JPanel, JLabel.
Estructura del Layout
                                                      JPanel(BoxLayout(V))


  label



rigidArea(0,5)                                                 Center



JScrollPane

                                                               South



                 HorizontalGlue   JButton         JButton
                                                       JPanel(BoxLayout(H))
  JPanel (BorderLayout)                rigidArea(10,0)
FLOWLAYOUT




               Container contentPane = getContentPane();
               contentPane.setLayout(new FlowLayout());
               contentPane.add(new JButton("Button 1"));

 Es el LM por defecto de JPanel.
 Dispone los componentes de izquierda aderecha a medida que
  se añaden, comenzando filas nuevas si es necesario.
FLOWLAYOUT

   Cada fila de componentes está centrada por defecto,
    pero puede alinearse por derecha o izquierda.
   Pueden establecerse explícitamente espacios verticales
    y/o horizontales entre componentes.
   Usar sólo en aplicaciones muy simples (oculta
    componentes que no entran).
GRIDLAYOUT




           Container contentPane = getContentPane();
           contentPane.setLayout(new GridLayout(0,2));//tantas filas como necesita
           contentPane.add(new JButton("Button 1"));

 Dispone los componentes en forma de matriz, con la cantidad
  de filas y columnas especificadas.
 Todas las filas tienen el mismo alto y todas las columnas tienen
  el mismo ancho. El tamaño de cada celda es determinado por el
  tamaño del contenedor. Permite establecer vgap y hgap.
 Usar si es seguro que los componentes tendrán igual tamaño.
BORDERLAYOUT




      Container contentPane = getContentPane();
      contentPane.add(new JButton("Button 1 (NORTH)"),BorderLayout.NORTH);
      //no hace falta setear el LM


 Es el LM por defecto de los content pane (contenedor principal
 en JFrame, JDialog y JApplet).
 Define 5 áreas en las cuales se pueden añadir los componentes.
BORDERLAYOUT



 Si se agranda la ventana, la parte central toma tanto espacio
 como le sea posible, las otras 4 áreas se expanden sólo lo
 necesario para llenar el espacio disponible.
 Un contenedor, generalmente usa 1 o 2 de las 5 áreas de
 BorderLayout. Por ejemplo: centro o centro y sur. Se puede
 especificar vgap y hgap.
CARDLAYOUT




                 Jpanel cards = new JPanel();
                 cards.setLayout(new CardLayout());
                 cards.add(p1, "JPanel with JButtons");

 Permite implementar un área que contiene distintos
 componentes en distintos instantes de tiempo (naipes).
 Normalmente controlado por una Combo Box, el estado de ésta
 determina cuál grupo de componentes muestra el LM.
GRIDBAGLAYOUT




Container contentPane = getContentPane();
                                                    Es el LM más sofisticado y
GridBagLayout gridbag = new GridBagLayout();
GridBagConstraints c = new GridBagConstraints();     flexible. Alinea componentes
contentPane.setLayout(gridbag);
c.fill = GridBagConstraints.HORIZONTAL;              en una matriz de celdas
Jbutton button = new JButton("Button 1");
 c.weightx = 0.5;   c.gridx = 0;   c.gridy = 0;
                                                     permitiendo a algunos
 gridbag.setConstraints(button, c);                  componentes abarcar más
                                                     de una celda.
BOXLAYOUT




JPanel buttonPane = new JPanel();
buttonPane.setLayout(new BoxLayout(buttonPane, BoxLayout.X_AXIS));
                                                                         Pone los
buttonPane.setBorder(BorderFactory.createEmptyBorder(0, 10, 10, 10));
                                                                        componentes en
buttonPane.add(Box.createHorizontalGlue());
buttonPane.add(cancelButton);                                           una sola fila o
buttonPane.add(Box.createRigidArea(new Dimension(10, 0)));
                                                                        una sola columna
buttonPane.add(setButton);

 Respeta los tamaños máximos requeridos de los componentes
  y el alineamiento X/Y.
BOXLAYOUT

 Los componentes son dispuestos de arriba abajo o de
 izquierda a derecha en el orden en el cual son añadidos al
 contenedor.
 Pueden crearse muchas configuraciones distintas, combinando
 múltiples contenedores que usen BoxLayout.
 Preferido a un único contenedor que use el más complicado
 GridBagLayout (mejor: BoxLayouts anidados), es útil también
 en algunas situaciones donde se podría considerar el uso de
 GridLayout o BorderLayout.
BOXLAYOUT

  BoxLayout tiene en cuenta el alineamiento, tamaños
  mínimos, máximos y preferidos que se eligen para los
  componentes:
    btn.setAlignmentX(float alignmentX);
    lbl.setAlignmentY(float alignmentY);
    lbl.setMaximumSize(new Dimension(int width, int height);
    lbl.setMinimumSize(new Dimension(int width, int height);
    lbl.setPreferredSize(new Dimension(int width, int height);

  Para añadir espacio entre componentes se usa la clase Box
   o bordes invisibles a uno o ambos componentes.
BOXLAYOUT


    Tipo           Tamaño    Cómo crearla?

    Rigid area              Box.createRigidArea(size)


       horizont             Box.createHorizontalGlue()
Glue   al
        vertical            Box.createVerticalGlue()

                             new Box.Filler(minSize,
customBox.Filler             prefSize, maxSize)
OTRAS ESTRATEGIAS SWING




 JSplitPane
 JTabbedPane (CardLayout)
 JToolBar
PASOS EN EL DESARROLLO DE UNA APLICACIÓN
SIMPLE CON GUI

  Extienda la aplicación de JFrame
  Declare las referencias a componentes necesarios
  Defina el constructor
    Instancie un content pane y decida Layout
    Instancie objetos para los componentes necesarios y establezca sus
     propiedades
    Añada al objeto content pane
    Añada los listeners de los componentes y defina código
     del método actionPerformed

  Añada un método main() que instancie el objeto creado y tome los
   recaudos para cerrar la ventana
PINTADO

   Cuando la GUI necesita cambiar su apariencia visual
   se pinta en la pantalla, comenzando siempre desde el
   contenedor de alto nivel (Ej.: JFrame o JApplet) y
   procediendo de esta forma hacia abajo en la jerarquía
   de contenedores
   El pintado es double-buffered por eficiencia
   Los componentes Swing normalmente se repintan ellos
   mismos en forma automática
   Paint se ejecuta en el event-dispatching-thread
PINTADO


             Los componentes se pintan automáticamente

 Todo lo
 demás:Programador




                                      JButton
CUÁNDO SE PINTA?

  Pintado disparado por el sistema (se invoca paint())
    La primera vez que el componente es visible
    Cuando un componente es cubierto y luego descubierto
    Cuando es necesario reflejar un cambio en el estado del
      programa

  Pintado disparado por la aplicación
    Cuando cambia texto, colores,etc.
    Cuando desea repintar (invoca a repaint(), no a paint()
      que pone en la cola este requerimiento)
    El thread de manejos de eventos llama a paint() del
      componente
PINTADO


      Pintado de un componente que extiende JComponent




1.fondo         2. custom           3. borde   4. hijo
(si es opaco)                       (si hay)   (si tiene)
                painting (si hay)
PINTADO CUSTOM

                        JComponent
                   paint paintComponent
                          paintBorder
Nunca llamar              paintChildren
paint()                        extends
directamente.               JPanel
Llamar repaint()   paint   paintComponent
                           paintBorder
                           paintChildren
                               extends
                                            El método
                         PaintPanel         correcto a
                   paint paintComponent     anular en
                          paintBorder       pintado custom
                          paintChildren
PINTADO


 Qué ocurre cuando se invoca paint()?

  paint(Graphics g)           paintComponent(Graphics g)

                               paintBorder(Graphics g)

                              paintChildren(Graphics g)


 Antes de hacer cualquier cosa en paintComponent(...):
   invoque super.paintComponent (pinta background)
PINTADO


   Cada componente tiene su propio sistema de coordenadas
   desde (0,0) hasta (ancho-1, alto-1)

    (0, 0)
                                           X


                  Component



                                  (ancho -1, alto -1)
PINTADO

   Tener en cuenta el borde del componente (si lo tiene),
    reduce el área de pintado y desplaza coordenadas.
OBJETO GRAPHICS


 El objeto Graphics provee un contexto para el pintado y
 métodos para la misma función.
 El contexto gráfico consiste en el estado actual:color de
 pintado, fuente, área de pintado
PINTADO DE FORMAS

          La clase Graphics define métodos para pintar formas:
 void drawLine(int x0, int y0, int x1, int y1)
 void drawArc(int x, int y, int width, int height, int startAngle,int
  arcAngle)
 void drawPolygon(Polygon p)
 void drawPolygon(int xPoints[ ], int yPoints[ ], int numPoints)
 void drawRect(int x, int y, int width, int height)
 void drawRoundRect(int x, int y, int width, int height, int
  arcWidth, int arcHeight)
 void draw3DRect(int x, int y, int width, int height, boolean
  raised)
 void drawOval(int x, int y, int width, int height)
PINTADO DE FORMAS
PINTADO DE TEXTO

    La clase Graphics define métodos para pintar texto:
      String (drawString)
PINTADO DE TEXTO

    La clase Graphics define métodos para pintar texto:
      String (drawString)
IMÁGENES


 Cargar y mostrar imágenes es muy simple
 Class ImageIcon de javax.swing.
   Ej.:ImageIcon myIcon=new ImageIcon(“imagefile.gif”);
    Image image3 = getImage( new
    URL("http://java.sun.com/graphics/people.gif"));
IMÁGENES

• ImageIcon myImage =   new ImageIcon("book.gif");
• JLabel myLabel =   new JLabel(myImage);
• getContentPane().add(myLabel);




•JButton JButFeedback = new    JButton(myImage);
•JButton JButWrite   = new JButton("Write");
•JButWrite.setIcon(myImage2);



•JButton JButChange = new    JButton(myImage3);
•JButChange.setRolloverEnabled(true);

•JButChange.setRolloverIcon(myImage4);
CARGA DE IMÁGENES


 myImage =
Toolkit.getDefaultToolkit().getImage(filenameOrURL);
 retorna inmediatamente, no hay que esperar que la imagen se
 cargue antes de realizar otras operaciones. Algunos programas
 requieren más control o información acerca de la carga:
   clase MediaTracker
   método imageUpdate de la interface ImageObserver (útiles
    ambas también para no mostrar una imagen hasta que esté
    completamente cargada o informar a ProgressBar)
MOSTRAR IMÁGENES


   Métodos gráficos:(invocar en paintComponent)
     drawImage(image, x, y, observer)
     drawImage(image, x, y, w, h, observer)
     drawImage(image, x, y, bgcol, observer)
     drawImage(image, x, y, w, h, bgcol, ob.)
      La clase Component implementa la interface
      ImageObserver, casi siempre el último argumento
      es this
IMÁGENES

    class MyPanel extends JPanel {
            private ImageIcon myImage;
            public MyPanel() {
                     myImage = new ImageIcon("nasa.gif");
                   setPreferredSize(new
    Dimension(myImage.getIconWidth(), myImage.getIconHeight()));
            }


            public void paintComponent(Graphics g) {
                     g.drawImage(myImage.getImage(), 10, 10, null);
            }}
IMÁGENES
ANIMACIÓN


   Se muestran sucesivos frames a una velocidad
   relativamente alta (usualmente 10-20 frames
   por segundo), se crea una sensación de movimiento
   Para actualizar periódicamente la pantalla se usa un
  “loop de animación”, normalmente se implementa con
   un objeto javax.swing.Timer (se necesita un thread
   separado, nunca poner en paintComponent ya que la
   aplicación queda congelada)
ANIMACIÓN

     Timer
     Timer timer = new Timer(delay, this);
     …//this:action handler
      public synchronized void startAnimation() {
       if (!timer.isRunning()) {timer.start();}
    } …
      public synchronized void stopAnimation() {
        if (timer.isRunning()) { timer.stop();}}

Más contenido relacionado

La actualidad más candente

Java GUI La librería Swing
Java GUI La librería Swing Java GUI La librería Swing
Java GUI La librería Swing Laura
 
Programación III (Java) - 06 Ventanas
Programación III (Java) - 06 VentanasProgramación III (Java) - 06 Ventanas
Programación III (Java) - 06 VentanasAndoni Eguíluz Morán
 
Gui interfaz gráfica de usuario javax.swing y java.awt
Gui interfaz gráfica  de usuario javax.swing y java.awtGui interfaz gráfica  de usuario javax.swing y java.awt
Gui interfaz gráfica de usuario javax.swing y java.awtcarlosAhumada_12
 
Introducción a Swing
Introducción a SwingIntroducción a Swing
Introducción a Swingmrojas_unitec
 
Layouts - Java
Layouts - JavaLayouts - Java
Layouts - Javanjca01
 
Java - Tutorial Ventanas
Java - Tutorial VentanasJava - Tutorial Ventanas
Java - Tutorial Ventanaselsemieni
 
Interfaz gráfica de usuario y eventos (introducción)
Interfaz gráfica de usuario y eventos (introducción)Interfaz gráfica de usuario y eventos (introducción)
Interfaz gráfica de usuario y eventos (introducción)Omar B.
 
Contenedores Swing en Netbeans
Contenedores Swing en NetbeansContenedores Swing en Netbeans
Contenedores Swing en NetbeansMarly Encina
 
Miswing 110511215936-phpapp01
Miswing 110511215936-phpapp01Miswing 110511215936-phpapp01
Miswing 110511215936-phpapp01Ricardo Garcia
 
Interfaz gráfica de usuario
Interfaz gráfica de usuarioInterfaz gráfica de usuario
Interfaz gráfica de usuarioaleja0940
 
AWT- JAVA
AWT- JAVAAWT- JAVA
AWT- JAVAale8819
 
Manejo de eventos en java
Manejo de eventos en javaManejo de eventos en java
Manejo de eventos en javaaleja09_40
 
Manual java swing
Manual java swingManual java swing
Manual java swingRobert Wolf
 
Jyoc java-cap18 swing y java fx
Jyoc java-cap18 swing y java fxJyoc java-cap18 swing y java fx
Jyoc java-cap18 swing y java fxJyoc X
 

La actualidad más candente (20)

Java GUI La librería Swing
Java GUI La librería Swing Java GUI La librería Swing
Java GUI La librería Swing
 
Programación III (Java) - 06 Ventanas
Programación III (Java) - 06 VentanasProgramación III (Java) - 06 Ventanas
Programación III (Java) - 06 Ventanas
 
Gui interfaz gráfica de usuario javax.swing y java.awt
Gui interfaz gráfica  de usuario javax.swing y java.awtGui interfaz gráfica  de usuario javax.swing y java.awt
Gui interfaz gráfica de usuario javax.swing y java.awt
 
Introducción a Swing
Introducción a SwingIntroducción a Swing
Introducción a Swing
 
Layouts - Java
Layouts - JavaLayouts - Java
Layouts - Java
 
Sesion12-Componentes AWT
Sesion12-Componentes AWTSesion12-Componentes AWT
Sesion12-Componentes AWT
 
Java - Tutorial Ventanas
Java - Tutorial VentanasJava - Tutorial Ventanas
Java - Tutorial Ventanas
 
Interfaz gráfica de usuario y eventos (introducción)
Interfaz gráfica de usuario y eventos (introducción)Interfaz gráfica de usuario y eventos (introducción)
Interfaz gráfica de usuario y eventos (introducción)
 
Contenedores Swing en Netbeans
Contenedores Swing en NetbeansContenedores Swing en Netbeans
Contenedores Swing en Netbeans
 
Miswing 110511215936-phpapp01
Miswing 110511215936-phpapp01Miswing 110511215936-phpapp01
Miswing 110511215936-phpapp01
 
Interfaz gráfica de usuario
Interfaz gráfica de usuarioInterfaz gráfica de usuario
Interfaz gráfica de usuario
 
Flow layout
Flow layoutFlow layout
Flow layout
 
interfaz grafica
interfaz graficainterfaz grafica
interfaz grafica
 
Elementos Swing
Elementos SwingElementos Swing
Elementos Swing
 
Tema6resumido
Tema6resumidoTema6resumido
Tema6resumido
 
AWT- JAVA
AWT- JAVAAWT- JAVA
AWT- JAVA
 
Manejo de eventos en java
Manejo de eventos en javaManejo de eventos en java
Manejo de eventos en java
 
Layout
LayoutLayout
Layout
 
Manual java swing
Manual java swingManual java swing
Manual java swing
 
Jyoc java-cap18 swing y java fx
Jyoc java-cap18 swing y java fxJyoc java-cap18 swing y java fx
Jyoc java-cap18 swing y java fx
 

Destacado (20)

Java orientado a objetos
Java orientado a objetosJava orientado a objetos
Java orientado a objetos
 
Encapsulamiento
EncapsulamientoEncapsulamiento
Encapsulamiento
 
Javadoc
JavadocJavadoc
Javadoc
 
Operadores y expresiones
Operadores y expresionesOperadores y expresiones
Operadores y expresiones
 
Paso de parametros
Paso de parametrosPaso de parametros
Paso de parametros
 
Implementacion clases
Implementacion clasesImplementacion clases
Implementacion clases
 
Funciones
FuncionesFunciones
Funciones
 
Agregacion composicion
Agregacion composicionAgregacion composicion
Agregacion composicion
 
Arraylist
ArraylistArraylist
Arraylist
 
Tipos de datos
Tipos de datosTipos de datos
Tipos de datos
 
Constructores
ConstructoresConstructores
Constructores
 
Poo
PooPoo
Poo
 
String
StringString
String
 
Uml
UmlUml
Uml
 
Introducción a la Programación con Java
Introducción a la Programación con JavaIntroducción a la Programación con Java
Introducción a la Programación con Java
 
Java
JavaJava
Java
 
Programacion swing
Programacion swingProgramacion swing
Programacion swing
 
Contenedores de java swing
Contenedores de java swingContenedores de java swing
Contenedores de java swing
 
Power integradora
Power integradoraPower integradora
Power integradora
 
Programación III (Java) - 07b Swing
Programación III (Java) - 07b SwingProgramación III (Java) - 07b Swing
Programación III (Java) - 07b Swing
 

Similar a Java

Similar a Java (20)

Java 120706083911-phpapp01
Java 120706083911-phpapp01Java 120706083911-phpapp01
Java 120706083911-phpapp01
 
Clase swing
Clase swingClase swing
Clase swing
 
Controles swing
Controles swingControles swing
Controles swing
 
Swin01
Swin01Swin01
Swin01
 
Interfaces graficas(1)
Interfaces graficas(1)Interfaces graficas(1)
Interfaces graficas(1)
 
Clase 5 JAVA 2012
Clase 5 JAVA 2012Clase 5 JAVA 2012
Clase 5 JAVA 2012
 
Trabajo teórico exposcición
Trabajo teórico exposciciónTrabajo teórico exposcición
Trabajo teórico exposcición
 
Guis en java-1pp_2011_
Guis en java-1pp_2011_Guis en java-1pp_2011_
Guis en java-1pp_2011_
 
Interfaces Usuario 3
Interfaces Usuario 3Interfaces Usuario 3
Interfaces Usuario 3
 
2.11.gui ejercicio swing-holaadios
2.11.gui ejercicio swing-holaadios2.11.gui ejercicio swing-holaadios
2.11.gui ejercicio swing-holaadios
 
D0 gui
D0 guiD0 gui
D0 gui
 
Guia4 java
Guia4 javaGuia4 java
Guia4 java
 
Clase swing
Clase swingClase swing
Clase swing
 
Guis_en_java_6pp.pdf
Guis_en_java_6pp.pdfGuis_en_java_6pp.pdf
Guis_en_java_6pp.pdf
 
Guia practica condicionales en java con NetBeans 01
Guia practica condicionales en java con NetBeans 01Guia practica condicionales en java con NetBeans 01
Guia practica condicionales en java con NetBeans 01
 
02 SWING.pptx
02 SWING.pptx02 SWING.pptx
02 SWING.pptx
 
Tema 7 gui, swing y java beans por gio
Tema 7   gui, swing y java beans por gioTema 7   gui, swing y java beans por gio
Tema 7 gui, swing y java beans por gio
 
Lps 15 gu-iconswing
Lps 15 gu-iconswingLps 15 gu-iconswing
Lps 15 gu-iconswing
 
Eventos
EventosEventos
Eventos
 
Manuales seminario java-manualdejava-sem 3 - 4
Manuales seminario java-manualdejava-sem 3 - 4Manuales seminario java-manualdejava-sem 3 - 4
Manuales seminario java-manualdejava-sem 3 - 4
 

Más de jbersosa

Las excepciones standar
Las excepciones standarLas excepciones standar
Las excepciones standarjbersosa
 
Mas sobre excepciones
Mas sobre excepcionesMas sobre excepciones
Mas sobre excepcionesjbersosa
 
Estructuras de control try catch
Estructuras de control try catchEstructuras de control try catch
Estructuras de control try catchjbersosa
 
Clasen1java
Clasen1javaClasen1java
Clasen1javajbersosa
 
Programación java1
Programación java1Programación java1
Programación java1jbersosa
 
Tercercortesistop
TercercortesistopTercercortesistop
Tercercortesistopjbersosa
 
Encapsulacion
EncapsulacionEncapsulacion
Encapsulacionjbersosa
 
Administracion de la memoria principal
Administracion de  la memoria principalAdministracion de  la memoria principal
Administracion de la memoria principaljbersosa
 
Auditoria 2
Auditoria 2Auditoria 2
Auditoria 2jbersosa
 
Auditoriasistemasi 150703002656-lva1-app6891
Auditoriasistemasi 150703002656-lva1-app6891Auditoriasistemasi 150703002656-lva1-app6891
Auditoriasistemasi 150703002656-lva1-app6891jbersosa
 
Auditoria informatica
Auditoria informaticaAuditoria informatica
Auditoria informaticajbersosa
 
Auditoria de sistemas (1)
Auditoria de sistemas (1)Auditoria de sistemas (1)
Auditoria de sistemas (1)jbersosa
 
Auditoría de sistemas de información presentación
Auditoría de sistemas de información presentaciónAuditoría de sistemas de información presentación
Auditoría de sistemas de información presentaciónjbersosa
 
Realizar investigación y hacer un análisis por cada tema asignado al particip...
Realizar investigación y hacer un análisis por cada tema asignado al particip...Realizar investigación y hacer un análisis por cada tema asignado al particip...
Realizar investigación y hacer un análisis por cada tema asignado al particip...jbersosa
 
Sistemas operativos
Sistemas operativosSistemas operativos
Sistemas operativosjbersosa
 
Estructura de una red
Estructura de una redEstructura de una red
Estructura de una redjbersosa
 
Proyectodeprogramacinidesegundocorte2015 2
Proyectodeprogramacinidesegundocorte2015 2Proyectodeprogramacinidesegundocorte2015 2
Proyectodeprogramacinidesegundocorte2015 2jbersosa
 
Bases de datos mysql y repotes usando jasper report
Bases de datos mysql y repotes usando jasper reportBases de datos mysql y repotes usando jasper report
Bases de datos mysql y repotes usando jasper reportjbersosa
 

Más de jbersosa (20)

Las excepciones standar
Las excepciones standarLas excepciones standar
Las excepciones standar
 
Mas sobre excepciones
Mas sobre excepcionesMas sobre excepciones
Mas sobre excepciones
 
Estructuras de control try catch
Estructuras de control try catchEstructuras de control try catch
Estructuras de control try catch
 
Main
MainMain
Main
 
Clasen1java
Clasen1javaClasen1java
Clasen1java
 
Programación java1
Programación java1Programación java1
Programación java1
 
Tercercortesistop
TercercortesistopTercercortesistop
Tercercortesistop
 
Encapsulacion
EncapsulacionEncapsulacion
Encapsulacion
 
Administracion de la memoria principal
Administracion de  la memoria principalAdministracion de  la memoria principal
Administracion de la memoria principal
 
Auditoria 2
Auditoria 2Auditoria 2
Auditoria 2
 
Auditoriasistemasi 150703002656-lva1-app6891
Auditoriasistemasi 150703002656-lva1-app6891Auditoriasistemasi 150703002656-lva1-app6891
Auditoriasistemasi 150703002656-lva1-app6891
 
Auditoria informatica
Auditoria informaticaAuditoria informatica
Auditoria informatica
 
Auditoria de sistemas (1)
Auditoria de sistemas (1)Auditoria de sistemas (1)
Auditoria de sistemas (1)
 
Auditoría de sistemas de información presentación
Auditoría de sistemas de información presentaciónAuditoría de sistemas de información presentación
Auditoría de sistemas de información presentación
 
Realizar investigación y hacer un análisis por cada tema asignado al particip...
Realizar investigación y hacer un análisis por cada tema asignado al particip...Realizar investigación y hacer un análisis por cada tema asignado al particip...
Realizar investigación y hacer un análisis por cada tema asignado al particip...
 
Sistemas operativos
Sistemas operativosSistemas operativos
Sistemas operativos
 
Php
PhpPhp
Php
 
Estructura de una red
Estructura de una redEstructura de una red
Estructura de una red
 
Proyectodeprogramacinidesegundocorte2015 2
Proyectodeprogramacinidesegundocorte2015 2Proyectodeprogramacinidesegundocorte2015 2
Proyectodeprogramacinidesegundocorte2015 2
 
Bases de datos mysql y repotes usando jasper report
Bases de datos mysql y repotes usando jasper reportBases de datos mysql y repotes usando jasper report
Bases de datos mysql y repotes usando jasper report
 

Último

Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024GiovanniJavierHidalg
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
Hernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxHernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxJOSEMANUELHERNANDEZH11
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafiosFundación YOD YOD
 
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...FacuMeza2
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfsoporteupcology
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxpabonheidy28
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIAWilbisVega
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
SalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 TestcontainersSalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 TestcontainersIván López Martín
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdfIsabellaMontaomurill
 
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...AlanCedillo9
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesFundación YOD YOD
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfSergioMendoza354770
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 

Último (19)

Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
Hernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxHernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptx
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafios
 
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdf
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docx
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
SalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 TestcontainersSalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 Testcontainers
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdf
 
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento Protégeles
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 

Java

  • 1. Java GUI La librería Swing //java.sun.com/docs/books/tutorial/uiswing //programacion.com/java/tutorial/swing/
  • 2. PROGRAMACIÓN CONDUCIDA POR EVENTOS  En programas tradicionales (basados en texto):  el programa controla el flujo de la ejecución  el programa controla la secuencia de las entradas  Los programas con GUI son “event-driven”  la secuencia de las entradas controlan el flujo de la ejecución  el sistema invoca código del usuario
  • 3. PROGRAMACIÓN CONDUCIDA POR EVENTOS Código del sistem a Su código
  • 4. GENERACIÓN DE EVENTOS 1. Las acciones tales como: pulsar un botón, mover el mouse, etc. son reconocidas e identificadas por los sistemas operativos (OS) o la JVM. 2. Por cada acción el OS/JVM determinan cuál de los programas que se están ejecutando recibirán la señal (de la acción). 3. Las señales que la aplicaciones reciben del OS/JVM como resultado de una acción son llamadas eventos.
  • 5. GENERACIÓN DE EVENTOS GUI Acciones Mouse, Teclado,etc. Sistema Operativo JAVA API /Windows Eventos Métodos y handlers Métodos y handlers Aplicación 1 Aplicación 2
  • 6. MANEJO DE EVENTOS  Una aplicación responde a los eventos ejecutando código adecuado para cada tipo particular de eventos.  No todos los eventos necesitan ser tenidos en cuenta por una aplicación. Por ejemplo: Una aplicación para dibujar puede estar interesada sólo en movimientos del mouse.  Como diseñador de una aplicación manejada por eventos, deberá escribir clases/métodos para manejar los eventos relevantes.
  • 7. JAVA GUI  Java provee dos librerías para crear GUIs:  Java AWT (Abstract Window Toolkit)  Java Foundation Classes (JFC o Swing), a partir de Java2
  • 8. JAVA FOUNDATION CLASSES  JFC es una colección muy grande de software.  AWT y Swing son las dos grandes familias para AWT Swing desarrollo de GUI en el entorno Java. Drag & Drop 2D API JFC APIs Accessibility
  • 10. SWING  Implementada sin usar código nativo (100% Java), con lo cual la GUI se verá de la misma forma en distintas plataformas.  Basada en la arquitectura MVC.  Ofrece una amplia variedad de Look & Feel.  Los componentes de Swing continuarán siendo mejorados en el futuro.
  • 11. AWT Y SWING  Los componentes de Swing tienen nombres que comienzan con J.  Ejemplo: Button en AWT es JButton en Swing  Los componentes de AWT están en el paquete java.awt, los de Swing en javax.swing.  import javax.swing.*; import java.awt.*; import java.awt.event.*;
  • 12. PAQUETES JFC/SWING • javax.swing • javax.swing.plaf • javax.swing.table • javax.swing.plaf.basic • javax.swing.tree • javax.swing.plaf.metal • javax.swing.border • javax.swing.plaf.multi • javax.swing.colorchooser • javax.swing.filechooser • javax.swing.text • javax.swing.text.html • javax.swing.text.html.parser • javax.swing.event • javax.swing.text.rtf • javax.swing.undo
  • 13. PAQUETES JFC/SWING Componentes, Control del incluyendo “Look & Feel” componentes de Swing complejos Widgets basados en texto Paquetes nuevos de eventos ( incluyendo html/rtf )
  • 14. APLICACIONES BASADAS EN GUI  El desarrollo de una aplicación basada en GUI requiere la comprensión de:  Estructura de la jerarquía de herencia, que define el comportamiento y atributos de los componentes en la GUI de la aplicación.  Estructura de la jerarquía de contenedores, que define cómo se disponen todos los componentes en la GUI de la aplicación.  Manejo de eventos.
  • 16. HERENCIA “HEAVY” java.awt.Panel java.awt.Window java.applet.Applet java.awt.Dialog JApplet JDialog JWindow JFrame
  • 18. CONTENEDORES EN SWING java.awt.Container JMenu JMenuBar JComponent JLayeredPane JRootPane JPanel JTabbedPane JDesktopPane JSplitPane JPopupMenu JInternalFrame JScrollPane JOptionPane JToolbar
  • 21. COMPONENTES DE SWING  La clase Component (y sus subclases) proveen soporte para manejo de eventos, cambio del tamaño de un componente, control de color y fuentes, pintado.  Un componente es un objeto de una subclase concreta. Se distinguen dos clases de componentes:  Componentes de control de la GUI: la interacción de la GUI con el usuario se realiza a través de ellos.  Contenedores: contienen otros componentes (u otros contenedores).
  • 22. CONTENEDORES  Anidamiento de componentes (Jerarquía de contenedores en contraste con la Jerarquía de herencia). Cada programa Swing contiene al menos una.  Usan un Layout Manager para determinar cómo se disponen los componentes en los contenedores.  Swing provee 4 contenedores de alto nivel (ventana base de la GUI): JFrame, JApplet, JDialog y JWindow.  La jerarquía está compuesta de diferentes capas. Cada contenedor de alto nivel contiene un contenedor intermedio conocido como “content pane ”. En casi todos los programas no es necesario conocer qué hay entre el contenedor de alto nivel y el content pane.
  • 24. JERARQUÍA DE CONTENEDORES  La apariencia de una GUI está determinada por:  La jerarquía de contenedores  El Layout Manager de cada contenedor  Las propiedades de los componentes individuales  Todos estos ítems trabajan en conjunto para determinar el efecto visual final.
  • 27. ROOT PANES  “Añadido” en forma invisible al contenedor de alto nivel.  Creado por Swing cuando instancia un contenedor de alto nivel.  Maneja prácticamente todo entre el contenedor de alto nivel y los componentes atómicos.  Tener en cuenta si necesita interceptar clicks del mouse o pintar sobre varios componentes.  Es una instancia de JLayeredPane la que contiene la barra de menús y el content pane.
  • 28. CONTENT PANES  Usualmente es un JPanel.  En la mayoría de las aplicaciones Swing contiene casi todo, excepto la barra de menú.  Debe ser creado explícitamente.
  • 29. LAYERED PANES  Provisto por root pane pero también puede crearse.  Contenedor con profundidad, tal que componentes que se superponen (ej:popup menus) pueden aparecer unos encima de otros (z-buffering).
  • 30. GLASS PANES  Util para pintar o interceptar eventos (por ejemplo: bloquear todos los eventos del mouse) en un área que contenga uno o más componente
  • 31. CONTENEDORES DE ALTO NIVEL Applet Dialog Frame
  • 32. CONTENEDORES GENERALES Scroll Pane SplitPane Panel TabbedPane Toolbar
  • 33. CONTENEDORES ESPECIALES InternalFrame LayeredPane Root Pane
  • 35. ALGUNOS MÉTODOS DE JFRAME  Para añadir componentes al content pane: myFrameInstance.getContentPane().add(myComponent); Usual Requerido por Ej.: “this” Instancias de “myLabel” JFrame, JDialog y JInternalFrame
  • 36. ALGUNOS MÉTODOS DE JFRAME  Para construir una ventana con un título y mostrarla: JFrame theWindow = new JFrame( "Graffiti" ); theWindow.show( ); //idem theWindow.setVisible(true);  Para determinar su tamaño: theWindow.setJMenuBar(cyanMenuBar); theWindow.setSize( 220, 100 );//o mejor theWindow.pack();
  • 37. NUEVA FUNCIONALIDAD DE JFRAME  setDefaultCloseOperation(int) es la más importante:  DO_NOTHING_ON_CLOSE  HIDE_ON_CLOSE (default) oculta el frame cuando el usuario lo cierra pero no se deshace de los recursos del sistema asociados (puedo volver a mostrar).  DISPOSE_ON_CLOSE oculta el frame y llama al método dispose(), para liberar recursos.  EXIT_ON_CLOSE, cierra la aplicación (System.exit(0))
  • 38. HELLO WORLD EN SWING import javax.swing.*; public class HelloWorldSwing { public static void main(String[] args) {// crear un nuevo frame JFrame frame = new JFrame("HelloWorldSwing"); // crear una etiqueta y añadir al frame JLabel label = new JLabel("Hello World"); frame.getContentPane().add(label); //especifica la operación de cierre de la ventana frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // muestra el frame en pantalla frame.pack(); frame.setVisible(true);}}
  • 39. COMPONENTES ATÓMICOS  Componentes de tipo JPanel almacenan otros objetos de la GUI tales como: botones, etiquetas, campos de texto, etc. Estos objetos gráficos son considerados componentes atómicos, puesto que no pueden almacenar otros objetos de la GUI.
  • 40. COMPONENTES ATÓMICOS BÁSICOS Buttons Combo Box List Menu Slider Spinner Text Fields
  • 41. COMPONENTES ATÓMICOS NO EDITABLES Label Progress Bar Tool tip
  • 42. OTROS COMPONENTES ATÓMICOS Color Chooser File Chooser Table Text Tree
  • 43. API DE LOS COMPONENTES GUI  Componente GUI en Java= class  Propiedades JButton  Métodos  Eventos
  • 44. COMPONENTES GUI 1.- Crear  Instanciar objeto: b = new JButton(“press me”); 2.- Configurar  Propiedades: b.text = “press me”; (evitar en Java)  Métodos: b2 = new JButton("Middle button", middleButtonIcon); b2.setVerticalTextPosition(AbstractButton.BOTTOM); b2.setHorizontalTextPosition(AbstractButton.CENTER); b2.setMnemonic(KeyEvent.VK_M); b2.setToolTipText("This middle button does nothing “ + "when you click it."); 3.- Añadir  panel.add(b); 4.- Manejar eventos
  • 45. CARACTERÍSTICAS ESPECIALES  Los componentes Swing ofrecen características especiales: Tool tip Cuando el cursor del mouse se detiene sobre un componente se muestra una línea de texto. Mnemonic Se ejecuta una acción como resultado del pulsado de una combinación de teclas. Disable Un componente puede ser explícitamente habilitado o deshabilitado. Border Rodea un componente con un borde.
  • 46. CARACTERÍSTICAS ESPECIALES  Tool tips JButton button = new JButton ("Compute"); button.setToolTipText ("Calculate size.");  Mnemonic button.setMnemonic ("C");  Disable JButton button = new JButton (“Do It”); button.setEnabled (false);
  • 47. CARACTERÍSTICAS ESPECIALES  Bordes JPanel myPanel = new JPanel(); Border myBorder = BorderFactory.createEtchedBorder(); myPanel.setBorder(myBorder);  Empty  Titled  Line  Matte  Etched  Compound  Bevel
  • 49. ANATOMÍA DE UNA APLICACIÓN GUI JFrame JFrame JPanel contenedores JPanel JButton JButton JLabel JLabel Estructura interna GUI
  • 50. USO DE UN COMPONENTE GUI 1. Crearlo 2. Configurarlo orden 3. Añadir hijo (si es contenedor) importante 4. Añadir al padre (si no es JFrame) 5. Manejar los eventos
  • 51. CONSTRUCCIÓN BOTTOM UP Listener  Crear:  Frame JLabel JButton  Panel  Componentes  Listener JPanel  Añadir (bottom up)  Listeners a los componentes  Componentes al panel JFrame  Panel al Frame
  • 52. WINDOW LAYOUT contenedores componentes
  • 53. WINDOW LAYOUT  Cada contenedor maneja la disposición de sus componentes.  El programador sólo añade componentes, el contenedor se encarga de la disposición de los mismos.  El contenedor usa un Layout Manager para manejar la disposición de los componentes en el mismo.  Están disponibles diferentes Layout Managers.  El layout puede ser determinado especificando Layout Managers para los contenedores.
  • 54. LAYOUT MANAGERS  Hay varios Layout Managers predefinidos en:  FlowLayout (en java.awt)  BorderLayout (en java.awt)  CardLayout (en java.awt)  GridLayout (en java.awt)  GridBagLayout (en java.awt)  BoxLayout (en javax.swing)  OverlayLayout (en javax.swing)
  • 55. LAYOUT MANAGERS (LM)  Cada contenedor tiene un Layout Manager por defecto, aunque se puede establecer otro LM para el mismo, de forma explícita. Para anular el LM por defecto se usa el método setLayout (para contenedores de alto nivel se usa getContentPane().setLayout().  El Layout Manager intenta ajustar la disposición de los componentes en el contenedor cuando se añade un nuevo componente o cuando el contenedor cambia de tamaño.  Puede crear su propio LM.
  • 56. Layout Managers de AWT null FlowLayout GridLayout ninguno, Left to right, programador Top to bottom setea x,y,w,h BorderLayout CardLayout GridBagLayout n w c e One at a time JButton s
  • 57. NULL LAYOUT  setLayout(null);  El programador es responsable de establecer el tamaño y posición de cada componente (setBounds(x,y,w,h))
  • 58. COMBINACIONES JButton JButton JTextArea
  • 59. COMBINACIONES JButton JButton JFrame n JPanel: FlowLayout JPanel: BorderLayout c JTextArea
  • 60. TAREAS COMUNES DEL LM  Prestar atención a indicaciones de un componente:  de tamaño: setMinimumSize(Dimension), setPreferredSize(..), setMaximumSize(..)  de alineamiento: setAllignmentX(float), setAlignmentY(float)  Poner espacios entre componentes:  el LM puede especificar hgap y vgap  poner componentes invisibles  bordes vacíos: para componentes que no tienen bordes por default, por ej.:JPanel, JLabel.
  • 61. Estructura del Layout JPanel(BoxLayout(V)) label rigidArea(0,5) Center JScrollPane South HorizontalGlue JButton JButton JPanel(BoxLayout(H)) JPanel (BorderLayout) rigidArea(10,0)
  • 62. FLOWLAYOUT Container contentPane = getContentPane(); contentPane.setLayout(new FlowLayout()); contentPane.add(new JButton("Button 1"));  Es el LM por defecto de JPanel.  Dispone los componentes de izquierda aderecha a medida que se añaden, comenzando filas nuevas si es necesario.
  • 63. FLOWLAYOUT  Cada fila de componentes está centrada por defecto, pero puede alinearse por derecha o izquierda.  Pueden establecerse explícitamente espacios verticales y/o horizontales entre componentes.  Usar sólo en aplicaciones muy simples (oculta componentes que no entran).
  • 64. GRIDLAYOUT Container contentPane = getContentPane(); contentPane.setLayout(new GridLayout(0,2));//tantas filas como necesita contentPane.add(new JButton("Button 1"));  Dispone los componentes en forma de matriz, con la cantidad de filas y columnas especificadas.  Todas las filas tienen el mismo alto y todas las columnas tienen el mismo ancho. El tamaño de cada celda es determinado por el tamaño del contenedor. Permite establecer vgap y hgap.  Usar si es seguro que los componentes tendrán igual tamaño.
  • 65. BORDERLAYOUT Container contentPane = getContentPane(); contentPane.add(new JButton("Button 1 (NORTH)"),BorderLayout.NORTH); //no hace falta setear el LM  Es el LM por defecto de los content pane (contenedor principal en JFrame, JDialog y JApplet).  Define 5 áreas en las cuales se pueden añadir los componentes.
  • 66. BORDERLAYOUT  Si se agranda la ventana, la parte central toma tanto espacio como le sea posible, las otras 4 áreas se expanden sólo lo necesario para llenar el espacio disponible.  Un contenedor, generalmente usa 1 o 2 de las 5 áreas de BorderLayout. Por ejemplo: centro o centro y sur. Se puede especificar vgap y hgap.
  • 67. CARDLAYOUT Jpanel cards = new JPanel(); cards.setLayout(new CardLayout()); cards.add(p1, "JPanel with JButtons");  Permite implementar un área que contiene distintos componentes en distintos instantes de tiempo (naipes).  Normalmente controlado por una Combo Box, el estado de ésta determina cuál grupo de componentes muestra el LM.
  • 68. GRIDBAGLAYOUT Container contentPane = getContentPane();  Es el LM más sofisticado y GridBagLayout gridbag = new GridBagLayout(); GridBagConstraints c = new GridBagConstraints(); flexible. Alinea componentes contentPane.setLayout(gridbag); c.fill = GridBagConstraints.HORIZONTAL; en una matriz de celdas Jbutton button = new JButton("Button 1"); c.weightx = 0.5; c.gridx = 0; c.gridy = 0; permitiendo a algunos gridbag.setConstraints(button, c); componentes abarcar más de una celda.
  • 69. BOXLAYOUT JPanel buttonPane = new JPanel(); buttonPane.setLayout(new BoxLayout(buttonPane, BoxLayout.X_AXIS));  Pone los buttonPane.setBorder(BorderFactory.createEmptyBorder(0, 10, 10, 10)); componentes en buttonPane.add(Box.createHorizontalGlue()); buttonPane.add(cancelButton); una sola fila o buttonPane.add(Box.createRigidArea(new Dimension(10, 0))); una sola columna buttonPane.add(setButton);  Respeta los tamaños máximos requeridos de los componentes y el alineamiento X/Y.
  • 70. BOXLAYOUT  Los componentes son dispuestos de arriba abajo o de izquierda a derecha en el orden en el cual son añadidos al contenedor.  Pueden crearse muchas configuraciones distintas, combinando múltiples contenedores que usen BoxLayout.  Preferido a un único contenedor que use el más complicado GridBagLayout (mejor: BoxLayouts anidados), es útil también en algunas situaciones donde se podría considerar el uso de GridLayout o BorderLayout.
  • 71. BOXLAYOUT  BoxLayout tiene en cuenta el alineamiento, tamaños mínimos, máximos y preferidos que se eligen para los componentes: btn.setAlignmentX(float alignmentX); lbl.setAlignmentY(float alignmentY); lbl.setMaximumSize(new Dimension(int width, int height); lbl.setMinimumSize(new Dimension(int width, int height); lbl.setPreferredSize(new Dimension(int width, int height);  Para añadir espacio entre componentes se usa la clase Box o bordes invisibles a uno o ambos componentes.
  • 72. BOXLAYOUT Tipo Tamaño Cómo crearla? Rigid area Box.createRigidArea(size) horizont Box.createHorizontalGlue() Glue al vertical Box.createVerticalGlue() new Box.Filler(minSize, customBox.Filler prefSize, maxSize)
  • 73. OTRAS ESTRATEGIAS SWING  JSplitPane  JTabbedPane (CardLayout)  JToolBar
  • 74. PASOS EN EL DESARROLLO DE UNA APLICACIÓN SIMPLE CON GUI  Extienda la aplicación de JFrame  Declare las referencias a componentes necesarios  Defina el constructor  Instancie un content pane y decida Layout  Instancie objetos para los componentes necesarios y establezca sus propiedades  Añada al objeto content pane  Añada los listeners de los componentes y defina código del método actionPerformed  Añada un método main() que instancie el objeto creado y tome los recaudos para cerrar la ventana
  • 75. PINTADO  Cuando la GUI necesita cambiar su apariencia visual se pinta en la pantalla, comenzando siempre desde el contenedor de alto nivel (Ej.: JFrame o JApplet) y procediendo de esta forma hacia abajo en la jerarquía de contenedores  El pintado es double-buffered por eficiencia  Los componentes Swing normalmente se repintan ellos mismos en forma automática  Paint se ejecuta en el event-dispatching-thread
  • 76. PINTADO Los componentes se pintan automáticamente Todo lo demás:Programador JButton
  • 77. CUÁNDO SE PINTA?  Pintado disparado por el sistema (se invoca paint())  La primera vez que el componente es visible  Cuando un componente es cubierto y luego descubierto  Cuando es necesario reflejar un cambio en el estado del programa  Pintado disparado por la aplicación  Cuando cambia texto, colores,etc.  Cuando desea repintar (invoca a repaint(), no a paint() que pone en la cola este requerimiento)  El thread de manejos de eventos llama a paint() del componente
  • 78. PINTADO  Pintado de un componente que extiende JComponent 1.fondo 2. custom 3. borde 4. hijo (si es opaco) (si hay) (si tiene) painting (si hay)
  • 79. PINTADO CUSTOM JComponent paint paintComponent paintBorder Nunca llamar paintChildren paint() extends directamente. JPanel Llamar repaint() paint paintComponent paintBorder paintChildren extends El método PaintPanel correcto a paint paintComponent anular en paintBorder pintado custom paintChildren
  • 80. PINTADO  Qué ocurre cuando se invoca paint()? paint(Graphics g) paintComponent(Graphics g) paintBorder(Graphics g) paintChildren(Graphics g)  Antes de hacer cualquier cosa en paintComponent(...):  invoque super.paintComponent (pinta background)
  • 81. PINTADO  Cada componente tiene su propio sistema de coordenadas desde (0,0) hasta (ancho-1, alto-1) (0, 0) X Component (ancho -1, alto -1)
  • 82. PINTADO  Tener en cuenta el borde del componente (si lo tiene), reduce el área de pintado y desplaza coordenadas.
  • 83. OBJETO GRAPHICS  El objeto Graphics provee un contexto para el pintado y métodos para la misma función.  El contexto gráfico consiste en el estado actual:color de pintado, fuente, área de pintado
  • 84. PINTADO DE FORMAS  La clase Graphics define métodos para pintar formas:  void drawLine(int x0, int y0, int x1, int y1)  void drawArc(int x, int y, int width, int height, int startAngle,int arcAngle)  void drawPolygon(Polygon p)  void drawPolygon(int xPoints[ ], int yPoints[ ], int numPoints)  void drawRect(int x, int y, int width, int height)  void drawRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight)  void draw3DRect(int x, int y, int width, int height, boolean raised)  void drawOval(int x, int y, int width, int height)
  • 86. PINTADO DE TEXTO  La clase Graphics define métodos para pintar texto: String (drawString)
  • 87. PINTADO DE TEXTO  La clase Graphics define métodos para pintar texto: String (drawString)
  • 88. IMÁGENES  Cargar y mostrar imágenes es muy simple  Class ImageIcon de javax.swing.  Ej.:ImageIcon myIcon=new ImageIcon(“imagefile.gif”); Image image3 = getImage( new URL("http://java.sun.com/graphics/people.gif"));
  • 89. IMÁGENES • ImageIcon myImage = new ImageIcon("book.gif"); • JLabel myLabel = new JLabel(myImage); • getContentPane().add(myLabel); •JButton JButFeedback = new JButton(myImage); •JButton JButWrite = new JButton("Write"); •JButWrite.setIcon(myImage2); •JButton JButChange = new JButton(myImage3); •JButChange.setRolloverEnabled(true); •JButChange.setRolloverIcon(myImage4);
  • 90. CARGA DE IMÁGENES  myImage = Toolkit.getDefaultToolkit().getImage(filenameOrURL); retorna inmediatamente, no hay que esperar que la imagen se cargue antes de realizar otras operaciones. Algunos programas requieren más control o información acerca de la carga:  clase MediaTracker  método imageUpdate de la interface ImageObserver (útiles ambas también para no mostrar una imagen hasta que esté completamente cargada o informar a ProgressBar)
  • 91. MOSTRAR IMÁGENES  Métodos gráficos:(invocar en paintComponent)  drawImage(image, x, y, observer)  drawImage(image, x, y, w, h, observer)  drawImage(image, x, y, bgcol, observer)  drawImage(image, x, y, w, h, bgcol, ob.) La clase Component implementa la interface ImageObserver, casi siempre el último argumento es this
  • 92. IMÁGENES class MyPanel extends JPanel { private ImageIcon myImage; public MyPanel() { myImage = new ImageIcon("nasa.gif"); setPreferredSize(new Dimension(myImage.getIconWidth(), myImage.getIconHeight())); } public void paintComponent(Graphics g) { g.drawImage(myImage.getImage(), 10, 10, null); }}
  • 94. ANIMACIÓN  Se muestran sucesivos frames a una velocidad relativamente alta (usualmente 10-20 frames por segundo), se crea una sensación de movimiento  Para actualizar periódicamente la pantalla se usa un “loop de animación”, normalmente se implementa con un objeto javax.swing.Timer (se necesita un thread separado, nunca poner en paintComponent ya que la aplicación queda congelada)
  • 95. ANIMACIÓN  Timer Timer timer = new Timer(delay, this); …//this:action handler public synchronized void startAnimation() { if (!timer.isRunning()) {timer.start();} } … public synchronized void stopAnimation() { if (timer.isRunning()) { timer.stop();}}