SlideShare ist ein Scribd-Unternehmen logo
1 von 144
Introducción a Java




                      DÍA 1
                              Introducción a la programación orientada a objetos
                              Introducción a Java
                              Herramientas necesarias para desarrollar en Java
                      DÍA 2
                              Gramática de Java
                              Estructura de componentes AWT
                              Aplicaciones vs. Applets
                              Clases, métodos, atributos y objetos en Java
                      DÍA 3
                              Creación de applets sencillos
                              Animaciones simples y multithreading
                      DÍA 4
                              Interfaz gráfica de usuario (AWT)
                              Control de eventos (Event Handling)
                      DÍA 5
                           Ejemplo de programas
                      BIBLIOGRAFÍA RECOMENDADA

                      DIRECCIONES EN iNTERNET

                      GRUPOS DE NOTICIAS




DIA 1

Introducción a la OOP (programación orientada a objetos)

Junto con el paradigma de la orientación a procedimientos, son las dos filosofías
generales de diseño más importantes. A diferencia de la orientación a procedimientos
(OP), la orientación a objetos (OO) no concibe los procesos como una secuencia de
procedimientos con su entrada y salida sino que se basa en un conjunto de objetos
interactuando:
Veamos a continuación los aspectos más destacados de esta filosofía general de diseño.

       1. Clases y objetos

       Es importante distinguir entre los conceptos de clase y objeto:

              Clase: Es un modelo abstracto de un tipo de objeto. Define sus métodos
              y atributos.
              Objeto: Es una instancia de una clase, es decir, la implementación con
              valores de un modelo abstracto.




       Las clases no son entidades independientes sino que se agrupan jerárquicamente
       heredando características y atributos. Cada instancia o implementación real de
una clase constituirá un nuevo objeto por lo que se pueden crear infinitos objetos
distintos a partir de una sola clase.

2. Encapsulación

Se define como el proceso de empaquetar juntos los métodos y los datos en un
objeto. El objeto se encarga de ocultar sus datos al resto de objetos. La
encapsulación permite una seguridad mayor en el acceso a los datos ya que este
acceso depende directamente de cada objeto. Asimismo, permite abstraer los
detalles internos de funcionamiento del objeto.

3. Intercambio de mensajes

Los objetos se comunican entre sí mediante mensajes de invocación a métodos:




4. Herencia

Es el concepto que define la adopción de todas las características de una clase
por parte de otra clase que es definida como descendiente o heredera de la
primera.
La principal consecuencia de la herencia es la posibilidad de reutilizar clases ya
      que se pueden crear nuevas a partir de las ya creadas.

      La herencia puede ser de dos tipos, simple si sólo es posible heredar
      características de una sola clase, o múltiple si se pueden heredar características
      de varias clases.




Introducción a Java

      1. Historia de JAVA

      A finales de los años ochenta Sun Microsystems decide introducirse en el
      mercado de la electrónica de consumo y más concretamente en los equipos
      domésticos, incluyendo la televisión interactiva. Java, nace como un lenguaje
      ideado en sus comienzos para programar electrodomésticos!

      En sus primeras versiones, se llamó OAK.

      2. Objetivos de diseño de los creadores de JAVA

             LENGUAJE FAMILIAR:

             Java no sería un lenguaje totalmente nuevo, se parecería a lo que
             conocemos como C++, así que no le sería tan complicado recalar en los
             programadores escépticos.

             LENGUAJE ORIENTADO A OBJETOS:

             Para que un lenguaje pueda considerarse orientado a objetos debe
             soportar como mínimo las características de:

                      - encapsulación
                      - herencia
                      - polimorfismo
                      - enlace dinámico.

             LENGUAJE ROBUSTO:

             Uno de los problemas más comunes en los lenguajes de programación es
             la posibilidad de escribir programas que pueden bloquear el sistema.
             Algunas veces este bloqueo puede ser inmediato, pero en otras ocasiones
             llega a aparecer inesperadamente porque, por ejemplo, la aplicación
             accede a zonas de memoria que no estaban siendo ocupadas por otros
             programas hasta ese momento. Un ejemplo claro de lenguaje no robusto
             es C. Al escribir código en C o C++ el programador debe hacerse cargo
             de la gestión de memoria de una forma explícita, solicitando la
asignación de bloques a punteros y liberándolos cuando ya no son
       necesarios.

       En Java, los punteros, la aritmética de punteros y las funciones de
       asignación y liberación de memoria (malloc( ) y free( ) ) no existen. En
       lugar de los punteros se emplean referencias a objetos, los cuales son
       identificadores simbólicos. El gestor de memoria de Java lleva una
       contabilidad de las referencias a los objetos. Cuando ya no existe una
       referencia a un objeto, éste se convierte en candidato para la recogida de
       basura (garbage collection).

       LENGUAJE DE ALTO RENDIMIENTO ( MÚLTIPLES THREADS ):

       Una de las características del lenguaje es que soporta la concurrencia a
       través de threads. En ocasiones puede interesarnos dividir una aplicación
       en varios flujos de control independientes, cada uno de los cuales lleva a
       cabo sus funciones de manera concurrente. Cuando los distintos flujos de
       control comparten un mismo espacio lógico de direcciones, se
       denominan threads.

       LENGUAJE PORTABLE:

       El principal objetivo de los diseñadores de Java, y dado el gran
       crecimiento de las redes en los últimos años, fue el de desarrollar un
       lenguaje cuyas aplicaciones una vez compiladas pudiesen ser
       inmediatamente ejecutables en cualquier máquina y sobre cualquier
       sistema operativo. Por ejemplo, un programa desarrollado en Java en una
       estación de trabajo Sun que emplea el sistema operativo Solaris, debería
       poderse llevar a un PC que utilice sistema operativo Windows NT.

       LENGUAJE LO MÁS SIMPLE POSIBLE:

       Los diseñadores de Java trataron de mantener las facilidades básicas del
       lenguaje en un mínimo y proporcionar un gran número de extras con las
       librerías de clases.

       LENGUAJE SEGURO:

       Se pretendía construir un lenguaje de programación que fuese seguro,
       esto es, que no pudiera acceder a los recursos del sistema de manera
       incontrolada. Por este motivo se eliminó la posibilidad de manipular la
       memoria mediante el uso de punteros y la capacidad de transformación
       de números en direcciones de memoria ( tal y como se hace en C )
       evitando así todo acceso ilegal a la memoria. Esto se asegura porque el
       compilador Java efectúa una verificación sistemática de conversiones.

3. Lo nuevo en JAVA

La gran novedad que aporta Java dentro de las nuevas generaciones de
navegadores es la capacidad de desplazar el control de la interactividad de los
servidores hacia las máquinas de los usuarios que se utilizan para recorrer
       Internet. Por la misma estructura del lenguaje, los nuevos navegadores permiten
       la telecarga de "applets", pequeños fragmentos de programas compactos,
       precompilados, que pueden entonces interpretar de modo distinto los datos
       telecargados para producir por ejemplo animaciones, sonido y especialmente la
       verdadera interactividad.

       El lenguaje Java, visto desde un navegador de Internet, es pues un lenguaje que
       no es ni totalmente interpretado, ni totalmente compilado. El lenguaje se
       transforma en un código elemental parecido al ensamblador, llamado también p-
       code o byte-code.

       Posee la particularidad de ser compacto y por tanto puede ser compilado
       (traducido a lenguaje máquina) muy rápidamente, en el transcurso de la propia
       ejecución del programa. El p-code constituye una capa intermedia que facilita
       enormemente la portabilidad de un entorno o de una máquina a otra. La facilita
       hasta el punto de lograrla desaparecer.

       Aparece entonces la "máquina virtual". Una máquina virtual es una capa lógica
       que hace creer al programa Java que se ejecuta en un ordenador real (con
       registros, memoria y procesador), cuando en realidad sólo ve una reconstrucción
       lógica de un ordenador.

       Para ejecutar un programa Java compilado (que está en p-code), es preciso
       también que cuente con una implementación de la máquina virtual específica
       donde se desea ejecutar, la cual efectúa la transformación del p-code en un
       programa comprensible para la máquina.




Herramientas necesarias para desarrollar en Java

Para desarrollar programas en Java es suficiente con instalar el paquete JDK de Sun,
que es de libre distribución. En el site de Sun podemos encontrar toda clase de
información relacionada con Java: Ejemplos de programas escritos en Java, tutoriales,
documentación, bugs conocidos y su solución, etc..
La dirección base es : www.sun.com

La ultima version disponible hasta la fecha es la JDK 1.2

Pasos para crear un programa en Java

       - Aplicaciones

               Escribir el programa fuente en cualquier editor y guardarlo con extensión
               .java

               Compilar el fichero fuente mediante: javac miPrograma.java .Esto genera
               el fichero .class

               Ejecutarlo (interpretar los byte-code) : java miPrograma

       - Applets

               Escribir el programa fuente en cualquier editor y guardarlo con extensión
               .java

               Compilar el fichero fuente mediante: javac miProgramaApplet.java

               Escribir la pagina web que contendra al applet y guardar el codigo con
               extension .html

               El codigo minimo será:

            <HTML>

            <BODY>

            <APPLET code="miProgramaApplet.class" width=400 height=400>

            </APPLET>

            </BODY>

            </HTML>


               2 posibilidades para ejecutar el applet:

                        - Lanzar un navegador y cargar la pagina html, o bien
                        - Usar el programa provisto por Sun para ver applets:
                        appletviewer miProgramaApplet.html

       Un ejemplo de herramientas básicas para comenzar a programar en lenguaje
       JAVA podría ser:
1.- Editor de código multilenguaje y con utilidades de edición y detección
        automática de errores. Un muy buen editor con estas propiedades y muchas más
        es ED for Windows v3.80 (www.getsoft.com) pero existen muchos otros y
        casi todos de libre distribución.

        2.- JDK1.1.x, con el que podemos compilar y probar las aplicaciones y applets
        realizados.

        3.- Documentación HTML de las clases JAVA.

        Además de lo arriba indicado, es aconsejable trabajar con paquetes de
        componentes que no pertenecen a los básicos de Java, como puede ser swing o
        symbeans. Estos componentes o beans proporcionan utilidades y facilidades
        añadidas al paquete básico de jdk.

        Otra posibilidad para desarrollar en JAVA es utilizar una herramienta Visual
        como Visual Cafe o V++. Estas herramientas suponen un entorno integrado de
        programación con módulos editor, de diseño visual, compilador, depurador, etc.
        Además proporcionan componentes propios especialmente útiles en diseño de
        interfaces gráficas.




DÍA 2

Gramática de Java

        1. Comentarios

        En Java hay tres tipos de comentarios:

        // comentarios para una sola línea

        /* comentarios de una o
        más líneas
        */

        /** comentario de documentación, de una o más líneas
        */


        Los dos primeros tipos de comentarios son los que todo programador conoce y
        se utilizan del mismo modo. Los comentarios de documentación, colocados
        inmediatamente antes de una declaración (de variable o función), indican que
        ese comentario ha de ser colocado en la documentación que se genera
        automáticamente cuando se utiliza la herramienta de Java, javadoc. Dichos
        comentarios sirven como descripción del elemento declarado permitiendo
        generar una documentación de nuestras clases escrita al mismo tiempo que se
        genera el código.
2. Identificadores

Los identificadores nombran variables, funciones, clases y objetos; cualquier
cosa que el programador necesite identificar o usar.

En Java, un identificador comienza con una letra, un subrayado (_) o un símbolo
de dólar ($). Los siguientes caracteres pueden ser letras o dígitos. Se distinguen
las mayúsculas de las minúsculas y no hay longitud máxima.

Ejemplos de identificadores válidos:

  Identificador nombre_usuario Nombre_Usuario _variable_de_sistema
                             $transaccion


y su uso sería, por ejemplo:

 int contador_principal; char _lista_de_ficheros; float cantidad_en_Ptas;
3. Palabras clave

Las siguientes son las palabras clave que están definidas en Java y que no se
pueden utilizar como identificadores:

abstract continue for new switch

boolean default goto null synchronizedbreak do if package thisbyte double
implements private threadsafebyvalue else import protected throwcase
extends instanceof public transient

catch false int return true

char final interface short try

class finally long static void

const float native super while


4. Palabras reservadas

Además, el lenguaje se reserva unas cuantas palabras más, pero que hasta ahora
no tienen un cometido específico. Son:

cast future generic inneroperator outer rest var


5. Tags HTML

Atributos del tag <APPLET>; (en negrita los imprescindibles)
<APPLETCODEBASE=url raizCODE=fichero con la clase principal

      WIDTH=anchura

      HEIGTH=altura

      ALT=texto alternativo (para navegadores sin soporte Java pero que saben interpretar
      el tag APPLET)

      NAME=nombre del applet. Para hacer referencia al applet desde otro o desde
      JavaScript

      ALIGN=alineacion (hasta 9 valores: LEFT, RIGHT, TOP, MIDDLE, etc...)

      VSPACE=espacio en pixeles dejado en blanco como margen en la ventana del applet

      HSPACE=idem izqda-dcha >

      <PARAM NAME=unPArametro VALUE=valorDelParametro>

      <PARAM NAME=otroParametro VALUE=valor>

      <ídem etc>

      Texto alternativo

      </APPLET>




Estructura de componentes AWT




Aplicaciones vs. Applets

      Las características propias del lenguaje JAVA hacen que además de poder
      desarrollar aplicaciones que se ejecutan en el intérprete local, se puedan
      desarrollar módulos descargables a través de una página web y ejecutables en la
      JVM (Java Virtual Machine) del navegador. Estos módulos reciben el nombre
      de Applets.
Veamos ejemplos sencillos de cada tipo de desarrollo para apreciar las
       diferencias de estructura gramatical.

       1. Aplicaciones

       class EchoArgs

       {

              public static void main (String args[])

              {

              for ( int i = 0;i<args.length ; i++ )

              {

              System.out.println("Argumento " + i + ": " + args[i]);

              }

              }

       }


       2. Applets

       // HolaMundoCruelApplet.java
       import java.awt.Graphics;
       import java.awt.Font;
       import java.awt.Color;
       public class HolaMundoCruelApplet extends java.applet.Applet
       {
       Font f = new Font("Arial", Font.BOLD, 36);
       public void paint(Graphics g)

              {
              g.setFont(f);
              g.setColor(Color.red);
              g.drawString("Hola mundo cruel",5,50);
              }
       }




Clases, métodos, atributos y objetos en Java

Veamos a continuación mediante un ejemplo cómo se implementan los conceptos más
importantes vistos teóricamente en la introducción a la OOP en JAVA:
// Moto.java

package java.testJavadoc;


/**
*Este texto es un comentario sobre la clase Moto
* @author CTI
* @version 1
* @see clase UsarMoto
*/
class Moto
{
String fabricante;
private String color;
boolean motorEncendido;
//private int numeroDeSerie;
static int cilindrada = 250; //centimetros cubicos
String nombreDelPropietario;
// Metodo Constructor
/** Metodo constructor
*/
Moto(String nombre)
        {
        this.nombreDelPropietario = nombre;
        }

Moto( )
       {
       ;
       }

void encenderMotor( )
       {
       if (motorEncendido == true)
              {
              System.out.println("El motor ya esta encendido !");
              }

       else
               {
               motorEncendido = true;
               System.out.println("Brrummm. El motor se acaba de encender");
               }

       }

void describeMoto( )
       {
       System.out.println("Descripcion de La moto;");
       System.out.println("- marca: " + fabricante);
       System.out.println("- pintada de color: " + color);
       System.out.println("- cilindrada: " + cilindrada + " centimetros cubicos");
       if (motorEncendido == true)
              {
              System.out.println("- el motor esta encendido");
}

       else
              {
              System.out.println("- el motor esta apagado");
              }

       }


/* Añadir:
      - apagarMotor
      - cambiarColor (declarar color private)
      - escribir main en la propia clase y como clase independiente
      - metodo que devuelve un valor en vez de void -> devolver un objeto propio
      - variable estatica: al cambiarla, varian las de todas las instancias
      - metodo constructor con parametro Nombre del propietario

Comentarios:
     - al no declarar que hereda de nadie, se asume que es de Object
     - comentarios !!!!
     - aritmetica de Strings, se suman
     - println es menos potente que en C
     - null y los valores por defecto
     - this
     - las referencias -> programa de ejemplo
     - la recogida de basura -> el programador no gestiona la memoria

       */

public static void main(String args[])
        {
        Moto miMoto;
        miMoto = new Moto( );
        miMoto.fabricante = "Kawasaki";
        miMoto.color = "verde fosforito";

       miMoto.describeMoto( );
       System.out.println("-------------------");
       System.out.println("Arrancando el motor...");
       miMoto.encenderMotor( );
       System.out.println("-------------------");
       miMoto.describeMoto( );
       System.out.println("-------------------");
       miMoto.encenderMotor( );
       // Otra moto
       Moto laMotoDeMiHermano = new Moto( );
       laMotoDeMiHermano.fabricante = "Suzuki";
       System.out.println("-------------------");
       laMotoDeMiHermano.describeMoto( );
       // Altera la variable estatica de la clase Moto
       Moto.cilindrada = 500;
       laMotoDeMiHermano.describeMoto( );
       miMoto.describeMoto( );

       // NOTA: el color saldra null
}

}




1. Tipos de Clases

Hasta ahora sólo se ha utilizado la palabra clave public para calificar el nombre de las
clases que hemos visto, pero hay tres modificadores más. Los tipos de clases que
podemos definir son:

       abstract

       Una clase abstract tiene al menos un método abstracto. Una clase abstracta no se
       instancia, sino que se utiliza como clase base para la herencia.

       final

       Una clase final se declara como la clase que termina una cadena de herencia. No
       se puede heredar de una clase final. Por ejemplo, la clase Math es una clase
       final.

       public

       Las clases public son accesibles desde otras clases, bien sea directamente o por
       herencia. Son accesibles dentro del mismo paquete en el que se han declarado.
       Para acceder desde otros paquetes, primero tienen que ser importadas.

       synchronizable

       Este modificador especifica que todos los métodos definidos en la clase son
       sincronizados, es decir, que no se puede acceder al mismo tiempo a ellos desde
       distintos threads; el sistema se encarga de colocar los flags necesarios para
       evitarlo. Este mecanismo hace que desde threads diferentes se puedan modificar
       las mismas variables sin que haya problemas de que se sobreescriban.

2. Variables y métodos de instancia

Una clase en Java puede contener variables y métodos. Las variables pueden ser tipos
primitivos como int, char, etc. Los métodos son funciones.

Por ejemplo, en el siguiente trozo de código podemos observarlo:

                       public MiClase {
                               int i;

                               public MiClase() {

                                          i = 10;
}

                               public void Suma_a_i( int j ) {
                                       i = i + j;

                                       }

                               }

La clase MiClase contiene una variable (i) y dos métodos, MiClase que es el constructor
de la clase y Suma_a_i( int j ).

3. Métodos y Constructores

Los métodos son funciones que pueden ser llamadas dentro de la clase o por otras
clases. El constructor es un tipo específico de método que siempre tiene el mismo
nombre que la clase.

Cuando se declara una clase en Java, se pueden declarar uno o más constructores
opcionales que realizan la inicialización cuando se instancia (se crea una ocurrencia) un
objeto de dicha clase.

Utilizando el código de ejemplo anterior, cuando se crea una nueva instancia de
MiClase, se crean (instancian) todos los métodos y variables, y se llama al constructor
de la clase:

                       MiClase mc;

                       mc = new MiClase();

La palabra clave new se usa para crear una instancia de la clase. Antes de ser
instanciada con new no consume memoria, simplemente es una declaración de tipo.
Después de ser instanciado un nuevo objeto mc, el valor de i en el objeto mc será igual a
10. Se puede referenciar la variable (de instancia) i con el nombre del objeto:

                       mc.i++; // incrementa la instancia de i de mc

Al tener mc todas las variables y métodos de MiClase, se puede usar la primera sintaxis
para llamar al método Suma_a_i() utilizando el nuevo nombre de clase mc:

                       mc.Suma_a_i( 10 );

y ahora la variable mc.i vale 21.




4. Herencia
La Herencia es el mecanismo por el que se crean nuevos objetos definidos en términos
de objetos ya existentes. Por ejemplo, si se tiene la clase Ave, se puede crear la subclase
Pato, que es una especialización de Ave.

                       class Pato extends Ave {
                               int numero_de_patas;

                              }

La palabra clave extends se usa para generar una subclase (especialización) de un
objeto. Una Pato es una subclase de Ave. Cualquier cosa que contenga la definición de
Ave será copiada a la clase Pato, además, en Pato se pueden definir sus propios métodos
y variables de instancia. Se dice que Pato deriva o hereda de Ave.

Además, se pueden sustituir los métodos proporcionados por la clase base. Utilizando
nuestro anterior ejemplo de MiClase, aquí hay un ejemplo de una clase derivada
sustituyendo a la función Suma_a_i():

                       import MiClase;

                       public class MiNuevaClase extends MiClase {

                              public void Suma_a_i( int j ) {

                              i = i + ( j/2 );

                              }

                       }

Ahora cuando se crea una instancia de MiNuevaClase, el valor de i también se inicializa
a 10, pero la llamada al método Suma_a_i() produce un resultado diferente:

                       MiNuevaClase mnc;

                       mnc = new MiNuevaClase();

                       mnc.Suma_a_i( 10 );

En Java no se puede hacer herencia múltiple. Por ejemplo, de la clase aparato con motor
y de la clase animal no se puede derivar nada, sería como obtener el objeto toro
mecánico a partir de una máquina motorizada (aparato con motor) y un toro (aminal).
En realidad, lo que se pretende es copiar los métodos, es decir, pasar la funcionalidad
del toro de verdad al toro mecánico, con lo cual no sería necesaria la herencia múltiple
sino simplemente la compartición de funcionalidad que se encuentra implementada en
Java a través de interfaces.

5. Control de acceso

Cuando se crea una nueva clase en Java, se puede especificar el nivel de acceso que se
quiere para las variables de instancia y los métodos definidos en la clase:
public

       public void CualquieraPuedeAcceder(){}

       Cualquier clase desde cualquier lugar puede acceder a las variables y métodos de
       instacia públicos.

       protected

       protected void SoloSubClases(){}

       Sólo las subclases de la clase y nadie más puede acceder a las variables y
       métodos de instancia protegidos.

       private

       private String NumeroDelCarnetDeIdentidad;

       Las variables y métodos de instancia privados sólo pueden ser accedidos desde
       dentro de la clase. No son accesibles desde las subclases.

       friendly (sin declaración específica)

       void MetodoDeMiPaquete(){}

       Por defecto, si no se especifica el control de acceso, las variables y métodos de
       instancia se declaran friendly (amigas), lo que significa que son accesibles por
       todos los objetos dentro del mismo paquete, pero no por los externos al paquete.
       Es lo mismo que protected.

       Los métodos protegidos (protected) pueden ser vistos por las clases derivadas,
       como en C++, y también, en Java, por los paquetes (packages). Todas las clases
       de un paquete pueden ver los métodos protegidos de ese paquete. Para evitarlo,
       se deben declarar como private protected, lo que hace que ya funcione como en
       C++ en donde sólo se puede acceder a las variables y métodos protegidos de las
       clases derivadas.




6. Variables y métodos estadísticos

En un momento determinado se puede querer crear una clase en la que el valor de una
variable de instancia sea el mismo (y de hecho sea la misma variable) para todos los
objetos instanciados a partir de esa clase. Es decir, que exista una única copia de la
variable de instancia. Se usará para ello la palabra clave static.

                      class Documento extends Pagina {

                      static int version = 10;
}

El valor de la variable version será el mismo para cualquier objeto instanciado de la
clase Documento. Siempre que un objeto instanciado de Documento cambie la variable
version, ésta cambiará para todos los objetos.

De la misma forma se puede declarar un método como estático, lo que evita que el
método pueda acceder a las variables de instancia no estáticas:

                      class Documento extends Pagina {
                              static int version = 10;
                              int numero_de_capitulos;
                              static void annade_un_capitulo() {
                                        numero_de_capitulos++; // esto no funciona
                                        }
                              static void modifica_version( int i) {
                                        version++; // esto si funciona
                                        }
                              }

La modificación de la variable numero_de_capitulos no funciona porque se está
violando una de las reglas de acceso al intentar acceder desde un método estático a una
variable no estática.

Todas las clases que se derivan, cuando se declaran estáticas, comparten la misma
página de variables; es decir, todos los objetos que se generen comparten la misma zona
de memoria. Las funciones estáticas se usan para acceder solamente a variables
estáticas.

                      class UnaClase {
                              int var;
                              UnaClase()
                                       {
                                       var = 5;
                                       }
                              UnaFuncion()
                                       {
                                       var += 5;
                                       }
                              }

En el código anterior, si se llama a la función UnaFuncion a través de un puntero a
función, no se podría acceder a var, porque al utilizar un puntero a función no se pasa
implícitamente el puntero al propio objeto (this). Sin embargo, sí se podría acceder a var
si fuese estática, porque siempre estaría en la misma posición de memoria para todos los
objetos que se creasen de UnaClase.

7. Interfaces

Los métodos abstractos son útiles cuando se quiere que cada implementación de la clase
parezca y funcione igual, pero necesita que se cree una nueva clase para utilizar los
métodos abstractos.
Los interfaces proporcionan un mecanismo para abstraer los métodos a un nivel
superior.

Un interface contiene una colección de métodos que se implementan en otro lugar. Los
métodos de una clase son public, static y final.

La principal diferencia entre interface y abstract es que un interface proporciona un
mecanismo de encapsulación de los protocolos de los métodos sin forzar al usuario a
utilizar la herencia.

Por ejemplo:

                        public interface VideoClip {
                                 // comienza la reproduccion del video
                                 void play();
                                 // reproduce el clip en un bucle
                                 void bucle();
                                 // detiene la reproduccion
                                 void stop();
                                 }

Las clases que quieran utilizar el interface VideoClip utilizarán la palabra implements y
proporcionarán el código necesario para implementar los métodos que se han definido
para el interface:

                        class MiClase implements VideoClip {
                                void play() {
                                        <código>
                                        }
                                void bucle() {
                                        <código>
                                        }
                                void stop() {
                                        <código>
                                        }

Al utilizar implements para el interface es como si se hiciese una acción de copiar-y-pegar del
código del interface, con lo cual no se hereda nada, solamente se pueden usar los métodos.
La ventaja principal del uso de interfaces es que una clase interface puede ser implementada
por cualquier número de clases, permitiendo a cada clase compartir el interfaz de programación
sin tener que ser consciente de la implementación que hagan las otras clases que implementen
el interface.

                        class MiOtraClase implements VideoClip {
                                void play() {
                                        <código nuevo>
                                        }
                                void bucle() {
                                        <código nuevo>
                                        }
                                void stop() {
                                        <código nuevo>
                                        }
DÍA 3

Creación de applets sencillos

        Se incrustan en las paginas web

        Se cargan dinamicamente de la red

        Son programas, luego problema de seguridad: restricciones

               Un applet no puede cargar librerias o definir metodos nativos (programas
               en C por ejemplo)
               Como norma general no puede leer ni escribir ficheros en el ordenador
               en que se ejecuta. Si es necesario, se pueden escribir en el HD del
               ordenador host.
               No puede conectarse por red excepto al host del cual se cargo el applet
               No puede ejecutar ningun programa en el ordenador local
               No pueden lanzar programas en el equipo local
               Se supone que hay seguridad total, pero algun listillo podria
               desbaratarla... Sun desafió a los hackers!
               Un applet puede invocar metodos de otros applets que residan en la
               misma pagina
               Los applets cargados desde el sistema local (desde un directorio definido
               en CLASSPATH) no tienen, por defecto, ninguna de las restricciones de
               los applets cargados desde la red
               Se pueden leer algunas caracteristicas del sistema local;

                                     Permitidas
                                     Key Meaning
                                     "file.separator" File separator (for example, "/")
                                     "java.class.version" Java class version number
                                     "java.vendor" Java vendor-specific string
                                     "java.vendor.url" Java vendor URL
                                     "java.version" Java version number
                                     "line.separator" Line separator
                                     "os.arch" Operating system architecture
                                     "os.name" Operating system name
                                     "path.separator" Path separator (for example,
                                     ":")

                                     Ejemplo de uso: String s =
                                     System.getProperty("os.name");

                                     No permitidas
                                     Key Meaning
                                     "java.class.path" Java classpath
                                     "java.home" Java installation directory
                                     "user.dir" User's current working directory
"user.home" User home directory
                               "user.name" User account name

       Cada N crea un objeto de la clase SecurityManager
       Se puede definir que restricciones se le aplican al applet. Si se violan, se
       produce una excepcion, que el programador puede tratar ("vaya, aqui no
       me dejan leer de disco")
       Algunos applets paran su ejecucion al salir de la pagina, pero otros
       continuan

Subclase de java.applet.Applet: por tanto hereda los metodos y clases para
manipular graficos, sonidos, etc...
PUBLIC class miclase extends java.applet.Applet: solo la clase principal debe
ser publica por fuerza
A diferencia de las aplicaciones main(), applets son algo mas complicados.
Fases en la vida de un applet;
       Public void init() {...}:


                       Ocurre cuando se carga por 1º vez el applet o al recargar.
                       Crea objetos, estado inicial, carga imagenes o fuentes.
                       Solo ocurre 1 vez en la vida de un applet.

           o   Public void start() {...}:


                       Despues de init o de stop: por ejemplo si vamos a otra
                       pagina y despues volvemos. Ocurre 1 o mas veces por
                       tanto

           o   Public void Stop() {...}:


                               Contrapartida de start(). Cuando el usuario deja
                               una pagina, los threads lanzados se siguen
                               ejecutando(¡!??)

                      Destroy() {...}

                               No es destruccion como en C++. Sirve para dejar
                               bien atadas los cosas, p.ej. matar threads.
                               Similar a finalize(), que es para objetos
                               individuales. Destroy() solo en applets!




              Public void paint(Graphics g)
                   Applet crea una ventana y pinta en ella: texto, lineas,
                      imagenes
   Paint puede ocurrir cientos de veces: cada vez que se
    mueve el navegador
   Toma argumento g pasado por N automaticamente
   Incluir import java.awt.Graphics



    Ejemplo1:

           // CicloVidaApplet.java

           import java.awt.Graphics;
           import java.applet.Applet;

           public class CicloVidaApplet extends Applet
           {
           int contadorInit = 0;
           int contadorStart = 0;
           int contadorPaint = 0;
           int contadorStop = 0;
           int contadorDestroy = 0;

           public void init() {contadorInit++;}
           public void start() {contadorStart++;}
           public void paint(Graphics g)

                          {
                          contadorPaint++;
                          g.drawString("Contador Init: " +
                          contadorInit, 25,25);
                          g.drawString("Contador Start: " +
                          contadorStart, 25,50);
                          g.drawString("Contador Paint: " +
                          contadorPaint, 25,75);
                          g.drawString("Contador Stop: " +
                          contadorStop, 25,100);
                          g.drawString("Contador Destroy:
                          " + contadorDestroy, 25,125);
                          }

           public void stop() {contadorStop++;}
           public void destroy() {contadorDestroy++;}
           }



    Ejemplo2:

           // HolaMundoCruelApplet.java

           import java.awt.Graphics;
           import java.awt.Font;
           import java.awt.Color;

           public class HolaMundoCruelApplet extends
           java.applet.Applet
{
                      Font f = new Font("Arial", Font.BOLD, 36);

                      public void paint(Graphics g)

                             {
                             g.setFont(f);
                             g.setColor(Color.red);
                             g.drawString("Hola mundo cruel",5,50);

                      }
                      }
                      Crear HolaMundoCruelApplet.HTML:
                      <HTML>
                      <BODY>
                      <applet code="HolaMundoCruelApplet.class"
                      width=400 height=400>
                      </applet>
                      </BODY>
                      </HTML>

       En el applet Java:

             No hay init(), start(), destroy() sobreescritos. Demasiado
              simple!
             36 es el tamaño
             posicion (x=5, y=50). El origen (0,0) es la esquina
              superior izquierda.
                           Probar a cortar el texto
                           No funciona!!! Hay que salir de N y volver
                              a entrar
                           Desactivando caché ¿? Tampoco...



En el HTML:

      Ejemplo anterior es el mas sencillo posible.
      El tag <APPLET>: extension del lenguaje HTML para applets
      CODE es un atributo, el nombre del fichero class.
      El class debe estar en el mismo directorio. Para directorio
       especifico, CODEBASE (mas tarde)
      WIDTH, HEIGTH son obligatorios. Dimensiones de la caja de
       applet. Si pequña, se recorta.
      Cerrar con </APPLET>
      Opcionalmente linea siguiente a </APPLET> para N no Java
       ("Deberia aparecer aqui un applet si tu navegador es compatble
       con Java")




      Mas sobre el tag <APPLET>. Otros atributos;
<APPLET


                  CODEBASE=url raiz
                  CODE=fichero con la clase principal
                  WIDTH=anchura
                  HEIGTH=altura
                  ALT=texto alternativo (para navegadores sin
                  soporte Java pero que saben interpretar el tag
                  APPLET
                  NAME=nombre del applet. Para hacer referencia
                  al applet desde otro o desde JavaScript
                  ALIGN=alineacion (hasta 9 valores: LEFT,
                  RIGHT, TOP, MIDDLE, etc...)
                  VSPACE=espacio en pixeles dejado en blanco
                  como margen por el N (ver p.141 21days)
                  HSPACE=idem izqda-dcha


    >

            [* Parametros: explicado mas adelante]


                                        <PARAM
                                        NAME=unPArametro
                                        VALUE=valorDelParametro
                                        >
                                        <PARAM
                                        NAME=otroParametro
                                        VALUE=valor>
                                        <idem etc>
                                        Texto alternativo
                                        </APPLET>

   * Parametros: en aplicaciones, linea de comandos iba a args[] en
    main(). Applets no tiene linea de comandos! Para pasarlos en
    applets se necesitan dos cosas;
        un tag especial en el HTML
        codigo en el applet .java para recoger los parametros

                          Ej:

                                        <PARAM NAME=fuente
                                        VALUE="TimesRoman">
                                        y
                                        String nombreDeLaFuente
                                        = getParameter("fuente");
                                        Proteccion: se añade a
                                        continuacion;
                                        If(nombreDelaFuente ==
                                        null)
                                        nombreDeLaFuente ==
                                        "Courier";
   Los parametros son siempre Strings. Si necesario valor
    numerico, tendremos que convertir

                  Ej:

                                 <PARAM
                                 NAME=tamañoLetras
                                 VALUE="36">
                                 y
                                 int tamañoDeLetra;
                                 String tam =
                                 getParameter("tamaño");
                                 If (tam == null)
                                 tamañoDeLetra = 20;
                                 }
                                 else tamañoDeLetra =
                                 Integer.parseInt(tam);

                                                             /
                                                             /

                                                             O
                                                             t
                                                             r
                                                             o
                                                             H
                                                             o
                                                             l
                                                             a
                                                             M
                                                             u
                                                             n
                                                             d
                                                             o
                                                             C
                                                             r
                                                             u
                                                             e
                                                             l
                                                             A
                                                             p
                                                             p
                                                             l
                                                             e
                                                             t
                                                             .
                                                             j
                                                             a
                                                             v
                                                             a

                                                             i
                                                             m
                                                             p
                                                             o
                                                             r
t

j
a
v
a
.
a
w
t
.
G
r
a
p
h
i
c
s
;

i
m
p
o
r
t

j
a
v
a
.
a
w
t
.
F
o
n
t
;

i
m
p
o
r
t

j
a
v
a
.
a
w
t
.
C
o
l
o
r
;


p
u
b
l
i
c

c
l
a
s
s

O
t
r
o
H
o
l
a
M
u
n
d
o
C
r
u
e
l
A
p
p
l
e
t

e
x
t
e
n
d
s

j
a
v
a
.
a
p
p
l
e
t
.
A
p
p
l
e
t

{

F
o
n
t

f

=

n
e
w

F
o
n
t
(
"
A
r
i
a
l
"
,

F
o
n
t
.
B
O
L
D
,
3
6
)
;

S
t
r
i
n
g

n
o
m
b
r
e
;

/
/

n
u
e
v
o


/
/

n
u
e
v
o

p
u
b
l
i
c

v
o
i
d

i
n
i
t
(
)


    {

    n
    o
    m
    b
    r
    e

    =

    g
    e
    t
    P
    a
    r
    a
    m
    e
    t
    e
    r
    (
    "
    N
    o
    m
    b
    r
    e
    "
    )
    ;

    i
    f

    (
    n
    o
    m
    b
    r
    e

    =
    =

    n
    u
    l
    l
    )
n
o
m
b
r
e

=

"
F
u
l
a
n
i
t
o
"
;

n
o
m
b
r
e

=

"
H
o
l
a

"

+

n
o
m
b
r
e

+

"
!
!
!
"
;
}


/
/


p
u
b
l
i
c

v
o
i
d

p
a
i
n
t
(
G
r
a
p
h
i
c
s

g
)


    {

    g
    .
    s
    e
    t
    F
    o
    n
    t
    (
    f
    )
    ;

    g
    .
s
e
t
C
o
l
o
r
(
C
o
l
o
r
.
r
e
d
)
;

g
.
d
r
a
w
S
t
r
i
n
g
(
"
H
o
l
a

m
u
n
d
o

c
r
u
e
l
"
,
5
,
5
0
)
                                                                            ;

                                                                            }


                                                                        }




                                          Si se sumara "Hola " +
                                          etc... en paint, seria
                                          menos eficiente. En init(),
                                          solo se ejecuta 1 vez!

   Usar applets publicos:
        O los cargamos localmente (dificultad: hay que bajar
           todas las clases, imagenes, sonidos, en misma jerarquia de
           directorios)
        O llamamos a la clase principal con su URL en CODE
        Las restricciones de seguridad:
           Son tan severas que los applets no pueden hacer nada
           demsiado serio sin autorizacion expresa (escribir, leer de
           disco). Base de datos?!?! Procesador de textos?!?!
           Imposible!!! Al menos manteniendo la seguridad al
           100%.

                              Graficos, texto y sonido

                  Graficos: coordenadas, lineas, puntos, circulos,
                   ovalos, poligonos o imagenes GIF
                  Texto: fuentes, tamaños
                  Color: de fondo, de dibujo
                  Graficos
                       Lineas: g.drawline(10,10,50,50)
                       Rectangulos:
                               Cuadrados
                               Esquinas redondeadas
                               Con efecto 3D: borde en relieve

                                          Ej:


                                                                        g
                                                                        .
                                                                        d
                                                                        r
                                                                        a
                                                                        w
                                                                        R
                                                                        e
                                                                        c
                                                                        t
(
x
,
y
,
a
n
c
h
u
r
a
,
a
l
t
u
r
a
)

g
.
f
i
l
l
R
e
c
t
(
2
0
,
2
0
,
8
0
,
8
0
)

g
.
d
r
a
w
R
o
u
n
d
R
e
c
t
(
a
,
b
,
c
,
d
,
E
,
F
)

(
v
e
r

p
1
5
1

2
1
d
a
y
s
)

g
.
f
i
l
l
R
o
u
n
d
R
e
c
t
(
.
.
.
)

g
.
                       d
                       r
                       a
                       w
                       3
                       D
                       r
                       e
                       c
                       t
                       (
                       2
                       0
                       ,
                       2
                       0
                       ,
                       6
                       0
                       ,
                       6
                       0
                       ,
                       t
                       r
                       u
                       e
                       )
                       ;


   Poligonos:


                 Ej:


                       i
                       n
                       t

                       l
                       i
                       s
                       t
                       a
                       C
                       o
                       o
                       r
                       d
                       X
                       [
                       ]
=

{
0
,
1
0
,
2
0
,
1
0
,
5
0
,
0
}
;

i
n
t

l
i
s
t
a
C
o
o
r
d
Y
[
]

=

{
0
,
2
0
,
3
0
,
6
0
,
4
0
,
0
}
;

i
n
t

n
u
m
e
r
o
P
u
n
t
o
s
P
o
l
i
g
o
n
o

=

l
i
s
t
a
C
o
o
r
d
X
.
l
e
n
g
t
h
;

g
.
d
r
a
w
P
o
l
y
g
o
n
(
l
i
s
t
a
C
o
o
r
d
X
,
l
i
s
t
a
C
o
o
r
d
Y
,
n
u
m
e
r
o
P
u
n
t
o
s
P
o
l
i
g
o
n
o
)
;


C
o
n

o
b
j
e
t
o
s
;


i
n
t

l
i
s
t
a
C
o
o
r
d
X
[
]

=

{
0
,
1
0
,
2
0
,
1
0
,
5
0
,
0
}
;

i
n
t

l
i
s
t
a
C
o
o
r
d
Y
[
]

=

{
0
,
2
0
,
3
0
,
6
0
,
4
0
,
0
}
;

i
n
t

n
u
m
e
r
o
P
u
n
t
o
s
P
o
l
i
g
o
n
o
=

l
i
s
t
a
C
o
o
r
d
X
.
l
e
n
g
t
h
;

P
o
l
y
g
o
n

p
o
l
i
g
o
n
o

=

n
e
w

P
o
l
y
g
o
n
(
l
i
s
t
a
C
o
o
r
d
X
,

l
i
s
t
a
C
o
o
r
d
Y
,
n
u
m
e
r
o
P
u
n
t
o
s
P
o
l
i
g
o
n
o
)
;

g
.
d
r
a
w
P
o
l
y
g
o
n
(
p
o
l
i
g
o
n
o
)
;

/
/

p
o
l
i
g
o
n
o
.
a
d
d
P
o
i
n
t
(
2
0
,
3
0
)
;

/
/

b
o
o
l
e
a
n

e
s
t
a
D
                                                 e
                                                 n
                                                 t
                                                 r
                                                 o

                                                 =

                                                 p
                                                 o
                                                 l
                                                 i
                                                 g
                                                 o
                                                 n
                                                 o
                                                 .
                                                 c
                                                 o
                                                 n
                                                 t
                                                 a
                                                 i
                                                 n
                                                 s
                                                 (
                                                 x
                                                 ,
                                                 y
                                                 )
                                                 ;


   Ovalos: g.drawOval(a,b,c,d)
   Arcos: g.drawArc(a,b,c,d,e,f,g)




   Copiando areas de la pantalla


                         g.copyAerea(origen
                         X,origenY,anchura,
                         altura,destinoX,des
                         tinoY)

                         // Borrar un area.
                         Se rellena con el
                         color de fondo
                         // Para borrar todo
                         el applet;

                         g.clearRect(0,0,size
                         ().width,size().heigt
h)
                          // size() devuelve
                          un objeto
                          Dimension

   Texto y fuentes
   Clases Font y FontMetrics
        public Font(String nombre, int
           estilo, int tamaño)
           Estilos; PLAIN, BOLD(negrita),
           ITALIC, BOLD+ITALIC
           Ej:

           Font f = new Font("Helvetica",
           Font.BOLD, 14);
           // Font f = new Font("Helvetica",
           Font.BOLD + Font.ITALIC, 14);
           g.setFont(f);
           g.drawString("Texto en Helvetica
           y negrita", 10, 10);

          public FontMetrics(Font fuente)
           Permite centrar un texto. Da
           medidas de las letras, anchura,
           distancia a la base, etc...




          Color
                  De 24 bits. 3 componentes,
                   espacio RGB
                  0,0,0 es negro
                  255,0,0 es rojo
                  255,255,255 es blanco
                  etc...
   colores predefinidos como
    constantes:


    Color.white, Color.yellow,
    Color.lightGray,etc..


    Ej:

                         Color
                         miCol
                         or =
                         new
                         Color
                         (130,
                         124,3
                         1);
                         g.set
                         Color
                         (miC
                         olor);
                         //
                         empi
                         eza a
                         dibuj
                         ar
                         con
                         el
                         nuev
                         o
                         color
                         setBa
                         ckgro
                         und(
                         Color
                         .blue
                         ); //
                         camb
                         ia el
                         color
                         de
                         fondo
                         del
                         apple
                         t
                         setFo
                         regro
                         unf(C
                         olor.b
                         lack(;
                         //
                         camb
                         ia de
                         golpe
                         el
color
de
todo
lo
dibuj
ado

//
Cajas
DeCo
lores.
java

impor
t
java.
awt.
Grap
hics;
impor
t
java.
awt.C
olor;

publi
c
class
Cajas
DeCo
lores
exten
ds
java.
apple
t.App
let
{
publi
c
void
paint
(Grap
hics
g)

         {

         i
         n
         t

         r
         o
         j
         o
         ,
v
e
r
d
e
,
a
z
u
l
;

f
o
r

(
i
n
t

j

=

3
0
;

j

<

(
s
i
z
e
(
)
.
h
e
i
g
h
t

-

2
5
)
;

j
+
=

3
0
)


    {

    f
    o
    r

    (
    i
    n
    t

    i

    =

    5
    ;

    i

    <

    (
    s
    i
    z
    e
    (
    )
    .
    w
    i
    d
    t
    h

    -

    2
    5
    )
    ;

    i

    +
    =

    3
0
)


    {

    r
    o
    j
    o

    =

    (
    i
    n
    t
    )

    M
    a
    t
    h
    .
    f
    l
    o
    o
    r
    (
    M
    a
    t
    h
    .
    r
    a
    n
    d
    o
    m
    (
    )

    *

    2
    5
    6
    )
    ;

    v
    e
    r
    d
    e
=

(
i
n
t
)

M
a
t
h
.
f
l
o
o
r
(
M
a
t
h
.
r
a
n
d
o
m
(
)

*

2
5
6
)
;

a
z
u
l

=

(
i
n
t
)

M
a
t
h
.
f
l
o
o
r
(
M
a
t
h
.
r
a
n
d
o
m
(
)

*

2
5
6
)
;


g
.
s
e
t
C
o
l
o
r
(
n
e
w

C
o
l
o
r
(
r
o
j
o
,
v
e
r
d
e
,
a
z
u
l
)
)
;

g
.
f
i
l
l
R
e
c
t
(
i
,
j
,
2
5
,
2
5
)
;

g
.
s
e
t
C
o
l
o
r
(
C
o
l
o
r
.
b
l
a
                                            c
                                            k
                                            )
                                            ;

                                            g
                                            .
                                            d
                                            r
                                            a
                                            w
                                            R
                                            e
                                            c
                                            t
                                            (
                                            i
                                            -
                                            1
                                            ,

                                            j
                                            -
                                            1
                                            ,

                                            2
                                            5
                                            ,

                                            2
                                            5
                                            )
                                            ;

                                            }


                                        }


                                    }


                               }

   Imagenes: clase Image, metodo
    drawImage()


                                            /
                                            /

                                            P
                                            i
n
t
a
F
o
t
o
.
j
a
v
a


i
m
p
o
r
t

j
a
v
a
.
a
p
p
l
e
t
.
A
p
p
l
e
t
;

i
m
p
o
r
t

j
a
v
a
.
a
w
t
.
G
r
a
p
h
i
c
s
;

i
m
p
o
r
t

j
a
v
a
.
a
w
t
.
I
m
a
g
e
;


p
u
b
l
i
c

c
l
a
s
s

P
i
n
t
a
F
o
t
o
e
x
t
e
n
d
s

A
p
p
l
e
t

{

I
m
a
g
e

i
m
a
g
e
n
;


p
u
b
l
i
c

v
o
i
d

i
n
i
t
(
)
p
u
b
l
i
c

v
o
i
d

p
a
i
n
t
(
G
r
a
p
h
i
c
s
g
)
}




   Sonido (p209 21days)
        Java tiene soporte para
           reproducir el formato .AU
           de Sun.
        Solo en applets
        En aplicaciones, se puede
           recurrir a una clase no
           documentada, sun.audio
        Las clases que comienzan
           por sun.XXX incluyen
           funciones que aun no se han
           estandarizado, pero que se
           prevé lo hagan en un futuro
           próximo. Pasará de
           sun.audio a java.audio. De
           cualquier forma, no es
           recomendable utilizarla,
           cuestion de asegurar
           compatibilidad.
        AU esta comprimido, pero
           calidad mediocre
        metodo play(URL)
        Ej:


                                         p
                                         l
                                         a
                                         y
                                         (
                                         g
                                         e
                                         t
                                         C
                                         o
                                         d
                                         e
                                         B
                                         a
                                         s
e
(
)
,

"
a
u
d
i
o
/
v
i
o
l
i
n
.
a
u
"
)
;


/
/

S
o
n
i
d
o
A
p
p
l
e
t
.
j
a
v
a


p
u
b
l
i
c

c
l
a
s
s

S
o
n
i
d
o
A
p
p
l
e
t

e
x
t
e
n
d
s

j
a
v
a
.
a
p
p
l
e
t
.
A
p
p
l
e
t

{

p
u
b
l
i
c

v
o
i
d
i
n
i
t
(
)


    {

    p
    l
    a
    y
    (
    g
    e
    t
    C
    o
    d
    e
    B
    a
    s
    e
    (
    )
    ,

    "
    y
    a
    h
    o
    o
    1
    .
    a
    u
    "
    )
    ;

    /
    /

    p
    o
    n
    e
    r

    y
    a
    h
o
                                              o
                                              1
                                              .
                                              a
                                              u

                                              e
                                              n

                                              d
                                              i
                                              r

                                              j
                                              a
                                              v
                                              a
                                              !

                                              }


                                          }


   Comienza en cuanto carga el
    sonido
   Si no lo encuentra, no da error. No
    hará nada.
   Para lanzar sonidos que se repitan
    constantemente; AudioClip

    Ej:


                          import
                          java.applet.
                          AudioClip;

                          AudioClip
                          clip =
                          getAudioClip
                          (getCodeBas
                          e(),
                          "audio/ruido
                          DeFondo.au"
                          );
                          clip.play();
                          // suena
                          solo una vez
                          clip.loop();
                          // suena
                          indefinidame
                          nte
                          clip.stop();
// obliga a
                          que se pare

   AudioClip no para de sonar aunque
    cambiemos de pagina. Por tanto, se
    suele implementar clip.stop() en el
    metodo stop() del applet.

    Ej:


                          //
                          SonidoApple
                          t.java

                          import
                          java.applet.
                          AudioClip;

                          public class
                          SonidoApple
                          t extends
                          java.applet.
                          Applet
                          {
                          AudioClip
                          sonido;

                          public void
                          init()

                                 {
                                 sonid
                                 o=
                                 getA
                                 udioC
                                 lip(ge
                                 tCode
                                 Base(
                                 ),
                                 "yaho
                                 o1.au
                                 ");
                                 }




                          public void
                          start()

                                 {
                                 sonid
                                 o.loo
                                 p();
                                 }
public void
                            stop()

                                      {
                                      sonid
                                      o.sto
                                      p();
                                      }


                            }

             No se cuenta
             exhaustivamente todo lo que
             se puede hacer con las
             clases de Java. VER
             DOCUMENTACION!!!!




Animaciones simples y multithreading

      Se puede hablar de dos tipos:

            Animacion de tipo ‘dibujos
             animados’: presentar una
             sucesion rapida de imagenes
             precargadas GIF o JPEG
             (p205 21days)
            Animacion dibujada en
             tiempo real; veamos
                  Un ejemplo que NO
                    funciona (no aparece
                    nada en pantalla);


                                              /
                                              /

                                              M
                                              a
                                              l
                                              R
                                              e
                                              l
                                              o
                                              j
                                              D
                                              i
g
i
t
a
l
A
p
p
l
e
t
.
j
a
v
a


i
m
p
o
r
t

j
a
v
a
.
a
w
t
.
G
r
a
p
h
i
c
s
;

i
m
p
o
r
t

j
a
v
a
.
a
w
t
.
F
o
n
t
;

i
m
p
o
r
t

j
a
v
a
.
u
t
i
l
.
D
a
t
e
;


p
u
b
l
i
c

c
l
a
s
s

M
a
l
R
e
l
o
j
D
i
g
i
t
a
l
A
p
p
l
e
t

e
x
t
e
n
d
s

j
a
v
a
.
a
p
p
l
e
t
.
A
p
p
l
e
t

{

F
o
n
t

f
u
e
n
t
e

=

n
e
w
F
o
n
t
(
"
T
i
m
e
s
R
o
m
a
n
"
,

F
o
n
t
.
B
O
L
D
,

2
4
)
;

D
a
t
e

f
e
c
h
a
;


p
u
b
l
i
c

v
o
i
d

s
t
a
r
t
(
)


    {

    w
    h
    i
    l
    e

    (
    t
    r
    u
    e
    )
}


p
u
b
l
i
c

v
o
i
d

p
a
i
n
t
(
G
r
a
p
h
i
c
s

g
)


    {

    g
    .
    s
    e
    t
F
o
n
t
(
f
u
e
n
t
e
)
;

g
.
d
r
a
w
S
t
r
i
n
g
(
f
e
c
h
a
.
t
o
S
t
r
i
n
g
(
)
,

1
0
,

5
0
)
;

}
}



   ¿Porqué no funciona?: paint
    nunca se ejecuta ya que el
    bucle while monopoliza la
    ejecucion.
   Cómo debe hacerse para
    que funcione: usando
    Threads

                  Ej:


                                  /
                                  /

                                  B
                                  i
                                  e
                                  n
                                  R
                                  e
                                  l
                                  o
                                  j
                                  D
                                  i
                                  g
                                  i
                                  t
                                  a
                                  l
                                  A
                                  p
                                  p
                                  l
                                  e
                                  t
                                  .
                                  j
                                  a
                                  v
                                  a


                                  i
                                  m
                                  p
                                  o
                                  r
                                  t

                                  j
                                  a
v
a
.
a
w
t
.
G
r
a
p
h
i
c
s
;

i
m
p
o
r
t

j
a
v
a
.
a
w
t
.
F
o
n
t
;

i
m
p
o
r
t

j
a
v
a
.
u
t
i
l
.
D
a
t
e
;


p
u
b
l
i
c

c
l
a
s
s

B
i
e
n
R
e
l
o
j
D
i
g
i
t
a
l
A
p
p
l
e
t

e
x
t
e
n
d
s

j
a
v
a
.
a
p
p
l
e
t
.
A
p
p
l
e
t

i
m
p
l
e
m
e
n
t
s

R
u
n
n
a
b
l
e

/
/
c
a
m
b
i
o

{

F
o
n
t

f
u
e
n
t
e

=
n
e
w

F
o
n
t
(
"
T
i
m
e
s
R
o
m
a
n
"
,

F
o
n
t
.
B
O
L
D
,

2
4
)
;

D
a
t
e

f
e
c
h
a
;

T
h
r
e
a
d
r
u
n
n
e
r
;

/
/
c
a
m
b
i
o


/
/
c
a
m
b
i
o

p
u
b
l
i
c

v
o
i
d

s
t
a
r
t
(
)


    {

    i
    f

    (
    r
    u
n
n
e
r

=
=

n
u
l
l
)
e
    l
    s
    e




    }


/
/
c
a
m
b
i
o
p
u
b
l
i
c

v
o
i
d

s
t
o
p
(
)


    {

    i
    f

    (
    r
    u
    n
    n
    e
    r

    !
    =

    n
    u
    l
    l
    )
e
l
s
e
}


/
/
c
a
m
b
i
o

p
u
b
l
i
c

v
o
i
d

r
u
n
(
)


    {

    w
    h
    i
    l
    e

    (
    t
    r
    u
    e
    )
}


p
u
b
l
i
c

v
o
i
d

p
a
i
n
t
(
G
r
a
p
h
i
c
s

g
)


    {
}


                                    }



   El problema del parpadeo:
    el programa anterior
    funciona, pero se aprecia un
    parpadeo molesto cada 3 o 4
    segundos
   Porqué aparece parpadeo:
         (las imagenes son
            demasiado grandes.
            Con pequeños
            cuadros es
            inapreciable el
            parpadeo)
         repaint() llama al
            metodo update()
         update() borra la
            pantalla por
            completo y la rellena
            con el color de
            fondo. Despues
            llama a paint()


                                        p
                                        u
b
l
i
c

v
o
i
d

u
p
d
a
t
e
(
G
r
a
p
h
i
c
s

g
)
   paint() escribe el
                     nuevo pantallazo
           Es la llamada a update() la
             que produce el parpadeo.
           Soluciones posibles
          1. Sobreescribir update() para
             que no borre la pantalla o
             que solo borre una cierta
             area
                 2. Clipping: re-dibujar
                     solo aquello que
                     cambia. Metodo
                     clipRect() de la clase
                     Graphics
                 3. Doble-buffering:
                     hacer los cambios en
                     una pantalla ‘virtual’
                     y volcar el resultado
                     a la pantalla ‘real’
                     (p212 21days). Es el
                     metodo mas
                     complicado...




Eventos y respuesta al usuario

      Los eventos son una parte del
       paquete AWT
      Un evento es aparece cuando hay
       interaccion con el usuario.
       Ejemplos de eventos;

          Se pulsa el boton del raton
          (Java no se distingue entre
          boton izquierdo y derecho,
          por un problema de
          compatibilidad entre
          plataformas. En MacIntosh
          los ratones son de 1 solo
          boton!!!)
        Se arrastra con el raton
        Se maximiza o minimiza
          una ventana
        Se pulsa una tecla
        etc...
   Eventos de raton

    Ej:


                         //
                         PosicionDeCl
                         ickApplet.jav
                         a

                         import
                         java.awt.Eve
                         nt;
                         import
                         java.awt.Gra
                         phics;

                         public class
                         PosicionDeCl
                         ickApplet
                         extends
                         java.applet.
                         Applet
                         {
                         int x,y;
                         //Point
                         ultimo =
                         null;
                         //Point
                         nuevo =
                         null;

                         public void
                         paint(Graphi
                         cs g)

                                {
                                if (
                                x*y
                                != 0)
{

g
.
d
r
a
w
S
t
r
i
n
g
(
"
H
a
s

h
e
c
h
o

C
L
I
C
K

e
n

x

=

"

+

x

+
"

,

y

=

"

+
y
                ,
                0
                ,
                1
                0
                )
                ;

                g
                .
                f
                i
                l
                l
                O
                v
                a
                l
                (
                x
                ,
                y
                ,
                1
                0
                ,
                1
                0
                )
                ;

                }


       }

public
boolean
mouseDown
(Event evt,
int x,int y)

       {
       this.x
       = x;
       this.y
       = y;
       Syste
       m.ou
       t.prin
       tln("
       Has
       hech
       o
       CLIC
K en
                                   x="
                                   +x
                                   +" ,
                                   y="
                                   + y);
                                   repai
                                   nt();
                                   retur
                                   n
                                   true;
                                   }


                           }

   Variacion en el ejemplo anterior:
    cambiar mouseDown() por
    mouseMove()
   Si se picha y arrastra no lo detecta:
    habria que usar mouseDrag()
   mouseEnter() y mouseExit()

    Ej:


                           public
                           boolean
                           mouseEnter(
                           Event evt,
                           int x, int y)

                                   {
                                   setBa
                                   ckgro
                                   und(j
                                   ava.a
                                   wt.Co
                                   lor.bl
                                   ue);
                                   repai
                                   nt();
                                   retur
                                   n
                                   true;
                                   }




                           public
                           boolean
                           mouseExit(E
                           vent evt, int
                           x, int y)
{
                                setBa
                                ckgro
                                und(j
                                ava,a
                                wt.Co
                                lor.re
                                d);
                                repai
                                nt();
                                retur
                                n
                                true;
                                }

   Eventos de teclado
        keyDown(Event evt, int
          key)
        keyUp(Event evt, int key)
        Modificadores: la clase
          Event tiene 3 metodos para
          controlar si se ha pulsado
          una tecla modificadora
          junto con el propio evento.
          Devuelven un booleano
        Event.shiftDown()
        Event.metaDown() (¿?) (un
          metakey parece ser algo
          popular en Unix,
          tipicamente corresponde a
          Alt, pero se desaconseja en
          beneficio de Control y
          Shift)
        Event.controlDown()



    Ej:

                         public
                         boolean
                         mouseDown
                         (Event evt,
                         int x, int y)

                                {
                                if
                                (evt.
                                shift
                                Down
                                ())
                                {//
                                tratar
                                el
                                event
o
                                    shift
                                    +clic
                                    k}
                                    else
                                    {//
                                    tratar
                                    el
                                    event
                                    o
                                    click
                                    simpl
                                    e}
                                    }

       El manejador de eventos (‘AWT
        Event Handler’)
       Hay muchos mas eventos,
        relacionados con el AWT




DÍA 4

Interfaz gráfica de usuario (AWT)

               AWT = Abstract Windowing
        Toolkit
               Permite crear entornos
        graficos de ventanas, a la manera
        de Windows
               Aspecto ‘similar’ en varias
        plataformas
               Se han utilizado elementos
        comunes a todas las plataformas:
        barras deslizantes, botones, menus
        desplegables, etc...



1. Controles basicos




       Button
       Chekboxes
       Choice
       List
       Menu
       Text Field
2. Otros controles




              Slider
              Scrollbar
              Text Area
              Canvas
              Label
              Panel
              Scroll Pane


       Ejemplo: appletviewer GUIWindow.html
       (tutorial SUN)
       Jerarquia de clases (ver grafico)




       Los menus dependen de otra rama de
       Object;




3. Concepto de Jerarquia de Componentes del programa




              Una interfaz grafica lleva asociada
               una jerarquia (arbol)
              P.ej.: las opciones de un menu son
               ‘hijas’ del menu, que a su vez es
‘hijo’ de la ventana en la que
        aparece, que a su vez es hijo del
        applet, etc...
       Al [re]dibujar la interfaz, se hace
        siguiendo la jerarquia, de arriba a
        abajo.
       Demasiado rapido para verse a
        simple vista ¡!!



4. Como usar Labels

// EjemploLabelApplet.java

import java.awt.*;

public class EjemploLabelApplet extends
java.applet.Applet
{
public void init()

        {
        Label etiqueta1 = new
        Label("Label1");
        Label etiqueta2 = new
        Label("Label2");
        Label etiqueta3 = new
        Label("Label3");

        add(etiqueta1);
        add(etiqueta2);
        add(etiqueta3);
        }

}




5. Como usar Buttons

//EjemploButtonApplet.java
import java.awt.*;

public class EjemploButtonApplet
extends java.applet.Applet
{
public void init()

        {
        Label etiqueta1 = new
        Label("Label1");
        Button boton1 = new
Button("Boton 1");
                                    Button boton2 = new
                                    Button("Boton 2");

                                    add(boton1);
                                    add(etiqueta1);
                                    add(boton2);
                                    }

                             }

                             Probar a cambiar las dimensiones de la
                             ventana de appletviewer: la disposicion de
                             los elementos es automatica.


                             6. Como usar Checkboxes


                             // EjemploAWTApplet.java

                             ...
                             add(new     Checkbox("Pamplona"));
                             add(new     Checkbox("Bilbao", null, true));
                             add(new     Checkbox("Madrid"));
                             add(new     Checkbox("Barcelona"));
                             ...

                             Metodos utiles:

                                    setState() //consulta el estado del
                                    checkbox
                                    setState() //altera el estado del
                                    checkbox
                                    etc...

RadioButton
                            Son un caso especial de Checkbox: solo 1
                             puede estar activo en su grupo, como los
                             botones de una radio, que saltan al
                             cambiar...
                            Hay que crear el CheckboxGroup


                     ...
                     CheckboxGroup cbg = new CheckboxGroup();
                     add(new Checkbox("Rojo", cbg, false));
                     add(new Checkbox("Azul", cbg, false));
                     add(new Checkbox("Verde", cbg, true));
                     add(new Checkbox("Negro", cbg, false));
                     ...

              7. Como usar Choice Menu
   Un menu Choice es desplegable.
              Permite seleccionar un item del menu


       ...
       Choice c = new Choice(); // crea el menu
       desplegable
       c.addItem("Naranja");
       c.addItem("Manzana");
       c.addItem("Pera");
       add(c); // añade el menu al panel
       ...
       Metodos utiles:

               getItem(int n) devuelve el string de la
               opcion n-esima
               getSelectedIndex() devuelve el indice de
               la opcion seleccionada


       //Este tipo de menus solo permiten seleccionar
       una opcion. Para multiples opciones, usar una
       lista




8. Como usar TextFields

              Permite al usuario introducir texto



       ...
       add(new Label("Nombre completo"));
       add(new TextField("-esciba aqui su nombre-"));
       add(new Label("Telefono"));
       add(new TextField(12));
       add(new Label("Password"));
       TextField t = new TextField(20);
       t.setEchoCharacter('*');
       add(t);
       ...
       Metodos utiles:

               setEditable(boolean) define si el testo es
               editable o no
               select(int, int) selecciona el texto entre
               las dos posiciones (origen = 0)
               etc...




9. Como usar TextArea
  Es un componente similar a TextField.
             TextField es mas conveniente para
              pequeños textos, idealmente de una sola
              linea. No tiene barras de deslizamiento
      TextArea en mas conveniente para textos largos,
       de mas de una linea.
      Por defecto, tiene barras de deslizamiento


       ...
       String texto = "Erase una vez un pais en el que
       vivian tres cerditos que erann" +
       "hermanos. Decidieron construirse una casa, y
       uno el primero den" +
       "ellos se la hizo de paja, el segundo de madera
       y el tercero de ladrillon" +
       "Un buen dia aparecio por alli el lobo y
       blablabla...";
       // el caracter ‘n’ es para forzr el retorno de
       linea
       add(new TextArea(texto, 10, 60));
       ...
       Metodos utiles:
       insertText(String, int) // inserta texto en la
       posicion indicada
       replaceText(String, int,int) // reepmplaza el
       texto entre las posiciones dadas
       etc...

10. Como usar Frames y Dialogs




              La clase Window de AWT permite crear
               ventanas independientes del navegador que
               contiene al applet. Frame es mas potente
               que Dialog
              El LayoutManager por defecto para Frame
               es BorderLayout
              Los Dialog son ventanas emergentes
               pensadas para mensajes no permanentes,
               como ‘ADVERTENCIA’, peticion de
               informacion especifica, etc..., que una vez
               presentados al usuario pueden desaparecer
               (p.ej.: ‘Se va a proceder a la instalacion de
               HyperQuake V. Confirmar?’)
              Se puede forzar a que sean no
               redimensionables o ‘modales’
              Un Dialog ‘modal’ es aquel que impide
               usar otra ventana hasta que no se lleve a
               cabo la accion de la presente ventana (p.ej.:
‘Es necesario que introduzca la clave de
          acceso para continuar la ejecucion’)
         A su vez existen dos clases de Dialog:
               Dialog (a secas!)
               FileDialog:
                      Presenta los ficheros del
                         directorio, abrir, cancelar,
                         etc..
                      Debido a las restricciones
                         de los applets, tiene muchas
                         mas funcionalidades si se
                         emplea en una aplicacion
                         Java


...
// Ejemplo de utilizacion de Frame
Frame ventanaFrame = new Frame("Mi ventana
FRAME");
ventanaFrame.setLayout(new FlowLayout());
//por defecto es BorderLayout
ventanaFrame.add(new Button("Opcion 1"));
ventanaFrame.add(new Button("Opcion 2"));
ventanaFrame.add(new Button("Opcion 3"));
ventanaFrame.resize(100,150); //define el
tamaño de la ventana
Point dim = location(); //devuelve la posicion de
este componente, como la esquina sup-izda
//medida respecto al componente padre
ventanaFrame.move(dim.x + 50, dim.y + 50);
ventanaFrame.show(); //cuando se crea la
ventana, es invisible. Para ocultarla, hide()
...

// Ejemplo de utilizacion de Dialog

...

// Ejemplo de utilizacion de FileDialog

...




11. Como usar List




         Son menus, pero no desplegables
         Es una lista de items en la que se puede
          elegir uno o varios
   Si el numero de items es mayor que la
               longitud de la lista, aparecen barras de
               deslizamiento




       ...
       List lista = new List(5, true); // crea una lista
       que tendra 5 lineas, y que permitira
       // seleccion multiple (valor 'true')
       lista.addItem("Afrodita");
       lista.addItem("Apolo");
       lista.addItem("Ares");
       lista.addItem("Hades");
       lista.addItem("Zeus"); // si se añade un sexto
       elemento, se creara automaticamente
       // una barra deslizante
       add(lista);
       ...
       Metodos utiles:

               getSelectedIndex() // devuelve el indice
               del item seleccionado, si no se permite
               seleccion mult.
               getSlectedIndexes() // devuelve un array
               de indices de los items seleccionados
               getSelectedItem() // devuelve el item
               seleccionado
               getSlectedItems() // idem varios items
               select(int) // fuerza a que esté
               seleccionado el item de la posicion dada
               etc...




12. Como usar Scrollbars




              Los componentes TextArea y TextField
               vienen con sus propias barras deslizantes.
               Pero tambien se pueden crear barras
               deslizantes independientes, tipicamante
               para manipular rangos de valores entre un
               maximo y un minimo.
              Para variar el valor asociado, hay tres
               formas:
                    Pinchar las flechas de los extremos.
                      Variacion unitaria.
                    Pinchar en la barra. Variacion en
                      saltos, 10 por defecto.
                    Pinchar y arrastar el ‘elevador’.
...Scrollbar barraDeslizante = new
Scrollbar(Scrollbar.HORIZONTAL);
add(barraDeslizante);
...
// constructor mas general:
// Scrollbar(int orientacion, int valorInicial, int
anchura, int valorMinimo, int valorMaximo);
...
Metodos utiles:

       getValue() // Devuelve el valor actual de
       la barra
       setValue() // Asigna un valor a la barra

13. Como usar Canvas




      Un componente Canvas es un objeto que
       permite dibujar en él.
      No hace nada por si mismo. Esta pensado
       para ser extendido por herencia.




Canvas can = new Canvas();
add(can);

14. Como usar Panels




      Es un tipo de ‘Container’
      Permite definir un area en la cual incluir
       otros componentes, incluidos otros Panels
       (‘paneles anidados’). De esta forma los
       componentes se agrupan, dando un aspecto
       ordenado al conjunto de la interfaz grafica.
       Para que esta ordenacion sea eficaz, hay
       que usar Panel en un componente que
       tenga bien definida la disposicion mediante
       un LayoutManager (se ve mas adelante).




...
Panel unPanel = new Panel();
unPanel.add(new Label("Arriba"));
unPanel.add(new Label("Abajo"));
        add(unPanel);
        ...




15. Como usar Scroll Panes




               Define un area para mostrar un solo
                componente con barras deslizantes.
               La utilizacion tipica es la de visualizar una
                imagen dentro del ScrollPane.
               Si la imagen es mayor que el area del
                ScrollPane, este crea automaticamente las
                barras deslizantes necesarias.
               Se puede forzar que no haya barras.




        NOTA: utilizar ScrollPane es un poco mas
        complicado que los componentes anteriores. En
        este ejemplo se ha tenido que definir una clase aparte, que
        hereda de Canvas, e implementar varios metodos para que la
        imagen aparezca con un tamaño adecuado
        ...
        Image foto = getImage(getCodeBase(),
        "orb.gif");
        ScrollableCanvas sCanvas = new
        ScrollableCanvas(foto);
        ScrollPane sPane = new ScrollPane();
        sPane.add(sCanvas);
        add(sCanvas);
        ...

        // Ahora viene la clase definida por nosotros (se
        pueden incluir varias clases en un mismo fichero
        siempre que solo haya una de ellas con el
        atributo ‘public’
        class ScrollableCanvas extends Canvas
        {
        Dimension preferredSize;
        Dimension minimumSize;
        Image imagen;
        // Constructor de la clase ScrollableCanvas
        (definida por nosotros ¡!)
        public ScrollableCanvas(Image imagen)

                {
                this.imagen = imagen;
                preferredSize = new Dimension(600,
320);
               minimumSize = new Dimension(10, 10);
               }

       public Dimension getMinimumSize()


               {
               return minimumSize;
               }

       public Dimension getPreferredSize()


               {
               return preferredSize;
               }

       public void paint(Graphics g)


               {
               g.drawImage(imagen, 0, 0,
               getBackground(), this);
               }

       }


16. Otros componentes




              MenuShortcut: asocia una combinacion de
               teclas para activar una opcion de menu
               (p.ej.:Control-S para grabar archivo)
              PopupMenu: menu flotante



       17. Como aprovechar un applet grafico desde una
       aplicacion




              Se puede lanzar desde una aplicacion un
               applet haciendo lo siguiente;




               // Heredar –con extends- de las clases
               Applet, AWT, etc...
public static void main(String args[])
              {
              Frame f = new Frame("Mi ventana para
              el applet"); // Crea una ventana para
              mostrar el applet, //a la manera de un
              navegador
              EjemploAWTApplet unApplet = new
              EjemploAWTApplet(); // El fichero
              EjemploAWTApplet es //tambien una
              clase y por lo tanto se puede instanciar
              ¡!
              unApplet.init(); // Lanza init(), igual que
              haria el navegador
              unApplet.start(); // idem con start()
              f.add("Center", unApplet);
              f.resize(300, 300); // Hace las veces de
              WIDTH y HEIGHT en el HTML!!
              f.show();

       //ATENCION: esta ‘adaptacion’ para ver applets
       como aplicaciones debe tener en cuenta si el
       applet lee //parametros del fichero HTML.
       Habria que pasar los parametros en la linea de
       comandos, a main(String //args[])
       }




18. LayoutManager




             La disposicion de componentes en un
              panel depende del Layout Manager
              establecido y del orden en que se van
              añadiendo los componentes con add().
             Cada Panel puede tener su propio LM,
              incluso si se anidan paneles.
             El AWT tiene los siguientes LM:
                   FlowLayout
                   GridLayout
                   GridBagLayout
                   BorderLayout
                   CardLayout
                   Layout hecho ‘a medida’ por el
                      usuario
                   Sin Layout: posicionamiento
                      absoluto de los componentes
                           No es recomendable usarlo,
                              porque las coordenadas de
                              pantalla dependen de la
                              plataforma, y esto va en
contra de la filosofia Java
                              de hacer programas
                              portables
                             En un sistema puede quedar
                              perfecto y en otro salir
                              como un churro...



      FlowLayout
           Es la clase mas sencilla. Simplemente se
             van añadiendo los componentes uno detras
             de otro, en linea. Si no caben en una linea,
             se pasa a la siguiente.
           Es el LM por defecto.




       setLayout(new FlowLayout());




        setLayout(new FlowLayout(FlowLayout.LEFT),
        10, 10); // alineacion izquierda, con distancias de
                10 pixeles en horizontal y vertical



      GridLayout
            Dividen la superficie del panel en filas y
               columnas.
      Al añadir componentes con add(), estos se
       distribuyen por las celdas



...
Panel panelGridLayout = new Panel();
panelGridLayout.setLayout(new GridLayout(3,3)); //
Layout de 3 filas y 3 columnas
pa.nelGridLayout.add(etiqueta1);
panelGridLayout.add(boton1);
panelGridLayout.add(boton2);
panelGridLayout.add(boton3);
add(panelGridLayout);
...
Otro constructor:
public GridLayout(int rows, int columns, int
horizontalGap, int verticalGap) // define tambien la
separacion entre celdas, en pixels

      GridBagLayout
Introducción a java
Introducción a java
Introducción a java
Introducción a java
Introducción a java
Introducción a java
Introducción a java
Introducción a java
Introducción a java
Introducción a java
Introducción a java
Introducción a java
Introducción a java
Introducción a java
Introducción a java
Introducción a java
Introducción a java
Introducción a java
Introducción a java
Introducción a java
Introducción a java
Introducción a java
Introducción a java
Introducción a java
Introducción a java
Introducción a java
Introducción a java
Introducción a java

Weitere ähnliche Inhalte

Was ist angesagt?

Curso Java Avanzado 0 Conceptos Basicos
Curso Java Avanzado   0 Conceptos BasicosCurso Java Avanzado   0 Conceptos Basicos
Curso Java Avanzado 0 Conceptos BasicosEmilio Aviles Avila
 
Test Programación Orientada a Objetos
Test Programación Orientada a  ObjetosTest Programación Orientada a  Objetos
Test Programación Orientada a ObjetosLuis Arturo Vargas
 
Trabajo java
Trabajo javaTrabajo java
Trabajo javaamec0612
 
CUESTIONARIO JAVA
CUESTIONARIO JAVACUESTIONARIO JAVA
CUESTIONARIO JAVAjesanchez5
 
Manual.curso.de.java.desde.cero
Manual.curso.de.java.desde.ceroManual.curso.de.java.desde.cero
Manual.curso.de.java.desde.ceroLalo Pérez
 
Java desde 0 pre
Java desde 0 preJava desde 0 pre
Java desde 0 prejtk1
 
Mi lenguaje de programación de preferencia
Mi lenguaje de programación de preferenciaMi lenguaje de programación de preferencia
Mi lenguaje de programación de preferenciaglfloresgilberto
 
Programación en Java (I)
Programación en Java (I) Programación en Java (I)
Programación en Java (I) Cristian
 
Clase2
Clase2Clase2
Clase2rilara
 
Presentacion Java
Presentacion JavaPresentacion Java
Presentacion Javamaeusogo
 
Mi Lenguaje de Programacion de Preferencia
Mi Lenguaje de Programacion de PreferenciaMi Lenguaje de Programacion de Preferencia
Mi Lenguaje de Programacion de PreferenciaNelson Rivera
 

Was ist angesagt? (17)

Curso Java Avanzado 0 Conceptos Basicos
Curso Java Avanzado   0 Conceptos BasicosCurso Java Avanzado   0 Conceptos Basicos
Curso Java Avanzado 0 Conceptos Basicos
 
C1 java introduccion
C1 java introduccionC1 java introduccion
C1 java introduccion
 
C1 java introduccion
C1 java introduccionC1 java introduccion
C1 java introduccion
 
Test Programación Orientada a Objetos
Test Programación Orientada a  ObjetosTest Programación Orientada a  Objetos
Test Programación Orientada a Objetos
 
Trabajo java
Trabajo javaTrabajo java
Trabajo java
 
CUESTIONARIO JAVA
CUESTIONARIO JAVACUESTIONARIO JAVA
CUESTIONARIO JAVA
 
Guia 1 java
Guia 1 javaGuia 1 java
Guia 1 java
 
Lenguaje java
Lenguaje javaLenguaje java
Lenguaje java
 
Manual.curso.de.java.desde.cero
Manual.curso.de.java.desde.ceroManual.curso.de.java.desde.cero
Manual.curso.de.java.desde.cero
 
Java desde 0 pre
Java desde 0 preJava desde 0 pre
Java desde 0 pre
 
Mi lenguaje de programación de preferencia
Mi lenguaje de programación de preferenciaMi lenguaje de programación de preferencia
Mi lenguaje de programación de preferencia
 
Java de erlin
Java de erlinJava de erlin
Java de erlin
 
Programación en Java (I)
Programación en Java (I) Programación en Java (I)
Programación en Java (I)
 
JAVA
JAVAJAVA
JAVA
 
Clase2
Clase2Clase2
Clase2
 
Presentacion Java
Presentacion JavaPresentacion Java
Presentacion Java
 
Mi Lenguaje de Programacion de Preferencia
Mi Lenguaje de Programacion de PreferenciaMi Lenguaje de Programacion de Preferencia
Mi Lenguaje de Programacion de Preferencia
 

Andere mochten auch

Federico Soich - Upgrading Magento Version
Federico Soich - Upgrading Magento VersionFederico Soich - Upgrading Magento Version
Federico Soich - Upgrading Magento VersionMeet Magento Italy
 
Transport methods in 3DTV--A Survey
Transport methods in 3DTV--A SurveyTransport methods in 3DTV--A Survey
Transport methods in 3DTV--A SurveyKevin Tong
 
Elaborar los componentes Urbanisticos - Dr. Oscar Acosta Abogado Experto en D...
Elaborar los componentes Urbanisticos - Dr. Oscar Acosta Abogado Experto en D...Elaborar los componentes Urbanisticos - Dr. Oscar Acosta Abogado Experto en D...
Elaborar los componentes Urbanisticos - Dr. Oscar Acosta Abogado Experto en D...Sociedad Colombiana de Ingenieros
 
Apache Stanbol Incubation Proposal
Apache Stanbol Incubation ProposalApache Stanbol Incubation Proposal
Apache Stanbol Incubation ProposalBertrand Delacretaz
 
Cluemapper Lightning Talk
Cluemapper Lightning TalkCluemapper Lightning Talk
Cluemapper Lightning TalkJazkarta, Inc.
 
Carte de masaj (spate,picioare)
Carte de masaj (spate,picioare)Carte de masaj (spate,picioare)
Carte de masaj (spate,picioare)Mariana Zugravu
 
Catalogo vegamarket-201415
Catalogo vegamarket-201415Catalogo vegamarket-201415
Catalogo vegamarket-201415mjpalandete
 
Capstone Public Projects
Capstone Public ProjectsCapstone Public Projects
Capstone Public Projectscjankowski
 
Presentación Tabla Periódica Profe: Laura Volta
Presentación Tabla Periódica Profe: Laura VoltaPresentación Tabla Periódica Profe: Laura Volta
Presentación Tabla Periódica Profe: Laura VoltaArianna Ríos Da cunhâ
 
How To Join Ignition Marketing, by Manny M. Viloria
How To Join Ignition Marketing, by Manny M. ViloriaHow To Join Ignition Marketing, by Manny M. Viloria
How To Join Ignition Marketing, by Manny M. ViloriaManny Viloria
 
Buscadores de internet
Buscadores de internetBuscadores de internet
Buscadores de internetSelenne Suarez
 
Talking Travel: The Magazine Vol 1
Talking Travel:  The Magazine Vol 1Talking Travel:  The Magazine Vol 1
Talking Travel: The Magazine Vol 1Steve Gillick
 
Elefriends - how we built our online community
Elefriends - how we built our online communityElefriends - how we built our online community
Elefriends - how we built our online communityCharityComms
 
La comprension lectora
La comprension lectoraLa comprension lectora
La comprension lectoraleonardito24
 
Cogeneracion en la industria azucarera
Cogeneracion en la industria azucareraCogeneracion en la industria azucarera
Cogeneracion en la industria azucareraJosé Reina
 

Andere mochten auch (20)

Federico Soich - Upgrading Magento Version
Federico Soich - Upgrading Magento VersionFederico Soich - Upgrading Magento Version
Federico Soich - Upgrading Magento Version
 
Transport methods in 3DTV--A Survey
Transport methods in 3DTV--A SurveyTransport methods in 3DTV--A Survey
Transport methods in 3DTV--A Survey
 
Prog lineal 25-ejerlibro
Prog lineal 25-ejerlibroProg lineal 25-ejerlibro
Prog lineal 25-ejerlibro
 
Elaborar los componentes Urbanisticos - Dr. Oscar Acosta Abogado Experto en D...
Elaborar los componentes Urbanisticos - Dr. Oscar Acosta Abogado Experto en D...Elaborar los componentes Urbanisticos - Dr. Oscar Acosta Abogado Experto en D...
Elaborar los componentes Urbanisticos - Dr. Oscar Acosta Abogado Experto en D...
 
Redes informaticas
Redes informaticasRedes informaticas
Redes informaticas
 
Booosting Nieuwsbrief 91 (Nov 2007)
Booosting Nieuwsbrief 91 (Nov 2007)Booosting Nieuwsbrief 91 (Nov 2007)
Booosting Nieuwsbrief 91 (Nov 2007)
 
Apache Stanbol Incubation Proposal
Apache Stanbol Incubation ProposalApache Stanbol Incubation Proposal
Apache Stanbol Incubation Proposal
 
Cluemapper Lightning Talk
Cluemapper Lightning TalkCluemapper Lightning Talk
Cluemapper Lightning Talk
 
Catalogo
CatalogoCatalogo
Catalogo
 
Carte de masaj (spate,picioare)
Carte de masaj (spate,picioare)Carte de masaj (spate,picioare)
Carte de masaj (spate,picioare)
 
15 de diciembre de 2014
15 de diciembre de 201415 de diciembre de 2014
15 de diciembre de 2014
 
Catalogo vegamarket-201415
Catalogo vegamarket-201415Catalogo vegamarket-201415
Catalogo vegamarket-201415
 
Capstone Public Projects
Capstone Public ProjectsCapstone Public Projects
Capstone Public Projects
 
Presentación Tabla Periódica Profe: Laura Volta
Presentación Tabla Periódica Profe: Laura VoltaPresentación Tabla Periódica Profe: Laura Volta
Presentación Tabla Periódica Profe: Laura Volta
 
How To Join Ignition Marketing, by Manny M. Viloria
How To Join Ignition Marketing, by Manny M. ViloriaHow To Join Ignition Marketing, by Manny M. Viloria
How To Join Ignition Marketing, by Manny M. Viloria
 
Buscadores de internet
Buscadores de internetBuscadores de internet
Buscadores de internet
 
Talking Travel: The Magazine Vol 1
Talking Travel:  The Magazine Vol 1Talking Travel:  The Magazine Vol 1
Talking Travel: The Magazine Vol 1
 
Elefriends - how we built our online community
Elefriends - how we built our online communityElefriends - how we built our online community
Elefriends - how we built our online community
 
La comprension lectora
La comprension lectoraLa comprension lectora
La comprension lectora
 
Cogeneracion en la industria azucarera
Cogeneracion en la industria azucareraCogeneracion en la industria azucarera
Cogeneracion en la industria azucarera
 

Ähnlich wie Introducción a java

Mi Lenguaje de Programación Preferido
Mi Lenguaje de Programación PreferidoMi Lenguaje de Programación Preferido
Mi Lenguaje de Programación Preferidostylee4799
 
Desarrollo.de.aplicaciones.con.java
Desarrollo.de.aplicaciones.con.javaDesarrollo.de.aplicaciones.con.java
Desarrollo.de.aplicaciones.con.javaSantiago Sora
 
POOI- Unidad 1.pdf
POOI- Unidad 1.pdfPOOI- Unidad 1.pdf
POOI- Unidad 1.pdfWillGuzman3
 
Curso de java_basico
Curso de java_basicoCurso de java_basico
Curso de java_basicoSaviotec
 
Java completo y agragado
Java completo y agragadoJava completo y agragado
Java completo y agragadoMaria
 
Java completo y agragado
Java completo y agragadoJava completo y agragado
Java completo y agragadoMaria
 
Introducción a la progrogramación orientada a objetos - Java
Introducción a la progrogramación orientada a objetos - JavaIntroducción a la progrogramación orientada a objetos - Java
Introducción a la progrogramación orientada a objetos - JavaFacultad de Ciencias y Sistemas
 
[ES] Introdución a la plataforma java
[ES] Introdución a la plataforma java [ES] Introdución a la plataforma java
[ES] Introdución a la plataforma java Eudris Cabrera
 
Universidad nacional de chimborazo
Universidad nacional de chimborazoUniversidad nacional de chimborazo
Universidad nacional de chimborazoJesica Pérez
 
Java desde 0
Java desde 0Java desde 0
Java desde 0Saviotec
 
PRIMERA PRESENTACION JAVA
PRIMERA PRESENTACION JAVAPRIMERA PRESENTACION JAVA
PRIMERA PRESENTACION JAVANoralma Yanez
 
Java desde 0 pre
Java desde 0 preJava desde 0 pre
Java desde 0 prejtk1
 
Caracteristicas de Java
Caracteristicas de JavaCaracteristicas de Java
Caracteristicas de JavaLuzRom
 
Aprendiendo Java SCF
Aprendiendo Java SCFAprendiendo Java SCF
Aprendiendo Java SCFmikaelsorai
 

Ähnlich wie Introducción a java (20)

Lenguaje Java
Lenguaje JavaLenguaje Java
Lenguaje Java
 
Mi Lenguaje de Programación Preferido
Mi Lenguaje de Programación PreferidoMi Lenguaje de Programación Preferido
Mi Lenguaje de Programación Preferido
 
Desarrollo.de.aplicaciones.con.java
Desarrollo.de.aplicaciones.con.javaDesarrollo.de.aplicaciones.con.java
Desarrollo.de.aplicaciones.con.java
 
Java basico
Java basicoJava basico
Java basico
 
POOI- Unidad 1.pdf
POOI- Unidad 1.pdfPOOI- Unidad 1.pdf
POOI- Unidad 1.pdf
 
Curso de java_basico
Curso de java_basicoCurso de java_basico
Curso de java_basico
 
Curso de java_basico
Curso de java_basicoCurso de java_basico
Curso de java_basico
 
Java completo y agragado
Java completo y agragadoJava completo y agragado
Java completo y agragado
 
Java completo y agragado
Java completo y agragadoJava completo y agragado
Java completo y agragado
 
Introducción a la progrogramación orientada a objetos - Java
Introducción a la progrogramación orientada a objetos - JavaIntroducción a la progrogramación orientada a objetos - Java
Introducción a la progrogramación orientada a objetos - Java
 
[ES] Introdución a la plataforma java
[ES] Introdución a la plataforma java [ES] Introdución a la plataforma java
[ES] Introdución a la plataforma java
 
Universidad nacional de chimborazo
Universidad nacional de chimborazoUniversidad nacional de chimborazo
Universidad nacional de chimborazo
 
Java desde 0
Java desde 0Java desde 0
Java desde 0
 
PRIMERA PRESENTACION JAVA
PRIMERA PRESENTACION JAVAPRIMERA PRESENTACION JAVA
PRIMERA PRESENTACION JAVA
 
Java
JavaJava
Java
 
Java desde 0 pre
Java desde 0 preJava desde 0 pre
Java desde 0 pre
 
Java
JavaJava
Java
 
Caracteristicas de Java
Caracteristicas de JavaCaracteristicas de Java
Caracteristicas de Java
 
Aprendiendo Java SCF
Aprendiendo Java SCFAprendiendo Java SCF
Aprendiendo Java SCF
 
Cuestionario
CuestionarioCuestionario
Cuestionario
 

Kürzlich hochgeladen

MEDIACIÓN INTERNACIONAL MF 1445 vl45.pdf
MEDIACIÓN INTERNACIONAL MF 1445 vl45.pdfMEDIACIÓN INTERNACIONAL MF 1445 vl45.pdf
MEDIACIÓN INTERNACIONAL MF 1445 vl45.pdfJosé Hecht
 
5° Proyecto 13 Cuadernillo para proyectos
5° Proyecto 13 Cuadernillo para proyectos5° Proyecto 13 Cuadernillo para proyectos
5° Proyecto 13 Cuadernillo para proyectosTrishGutirrez
 
Acuerdo 05_04_24 Lineamientos del CTE.pdf
Acuerdo 05_04_24 Lineamientos del CTE.pdfAcuerdo 05_04_24 Lineamientos del CTE.pdf
Acuerdo 05_04_24 Lineamientos del CTE.pdfmiriamguevara21
 
Amor o egoísmo, esa es la cuestión por definir.pdf
Amor o egoísmo, esa es la cuestión por definir.pdfAmor o egoísmo, esa es la cuestión por definir.pdf
Amor o egoísmo, esa es la cuestión por definir.pdfAlejandrino Halire Ccahuana
 
historieta materia de ecologías producto
historieta materia de ecologías productohistorieta materia de ecologías producto
historieta materia de ecologías productommartinezmarquez30
 
NUEVO PLAN Y PROGRAMAS DE ESTUDIO 2022.pdf
NUEVO PLAN Y PROGRAMAS DE ESTUDIO  2022.pdfNUEVO PLAN Y PROGRAMAS DE ESTUDIO  2022.pdf
NUEVO PLAN Y PROGRAMAS DE ESTUDIO 2022.pdfEDNAMONICARUIZNIETO
 
SISTEMA INMUNE FISIOLOGIA MEDICA UNSL 2024
SISTEMA INMUNE FISIOLOGIA MEDICA UNSL 2024SISTEMA INMUNE FISIOLOGIA MEDICA UNSL 2024
SISTEMA INMUNE FISIOLOGIA MEDICA UNSL 2024gharce
 
HISPANIDAD - La cultura común de la HISPANOAMERICA
HISPANIDAD - La cultura común de la HISPANOAMERICAHISPANIDAD - La cultura común de la HISPANOAMERICA
HISPANIDAD - La cultura común de la HISPANOAMERICAJesus Gonzalez Losada
 
describimos como son afectados las regiones naturales del peru por la ola de ...
describimos como son afectados las regiones naturales del peru por la ola de ...describimos como son afectados las regiones naturales del peru por la ola de ...
describimos como son afectados las regiones naturales del peru por la ola de ...DavidBautistaFlores1
 
4° UNIDAD 2 SALUD,ALIMENTACIÓN Y DÍA DE LA MADRE 933623393 PROF YESSENIA CN.docx
4° UNIDAD 2 SALUD,ALIMENTACIÓN Y DÍA DE LA MADRE 933623393 PROF YESSENIA CN.docx4° UNIDAD 2 SALUD,ALIMENTACIÓN Y DÍA DE LA MADRE 933623393 PROF YESSENIA CN.docx
4° UNIDAD 2 SALUD,ALIMENTACIÓN Y DÍA DE LA MADRE 933623393 PROF YESSENIA CN.docxMagalyDacostaPea
 
DIDÁCTICA DE LA EDUCACIÓN SUPERIOR- DR LENIN CARI MOGROVEJO
DIDÁCTICA DE LA EDUCACIÓN SUPERIOR- DR LENIN CARI MOGROVEJODIDÁCTICA DE LA EDUCACIÓN SUPERIOR- DR LENIN CARI MOGROVEJO
DIDÁCTICA DE LA EDUCACIÓN SUPERIOR- DR LENIN CARI MOGROVEJOLeninCariMogrovejo
 
Actividades eclipse solar 2024 Educacion
Actividades eclipse solar 2024 EducacionActividades eclipse solar 2024 Educacion
Actividades eclipse solar 2024 Educacionviviantorres91
 
4° SES MATE DESCOMP. ADIT. DE NUMEROS SOBRE CASOS DE DENGUE 9-4-24 (1).docx
4° SES MATE DESCOMP. ADIT. DE NUMEROS SOBRE CASOS DE DENGUE     9-4-24 (1).docx4° SES MATE DESCOMP. ADIT. DE NUMEROS SOBRE CASOS DE DENGUE     9-4-24 (1).docx
4° SES MATE DESCOMP. ADIT. DE NUMEROS SOBRE CASOS DE DENGUE 9-4-24 (1).docxMagalyDacostaPea
 
EJEMPLO MODELO DE PLAN DE REFUERZO ESCOLAR.docx
EJEMPLO MODELO DE PLAN DE REFUERZO ESCOLAR.docxEJEMPLO MODELO DE PLAN DE REFUERZO ESCOLAR.docx
EJEMPLO MODELO DE PLAN DE REFUERZO ESCOLAR.docxFabianValenciaJabo
 
Secuencia didáctica.DOÑA CLEMENTINA.2024.docx
Secuencia didáctica.DOÑA CLEMENTINA.2024.docxSecuencia didáctica.DOÑA CLEMENTINA.2024.docx
Secuencia didáctica.DOÑA CLEMENTINA.2024.docxNataliaGonzalez619348
 
Desarrollo de habilidades del siglo XXI - Práctica Educativa en una Unidad-Ca...
Desarrollo de habilidades del siglo XXI - Práctica Educativa en una Unidad-Ca...Desarrollo de habilidades del siglo XXI - Práctica Educativa en una Unidad-Ca...
Desarrollo de habilidades del siglo XXI - Práctica Educativa en una Unidad-Ca...Carol Andrea Eraso Guerrero
 
HISTORIETA: AVENTURAS VERDES (ECOLOGÍA).
HISTORIETA: AVENTURAS VERDES (ECOLOGÍA).HISTORIETA: AVENTURAS VERDES (ECOLOGÍA).
HISTORIETA: AVENTURAS VERDES (ECOLOGÍA).hebegris04
 
LOS AMBIENTALISTAS todo por un mundo mejor
LOS AMBIENTALISTAS todo por un mundo mejorLOS AMBIENTALISTAS todo por un mundo mejor
LOS AMBIENTALISTAS todo por un mundo mejormrcrmnrojasgarcia
 
PLAN DE TUTORIA- PARA NIVEL PRIMARIA CUARTO GRADO
PLAN DE TUTORIA- PARA NIVEL PRIMARIA CUARTO GRADOPLAN DE TUTORIA- PARA NIVEL PRIMARIA CUARTO GRADO
PLAN DE TUTORIA- PARA NIVEL PRIMARIA CUARTO GRADOMARIBEL DIAZ
 

Kürzlich hochgeladen (20)

MEDIACIÓN INTERNACIONAL MF 1445 vl45.pdf
MEDIACIÓN INTERNACIONAL MF 1445 vl45.pdfMEDIACIÓN INTERNACIONAL MF 1445 vl45.pdf
MEDIACIÓN INTERNACIONAL MF 1445 vl45.pdf
 
5° Proyecto 13 Cuadernillo para proyectos
5° Proyecto 13 Cuadernillo para proyectos5° Proyecto 13 Cuadernillo para proyectos
5° Proyecto 13 Cuadernillo para proyectos
 
Acuerdo 05_04_24 Lineamientos del CTE.pdf
Acuerdo 05_04_24 Lineamientos del CTE.pdfAcuerdo 05_04_24 Lineamientos del CTE.pdf
Acuerdo 05_04_24 Lineamientos del CTE.pdf
 
Amor o egoísmo, esa es la cuestión por definir.pdf
Amor o egoísmo, esa es la cuestión por definir.pdfAmor o egoísmo, esa es la cuestión por definir.pdf
Amor o egoísmo, esa es la cuestión por definir.pdf
 
historieta materia de ecologías producto
historieta materia de ecologías productohistorieta materia de ecologías producto
historieta materia de ecologías producto
 
NUEVO PLAN Y PROGRAMAS DE ESTUDIO 2022.pdf
NUEVO PLAN Y PROGRAMAS DE ESTUDIO  2022.pdfNUEVO PLAN Y PROGRAMAS DE ESTUDIO  2022.pdf
NUEVO PLAN Y PROGRAMAS DE ESTUDIO 2022.pdf
 
Aedes aegypti + Intro to Coquies EE.pptx
Aedes aegypti + Intro to Coquies EE.pptxAedes aegypti + Intro to Coquies EE.pptx
Aedes aegypti + Intro to Coquies EE.pptx
 
SISTEMA INMUNE FISIOLOGIA MEDICA UNSL 2024
SISTEMA INMUNE FISIOLOGIA MEDICA UNSL 2024SISTEMA INMUNE FISIOLOGIA MEDICA UNSL 2024
SISTEMA INMUNE FISIOLOGIA MEDICA UNSL 2024
 
HISPANIDAD - La cultura común de la HISPANOAMERICA
HISPANIDAD - La cultura común de la HISPANOAMERICAHISPANIDAD - La cultura común de la HISPANOAMERICA
HISPANIDAD - La cultura común de la HISPANOAMERICA
 
describimos como son afectados las regiones naturales del peru por la ola de ...
describimos como son afectados las regiones naturales del peru por la ola de ...describimos como son afectados las regiones naturales del peru por la ola de ...
describimos como son afectados las regiones naturales del peru por la ola de ...
 
4° UNIDAD 2 SALUD,ALIMENTACIÓN Y DÍA DE LA MADRE 933623393 PROF YESSENIA CN.docx
4° UNIDAD 2 SALUD,ALIMENTACIÓN Y DÍA DE LA MADRE 933623393 PROF YESSENIA CN.docx4° UNIDAD 2 SALUD,ALIMENTACIÓN Y DÍA DE LA MADRE 933623393 PROF YESSENIA CN.docx
4° UNIDAD 2 SALUD,ALIMENTACIÓN Y DÍA DE LA MADRE 933623393 PROF YESSENIA CN.docx
 
DIDÁCTICA DE LA EDUCACIÓN SUPERIOR- DR LENIN CARI MOGROVEJO
DIDÁCTICA DE LA EDUCACIÓN SUPERIOR- DR LENIN CARI MOGROVEJODIDÁCTICA DE LA EDUCACIÓN SUPERIOR- DR LENIN CARI MOGROVEJO
DIDÁCTICA DE LA EDUCACIÓN SUPERIOR- DR LENIN CARI MOGROVEJO
 
Actividades eclipse solar 2024 Educacion
Actividades eclipse solar 2024 EducacionActividades eclipse solar 2024 Educacion
Actividades eclipse solar 2024 Educacion
 
4° SES MATE DESCOMP. ADIT. DE NUMEROS SOBRE CASOS DE DENGUE 9-4-24 (1).docx
4° SES MATE DESCOMP. ADIT. DE NUMEROS SOBRE CASOS DE DENGUE     9-4-24 (1).docx4° SES MATE DESCOMP. ADIT. DE NUMEROS SOBRE CASOS DE DENGUE     9-4-24 (1).docx
4° SES MATE DESCOMP. ADIT. DE NUMEROS SOBRE CASOS DE DENGUE 9-4-24 (1).docx
 
EJEMPLO MODELO DE PLAN DE REFUERZO ESCOLAR.docx
EJEMPLO MODELO DE PLAN DE REFUERZO ESCOLAR.docxEJEMPLO MODELO DE PLAN DE REFUERZO ESCOLAR.docx
EJEMPLO MODELO DE PLAN DE REFUERZO ESCOLAR.docx
 
Secuencia didáctica.DOÑA CLEMENTINA.2024.docx
Secuencia didáctica.DOÑA CLEMENTINA.2024.docxSecuencia didáctica.DOÑA CLEMENTINA.2024.docx
Secuencia didáctica.DOÑA CLEMENTINA.2024.docx
 
Desarrollo de habilidades del siglo XXI - Práctica Educativa en una Unidad-Ca...
Desarrollo de habilidades del siglo XXI - Práctica Educativa en una Unidad-Ca...Desarrollo de habilidades del siglo XXI - Práctica Educativa en una Unidad-Ca...
Desarrollo de habilidades del siglo XXI - Práctica Educativa en una Unidad-Ca...
 
HISTORIETA: AVENTURAS VERDES (ECOLOGÍA).
HISTORIETA: AVENTURAS VERDES (ECOLOGÍA).HISTORIETA: AVENTURAS VERDES (ECOLOGÍA).
HISTORIETA: AVENTURAS VERDES (ECOLOGÍA).
 
LOS AMBIENTALISTAS todo por un mundo mejor
LOS AMBIENTALISTAS todo por un mundo mejorLOS AMBIENTALISTAS todo por un mundo mejor
LOS AMBIENTALISTAS todo por un mundo mejor
 
PLAN DE TUTORIA- PARA NIVEL PRIMARIA CUARTO GRADO
PLAN DE TUTORIA- PARA NIVEL PRIMARIA CUARTO GRADOPLAN DE TUTORIA- PARA NIVEL PRIMARIA CUARTO GRADO
PLAN DE TUTORIA- PARA NIVEL PRIMARIA CUARTO GRADO
 

Introducción a java

  • 1. Introducción a Java DÍA 1 Introducción a la programación orientada a objetos Introducción a Java Herramientas necesarias para desarrollar en Java DÍA 2 Gramática de Java Estructura de componentes AWT Aplicaciones vs. Applets Clases, métodos, atributos y objetos en Java DÍA 3 Creación de applets sencillos Animaciones simples y multithreading DÍA 4 Interfaz gráfica de usuario (AWT) Control de eventos (Event Handling) DÍA 5 Ejemplo de programas BIBLIOGRAFÍA RECOMENDADA DIRECCIONES EN iNTERNET GRUPOS DE NOTICIAS DIA 1 Introducción a la OOP (programación orientada a objetos) Junto con el paradigma de la orientación a procedimientos, son las dos filosofías generales de diseño más importantes. A diferencia de la orientación a procedimientos (OP), la orientación a objetos (OO) no concibe los procesos como una secuencia de procedimientos con su entrada y salida sino que se basa en un conjunto de objetos interactuando:
  • 2. Veamos a continuación los aspectos más destacados de esta filosofía general de diseño. 1. Clases y objetos Es importante distinguir entre los conceptos de clase y objeto: Clase: Es un modelo abstracto de un tipo de objeto. Define sus métodos y atributos. Objeto: Es una instancia de una clase, es decir, la implementación con valores de un modelo abstracto. Las clases no son entidades independientes sino que se agrupan jerárquicamente heredando características y atributos. Cada instancia o implementación real de
  • 3. una clase constituirá un nuevo objeto por lo que se pueden crear infinitos objetos distintos a partir de una sola clase. 2. Encapsulación Se define como el proceso de empaquetar juntos los métodos y los datos en un objeto. El objeto se encarga de ocultar sus datos al resto de objetos. La encapsulación permite una seguridad mayor en el acceso a los datos ya que este acceso depende directamente de cada objeto. Asimismo, permite abstraer los detalles internos de funcionamiento del objeto. 3. Intercambio de mensajes Los objetos se comunican entre sí mediante mensajes de invocación a métodos: 4. Herencia Es el concepto que define la adopción de todas las características de una clase por parte de otra clase que es definida como descendiente o heredera de la primera.
  • 4. La principal consecuencia de la herencia es la posibilidad de reutilizar clases ya que se pueden crear nuevas a partir de las ya creadas. La herencia puede ser de dos tipos, simple si sólo es posible heredar características de una sola clase, o múltiple si se pueden heredar características de varias clases. Introducción a Java 1. Historia de JAVA A finales de los años ochenta Sun Microsystems decide introducirse en el mercado de la electrónica de consumo y más concretamente en los equipos domésticos, incluyendo la televisión interactiva. Java, nace como un lenguaje ideado en sus comienzos para programar electrodomésticos! En sus primeras versiones, se llamó OAK. 2. Objetivos de diseño de los creadores de JAVA LENGUAJE FAMILIAR: Java no sería un lenguaje totalmente nuevo, se parecería a lo que conocemos como C++, así que no le sería tan complicado recalar en los programadores escépticos. LENGUAJE ORIENTADO A OBJETOS: Para que un lenguaje pueda considerarse orientado a objetos debe soportar como mínimo las características de: - encapsulación - herencia - polimorfismo - enlace dinámico. LENGUAJE ROBUSTO: Uno de los problemas más comunes en los lenguajes de programación es la posibilidad de escribir programas que pueden bloquear el sistema. Algunas veces este bloqueo puede ser inmediato, pero en otras ocasiones llega a aparecer inesperadamente porque, por ejemplo, la aplicación accede a zonas de memoria que no estaban siendo ocupadas por otros programas hasta ese momento. Un ejemplo claro de lenguaje no robusto es C. Al escribir código en C o C++ el programador debe hacerse cargo de la gestión de memoria de una forma explícita, solicitando la
  • 5. asignación de bloques a punteros y liberándolos cuando ya no son necesarios. En Java, los punteros, la aritmética de punteros y las funciones de asignación y liberación de memoria (malloc( ) y free( ) ) no existen. En lugar de los punteros se emplean referencias a objetos, los cuales son identificadores simbólicos. El gestor de memoria de Java lleva una contabilidad de las referencias a los objetos. Cuando ya no existe una referencia a un objeto, éste se convierte en candidato para la recogida de basura (garbage collection). LENGUAJE DE ALTO RENDIMIENTO ( MÚLTIPLES THREADS ): Una de las características del lenguaje es que soporta la concurrencia a través de threads. En ocasiones puede interesarnos dividir una aplicación en varios flujos de control independientes, cada uno de los cuales lleva a cabo sus funciones de manera concurrente. Cuando los distintos flujos de control comparten un mismo espacio lógico de direcciones, se denominan threads. LENGUAJE PORTABLE: El principal objetivo de los diseñadores de Java, y dado el gran crecimiento de las redes en los últimos años, fue el de desarrollar un lenguaje cuyas aplicaciones una vez compiladas pudiesen ser inmediatamente ejecutables en cualquier máquina y sobre cualquier sistema operativo. Por ejemplo, un programa desarrollado en Java en una estación de trabajo Sun que emplea el sistema operativo Solaris, debería poderse llevar a un PC que utilice sistema operativo Windows NT. LENGUAJE LO MÁS SIMPLE POSIBLE: Los diseñadores de Java trataron de mantener las facilidades básicas del lenguaje en un mínimo y proporcionar un gran número de extras con las librerías de clases. LENGUAJE SEGURO: Se pretendía construir un lenguaje de programación que fuese seguro, esto es, que no pudiera acceder a los recursos del sistema de manera incontrolada. Por este motivo se eliminó la posibilidad de manipular la memoria mediante el uso de punteros y la capacidad de transformación de números en direcciones de memoria ( tal y como se hace en C ) evitando así todo acceso ilegal a la memoria. Esto se asegura porque el compilador Java efectúa una verificación sistemática de conversiones. 3. Lo nuevo en JAVA La gran novedad que aporta Java dentro de las nuevas generaciones de navegadores es la capacidad de desplazar el control de la interactividad de los
  • 6. servidores hacia las máquinas de los usuarios que se utilizan para recorrer Internet. Por la misma estructura del lenguaje, los nuevos navegadores permiten la telecarga de "applets", pequeños fragmentos de programas compactos, precompilados, que pueden entonces interpretar de modo distinto los datos telecargados para producir por ejemplo animaciones, sonido y especialmente la verdadera interactividad. El lenguaje Java, visto desde un navegador de Internet, es pues un lenguaje que no es ni totalmente interpretado, ni totalmente compilado. El lenguaje se transforma en un código elemental parecido al ensamblador, llamado también p- code o byte-code. Posee la particularidad de ser compacto y por tanto puede ser compilado (traducido a lenguaje máquina) muy rápidamente, en el transcurso de la propia ejecución del programa. El p-code constituye una capa intermedia que facilita enormemente la portabilidad de un entorno o de una máquina a otra. La facilita hasta el punto de lograrla desaparecer. Aparece entonces la "máquina virtual". Una máquina virtual es una capa lógica que hace creer al programa Java que se ejecuta en un ordenador real (con registros, memoria y procesador), cuando en realidad sólo ve una reconstrucción lógica de un ordenador. Para ejecutar un programa Java compilado (que está en p-code), es preciso también que cuente con una implementación de la máquina virtual específica donde se desea ejecutar, la cual efectúa la transformación del p-code en un programa comprensible para la máquina. Herramientas necesarias para desarrollar en Java Para desarrollar programas en Java es suficiente con instalar el paquete JDK de Sun, que es de libre distribución. En el site de Sun podemos encontrar toda clase de información relacionada con Java: Ejemplos de programas escritos en Java, tutoriales, documentación, bugs conocidos y su solución, etc..
  • 7. La dirección base es : www.sun.com La ultima version disponible hasta la fecha es la JDK 1.2 Pasos para crear un programa en Java - Aplicaciones Escribir el programa fuente en cualquier editor y guardarlo con extensión .java Compilar el fichero fuente mediante: javac miPrograma.java .Esto genera el fichero .class Ejecutarlo (interpretar los byte-code) : java miPrograma - Applets Escribir el programa fuente en cualquier editor y guardarlo con extensión .java Compilar el fichero fuente mediante: javac miProgramaApplet.java Escribir la pagina web que contendra al applet y guardar el codigo con extension .html El codigo minimo será: <HTML> <BODY> <APPLET code="miProgramaApplet.class" width=400 height=400> </APPLET> </BODY> </HTML> 2 posibilidades para ejecutar el applet: - Lanzar un navegador y cargar la pagina html, o bien - Usar el programa provisto por Sun para ver applets: appletviewer miProgramaApplet.html Un ejemplo de herramientas básicas para comenzar a programar en lenguaje JAVA podría ser:
  • 8. 1.- Editor de código multilenguaje y con utilidades de edición y detección automática de errores. Un muy buen editor con estas propiedades y muchas más es ED for Windows v3.80 (www.getsoft.com) pero existen muchos otros y casi todos de libre distribución. 2.- JDK1.1.x, con el que podemos compilar y probar las aplicaciones y applets realizados. 3.- Documentación HTML de las clases JAVA. Además de lo arriba indicado, es aconsejable trabajar con paquetes de componentes que no pertenecen a los básicos de Java, como puede ser swing o symbeans. Estos componentes o beans proporcionan utilidades y facilidades añadidas al paquete básico de jdk. Otra posibilidad para desarrollar en JAVA es utilizar una herramienta Visual como Visual Cafe o V++. Estas herramientas suponen un entorno integrado de programación con módulos editor, de diseño visual, compilador, depurador, etc. Además proporcionan componentes propios especialmente útiles en diseño de interfaces gráficas. DÍA 2 Gramática de Java 1. Comentarios En Java hay tres tipos de comentarios: // comentarios para una sola línea /* comentarios de una o más líneas */ /** comentario de documentación, de una o más líneas */ Los dos primeros tipos de comentarios son los que todo programador conoce y se utilizan del mismo modo. Los comentarios de documentación, colocados inmediatamente antes de una declaración (de variable o función), indican que ese comentario ha de ser colocado en la documentación que se genera automáticamente cuando se utiliza la herramienta de Java, javadoc. Dichos comentarios sirven como descripción del elemento declarado permitiendo generar una documentación de nuestras clases escrita al mismo tiempo que se genera el código.
  • 9. 2. Identificadores Los identificadores nombran variables, funciones, clases y objetos; cualquier cosa que el programador necesite identificar o usar. En Java, un identificador comienza con una letra, un subrayado (_) o un símbolo de dólar ($). Los siguientes caracteres pueden ser letras o dígitos. Se distinguen las mayúsculas de las minúsculas y no hay longitud máxima. Ejemplos de identificadores válidos: Identificador nombre_usuario Nombre_Usuario _variable_de_sistema $transaccion y su uso sería, por ejemplo: int contador_principal; char _lista_de_ficheros; float cantidad_en_Ptas; 3. Palabras clave Las siguientes son las palabras clave que están definidas en Java y que no se pueden utilizar como identificadores: abstract continue for new switch boolean default goto null synchronizedbreak do if package thisbyte double implements private threadsafebyvalue else import protected throwcase extends instanceof public transient catch false int return true char final interface short try class finally long static void const float native super while 4. Palabras reservadas Además, el lenguaje se reserva unas cuantas palabras más, pero que hasta ahora no tienen un cometido específico. Son: cast future generic inneroperator outer rest var 5. Tags HTML Atributos del tag <APPLET>; (en negrita los imprescindibles)
  • 10. <APPLETCODEBASE=url raizCODE=fichero con la clase principal WIDTH=anchura HEIGTH=altura ALT=texto alternativo (para navegadores sin soporte Java pero que saben interpretar el tag APPLET) NAME=nombre del applet. Para hacer referencia al applet desde otro o desde JavaScript ALIGN=alineacion (hasta 9 valores: LEFT, RIGHT, TOP, MIDDLE, etc...) VSPACE=espacio en pixeles dejado en blanco como margen en la ventana del applet HSPACE=idem izqda-dcha > <PARAM NAME=unPArametro VALUE=valorDelParametro> <PARAM NAME=otroParametro VALUE=valor> <ídem etc> Texto alternativo </APPLET> Estructura de componentes AWT Aplicaciones vs. Applets Las características propias del lenguaje JAVA hacen que además de poder desarrollar aplicaciones que se ejecutan en el intérprete local, se puedan desarrollar módulos descargables a través de una página web y ejecutables en la JVM (Java Virtual Machine) del navegador. Estos módulos reciben el nombre de Applets.
  • 11. Veamos ejemplos sencillos de cada tipo de desarrollo para apreciar las diferencias de estructura gramatical. 1. Aplicaciones class EchoArgs { public static void main (String args[]) { for ( int i = 0;i<args.length ; i++ ) { System.out.println("Argumento " + i + ": " + args[i]); } } } 2. Applets // HolaMundoCruelApplet.java import java.awt.Graphics; import java.awt.Font; import java.awt.Color; public class HolaMundoCruelApplet extends java.applet.Applet { Font f = new Font("Arial", Font.BOLD, 36); public void paint(Graphics g) { g.setFont(f); g.setColor(Color.red); g.drawString("Hola mundo cruel",5,50); } } Clases, métodos, atributos y objetos en Java Veamos a continuación mediante un ejemplo cómo se implementan los conceptos más importantes vistos teóricamente en la introducción a la OOP en JAVA:
  • 12. // Moto.java package java.testJavadoc; /** *Este texto es un comentario sobre la clase Moto * @author CTI * @version 1 * @see clase UsarMoto */ class Moto { String fabricante; private String color; boolean motorEncendido; //private int numeroDeSerie; static int cilindrada = 250; //centimetros cubicos String nombreDelPropietario; // Metodo Constructor /** Metodo constructor */ Moto(String nombre) { this.nombreDelPropietario = nombre; } Moto( ) { ; } void encenderMotor( ) { if (motorEncendido == true) { System.out.println("El motor ya esta encendido !"); } else { motorEncendido = true; System.out.println("Brrummm. El motor se acaba de encender"); } } void describeMoto( ) { System.out.println("Descripcion de La moto;"); System.out.println("- marca: " + fabricante); System.out.println("- pintada de color: " + color); System.out.println("- cilindrada: " + cilindrada + " centimetros cubicos"); if (motorEncendido == true) { System.out.println("- el motor esta encendido");
  • 13. } else { System.out.println("- el motor esta apagado"); } } /* Añadir: - apagarMotor - cambiarColor (declarar color private) - escribir main en la propia clase y como clase independiente - metodo que devuelve un valor en vez de void -> devolver un objeto propio - variable estatica: al cambiarla, varian las de todas las instancias - metodo constructor con parametro Nombre del propietario Comentarios: - al no declarar que hereda de nadie, se asume que es de Object - comentarios !!!! - aritmetica de Strings, se suman - println es menos potente que en C - null y los valores por defecto - this - las referencias -> programa de ejemplo - la recogida de basura -> el programador no gestiona la memoria */ public static void main(String args[]) { Moto miMoto; miMoto = new Moto( ); miMoto.fabricante = "Kawasaki"; miMoto.color = "verde fosforito"; miMoto.describeMoto( ); System.out.println("-------------------"); System.out.println("Arrancando el motor..."); miMoto.encenderMotor( ); System.out.println("-------------------"); miMoto.describeMoto( ); System.out.println("-------------------"); miMoto.encenderMotor( ); // Otra moto Moto laMotoDeMiHermano = new Moto( ); laMotoDeMiHermano.fabricante = "Suzuki"; System.out.println("-------------------"); laMotoDeMiHermano.describeMoto( ); // Altera la variable estatica de la clase Moto Moto.cilindrada = 500; laMotoDeMiHermano.describeMoto( ); miMoto.describeMoto( ); // NOTA: el color saldra null
  • 14. } } 1. Tipos de Clases Hasta ahora sólo se ha utilizado la palabra clave public para calificar el nombre de las clases que hemos visto, pero hay tres modificadores más. Los tipos de clases que podemos definir son: abstract Una clase abstract tiene al menos un método abstracto. Una clase abstracta no se instancia, sino que se utiliza como clase base para la herencia. final Una clase final se declara como la clase que termina una cadena de herencia. No se puede heredar de una clase final. Por ejemplo, la clase Math es una clase final. public Las clases public son accesibles desde otras clases, bien sea directamente o por herencia. Son accesibles dentro del mismo paquete en el que se han declarado. Para acceder desde otros paquetes, primero tienen que ser importadas. synchronizable Este modificador especifica que todos los métodos definidos en la clase son sincronizados, es decir, que no se puede acceder al mismo tiempo a ellos desde distintos threads; el sistema se encarga de colocar los flags necesarios para evitarlo. Este mecanismo hace que desde threads diferentes se puedan modificar las mismas variables sin que haya problemas de que se sobreescriban. 2. Variables y métodos de instancia Una clase en Java puede contener variables y métodos. Las variables pueden ser tipos primitivos como int, char, etc. Los métodos son funciones. Por ejemplo, en el siguiente trozo de código podemos observarlo: public MiClase { int i; public MiClase() { i = 10;
  • 15. } public void Suma_a_i( int j ) { i = i + j; } } La clase MiClase contiene una variable (i) y dos métodos, MiClase que es el constructor de la clase y Suma_a_i( int j ). 3. Métodos y Constructores Los métodos son funciones que pueden ser llamadas dentro de la clase o por otras clases. El constructor es un tipo específico de método que siempre tiene el mismo nombre que la clase. Cuando se declara una clase en Java, se pueden declarar uno o más constructores opcionales que realizan la inicialización cuando se instancia (se crea una ocurrencia) un objeto de dicha clase. Utilizando el código de ejemplo anterior, cuando se crea una nueva instancia de MiClase, se crean (instancian) todos los métodos y variables, y se llama al constructor de la clase: MiClase mc; mc = new MiClase(); La palabra clave new se usa para crear una instancia de la clase. Antes de ser instanciada con new no consume memoria, simplemente es una declaración de tipo. Después de ser instanciado un nuevo objeto mc, el valor de i en el objeto mc será igual a 10. Se puede referenciar la variable (de instancia) i con el nombre del objeto: mc.i++; // incrementa la instancia de i de mc Al tener mc todas las variables y métodos de MiClase, se puede usar la primera sintaxis para llamar al método Suma_a_i() utilizando el nuevo nombre de clase mc: mc.Suma_a_i( 10 ); y ahora la variable mc.i vale 21. 4. Herencia
  • 16. La Herencia es el mecanismo por el que se crean nuevos objetos definidos en términos de objetos ya existentes. Por ejemplo, si se tiene la clase Ave, se puede crear la subclase Pato, que es una especialización de Ave. class Pato extends Ave { int numero_de_patas; } La palabra clave extends se usa para generar una subclase (especialización) de un objeto. Una Pato es una subclase de Ave. Cualquier cosa que contenga la definición de Ave será copiada a la clase Pato, además, en Pato se pueden definir sus propios métodos y variables de instancia. Se dice que Pato deriva o hereda de Ave. Además, se pueden sustituir los métodos proporcionados por la clase base. Utilizando nuestro anterior ejemplo de MiClase, aquí hay un ejemplo de una clase derivada sustituyendo a la función Suma_a_i(): import MiClase; public class MiNuevaClase extends MiClase { public void Suma_a_i( int j ) { i = i + ( j/2 ); } } Ahora cuando se crea una instancia de MiNuevaClase, el valor de i también se inicializa a 10, pero la llamada al método Suma_a_i() produce un resultado diferente: MiNuevaClase mnc; mnc = new MiNuevaClase(); mnc.Suma_a_i( 10 ); En Java no se puede hacer herencia múltiple. Por ejemplo, de la clase aparato con motor y de la clase animal no se puede derivar nada, sería como obtener el objeto toro mecánico a partir de una máquina motorizada (aparato con motor) y un toro (aminal). En realidad, lo que se pretende es copiar los métodos, es decir, pasar la funcionalidad del toro de verdad al toro mecánico, con lo cual no sería necesaria la herencia múltiple sino simplemente la compartición de funcionalidad que se encuentra implementada en Java a través de interfaces. 5. Control de acceso Cuando se crea una nueva clase en Java, se puede especificar el nivel de acceso que se quiere para las variables de instancia y los métodos definidos en la clase:
  • 17. public public void CualquieraPuedeAcceder(){} Cualquier clase desde cualquier lugar puede acceder a las variables y métodos de instacia públicos. protected protected void SoloSubClases(){} Sólo las subclases de la clase y nadie más puede acceder a las variables y métodos de instancia protegidos. private private String NumeroDelCarnetDeIdentidad; Las variables y métodos de instancia privados sólo pueden ser accedidos desde dentro de la clase. No son accesibles desde las subclases. friendly (sin declaración específica) void MetodoDeMiPaquete(){} Por defecto, si no se especifica el control de acceso, las variables y métodos de instancia se declaran friendly (amigas), lo que significa que son accesibles por todos los objetos dentro del mismo paquete, pero no por los externos al paquete. Es lo mismo que protected. Los métodos protegidos (protected) pueden ser vistos por las clases derivadas, como en C++, y también, en Java, por los paquetes (packages). Todas las clases de un paquete pueden ver los métodos protegidos de ese paquete. Para evitarlo, se deben declarar como private protected, lo que hace que ya funcione como en C++ en donde sólo se puede acceder a las variables y métodos protegidos de las clases derivadas. 6. Variables y métodos estadísticos En un momento determinado se puede querer crear una clase en la que el valor de una variable de instancia sea el mismo (y de hecho sea la misma variable) para todos los objetos instanciados a partir de esa clase. Es decir, que exista una única copia de la variable de instancia. Se usará para ello la palabra clave static. class Documento extends Pagina { static int version = 10;
  • 18. } El valor de la variable version será el mismo para cualquier objeto instanciado de la clase Documento. Siempre que un objeto instanciado de Documento cambie la variable version, ésta cambiará para todos los objetos. De la misma forma se puede declarar un método como estático, lo que evita que el método pueda acceder a las variables de instancia no estáticas: class Documento extends Pagina { static int version = 10; int numero_de_capitulos; static void annade_un_capitulo() { numero_de_capitulos++; // esto no funciona } static void modifica_version( int i) { version++; // esto si funciona } } La modificación de la variable numero_de_capitulos no funciona porque se está violando una de las reglas de acceso al intentar acceder desde un método estático a una variable no estática. Todas las clases que se derivan, cuando se declaran estáticas, comparten la misma página de variables; es decir, todos los objetos que se generen comparten la misma zona de memoria. Las funciones estáticas se usan para acceder solamente a variables estáticas. class UnaClase { int var; UnaClase() { var = 5; } UnaFuncion() { var += 5; } } En el código anterior, si se llama a la función UnaFuncion a través de un puntero a función, no se podría acceder a var, porque al utilizar un puntero a función no se pasa implícitamente el puntero al propio objeto (this). Sin embargo, sí se podría acceder a var si fuese estática, porque siempre estaría en la misma posición de memoria para todos los objetos que se creasen de UnaClase. 7. Interfaces Los métodos abstractos son útiles cuando se quiere que cada implementación de la clase parezca y funcione igual, pero necesita que se cree una nueva clase para utilizar los métodos abstractos.
  • 19. Los interfaces proporcionan un mecanismo para abstraer los métodos a un nivel superior. Un interface contiene una colección de métodos que se implementan en otro lugar. Los métodos de una clase son public, static y final. La principal diferencia entre interface y abstract es que un interface proporciona un mecanismo de encapsulación de los protocolos de los métodos sin forzar al usuario a utilizar la herencia. Por ejemplo: public interface VideoClip { // comienza la reproduccion del video void play(); // reproduce el clip en un bucle void bucle(); // detiene la reproduccion void stop(); } Las clases que quieran utilizar el interface VideoClip utilizarán la palabra implements y proporcionarán el código necesario para implementar los métodos que se han definido para el interface: class MiClase implements VideoClip { void play() { <código> } void bucle() { <código> } void stop() { <código> } Al utilizar implements para el interface es como si se hiciese una acción de copiar-y-pegar del código del interface, con lo cual no se hereda nada, solamente se pueden usar los métodos. La ventaja principal del uso de interfaces es que una clase interface puede ser implementada por cualquier número de clases, permitiendo a cada clase compartir el interfaz de programación sin tener que ser consciente de la implementación que hagan las otras clases que implementen el interface. class MiOtraClase implements VideoClip { void play() { <código nuevo> } void bucle() { <código nuevo> } void stop() { <código nuevo> }
  • 20. DÍA 3 Creación de applets sencillos Se incrustan en las paginas web Se cargan dinamicamente de la red Son programas, luego problema de seguridad: restricciones Un applet no puede cargar librerias o definir metodos nativos (programas en C por ejemplo) Como norma general no puede leer ni escribir ficheros en el ordenador en que se ejecuta. Si es necesario, se pueden escribir en el HD del ordenador host. No puede conectarse por red excepto al host del cual se cargo el applet No puede ejecutar ningun programa en el ordenador local No pueden lanzar programas en el equipo local Se supone que hay seguridad total, pero algun listillo podria desbaratarla... Sun desafió a los hackers! Un applet puede invocar metodos de otros applets que residan en la misma pagina Los applets cargados desde el sistema local (desde un directorio definido en CLASSPATH) no tienen, por defecto, ninguna de las restricciones de los applets cargados desde la red Se pueden leer algunas caracteristicas del sistema local; Permitidas Key Meaning "file.separator" File separator (for example, "/") "java.class.version" Java class version number "java.vendor" Java vendor-specific string "java.vendor.url" Java vendor URL "java.version" Java version number "line.separator" Line separator "os.arch" Operating system architecture "os.name" Operating system name "path.separator" Path separator (for example, ":") Ejemplo de uso: String s = System.getProperty("os.name"); No permitidas Key Meaning "java.class.path" Java classpath "java.home" Java installation directory "user.dir" User's current working directory
  • 21. "user.home" User home directory "user.name" User account name Cada N crea un objeto de la clase SecurityManager Se puede definir que restricciones se le aplican al applet. Si se violan, se produce una excepcion, que el programador puede tratar ("vaya, aqui no me dejan leer de disco") Algunos applets paran su ejecucion al salir de la pagina, pero otros continuan Subclase de java.applet.Applet: por tanto hereda los metodos y clases para manipular graficos, sonidos, etc... PUBLIC class miclase extends java.applet.Applet: solo la clase principal debe ser publica por fuerza A diferencia de las aplicaciones main(), applets son algo mas complicados. Fases en la vida de un applet; Public void init() {...}: Ocurre cuando se carga por 1º vez el applet o al recargar. Crea objetos, estado inicial, carga imagenes o fuentes. Solo ocurre 1 vez en la vida de un applet. o Public void start() {...}: Despues de init o de stop: por ejemplo si vamos a otra pagina y despues volvemos. Ocurre 1 o mas veces por tanto o Public void Stop() {...}: Contrapartida de start(). Cuando el usuario deja una pagina, los threads lanzados se siguen ejecutando(¡!??)  Destroy() {...} No es destruccion como en C++. Sirve para dejar bien atadas los cosas, p.ej. matar threads. Similar a finalize(), que es para objetos individuales. Destroy() solo en applets!  Public void paint(Graphics g)  Applet crea una ventana y pinta en ella: texto, lineas, imagenes
  • 22. Paint puede ocurrir cientos de veces: cada vez que se mueve el navegador  Toma argumento g pasado por N automaticamente  Incluir import java.awt.Graphics Ejemplo1: // CicloVidaApplet.java import java.awt.Graphics; import java.applet.Applet; public class CicloVidaApplet extends Applet { int contadorInit = 0; int contadorStart = 0; int contadorPaint = 0; int contadorStop = 0; int contadorDestroy = 0; public void init() {contadorInit++;} public void start() {contadorStart++;} public void paint(Graphics g) { contadorPaint++; g.drawString("Contador Init: " + contadorInit, 25,25); g.drawString("Contador Start: " + contadorStart, 25,50); g.drawString("Contador Paint: " + contadorPaint, 25,75); g.drawString("Contador Stop: " + contadorStop, 25,100); g.drawString("Contador Destroy: " + contadorDestroy, 25,125); } public void stop() {contadorStop++;} public void destroy() {contadorDestroy++;} } Ejemplo2: // HolaMundoCruelApplet.java import java.awt.Graphics; import java.awt.Font; import java.awt.Color; public class HolaMundoCruelApplet extends java.applet.Applet
  • 23. { Font f = new Font("Arial", Font.BOLD, 36); public void paint(Graphics g) { g.setFont(f); g.setColor(Color.red); g.drawString("Hola mundo cruel",5,50); } } Crear HolaMundoCruelApplet.HTML: <HTML> <BODY> <applet code="HolaMundoCruelApplet.class" width=400 height=400> </applet> </BODY> </HTML> En el applet Java:  No hay init(), start(), destroy() sobreescritos. Demasiado simple!  36 es el tamaño  posicion (x=5, y=50). El origen (0,0) es la esquina superior izquierda.  Probar a cortar el texto  No funciona!!! Hay que salir de N y volver a entrar  Desactivando caché ¿? Tampoco... En el HTML:  Ejemplo anterior es el mas sencillo posible.  El tag <APPLET>: extension del lenguaje HTML para applets  CODE es un atributo, el nombre del fichero class.  El class debe estar en el mismo directorio. Para directorio especifico, CODEBASE (mas tarde)  WIDTH, HEIGTH son obligatorios. Dimensiones de la caja de applet. Si pequña, se recorta.  Cerrar con </APPLET>  Opcionalmente linea siguiente a </APPLET> para N no Java ("Deberia aparecer aqui un applet si tu navegador es compatble con Java")  Mas sobre el tag <APPLET>. Otros atributos;
  • 24. <APPLET CODEBASE=url raiz CODE=fichero con la clase principal WIDTH=anchura HEIGTH=altura ALT=texto alternativo (para navegadores sin soporte Java pero que saben interpretar el tag APPLET NAME=nombre del applet. Para hacer referencia al applet desde otro o desde JavaScript ALIGN=alineacion (hasta 9 valores: LEFT, RIGHT, TOP, MIDDLE, etc...) VSPACE=espacio en pixeles dejado en blanco como margen por el N (ver p.141 21days) HSPACE=idem izqda-dcha > [* Parametros: explicado mas adelante] <PARAM NAME=unPArametro VALUE=valorDelParametro > <PARAM NAME=otroParametro VALUE=valor> <idem etc> Texto alternativo </APPLET>  * Parametros: en aplicaciones, linea de comandos iba a args[] en main(). Applets no tiene linea de comandos! Para pasarlos en applets se necesitan dos cosas;  un tag especial en el HTML  codigo en el applet .java para recoger los parametros Ej: <PARAM NAME=fuente VALUE="TimesRoman"> y String nombreDeLaFuente = getParameter("fuente"); Proteccion: se añade a continuacion; If(nombreDelaFuente == null) nombreDeLaFuente == "Courier";
  • 25. Los parametros son siempre Strings. Si necesario valor numerico, tendremos que convertir Ej: <PARAM NAME=tamañoLetras VALUE="36"> y int tamañoDeLetra; String tam = getParameter("tamaño"); If (tam == null) tamañoDeLetra = 20; } else tamañoDeLetra = Integer.parseInt(tam); / / O t r o H o l a M u n d o C r u e l A p p l e t . j a v a i m p o r
  • 30. ) { n o m b r e = g e t P a r a m e t e r ( " N o m b r e " ) ; i f ( n o m b r e = = n u l l )
  • 34. ) ; } } Si se sumara "Hola " + etc... en paint, seria menos eficiente. En init(), solo se ejecuta 1 vez!  Usar applets publicos:  O los cargamos localmente (dificultad: hay que bajar todas las clases, imagenes, sonidos, en misma jerarquia de directorios)  O llamamos a la clase principal con su URL en CODE  Las restricciones de seguridad: Son tan severas que los applets no pueden hacer nada demsiado serio sin autorizacion expresa (escribir, leer de disco). Base de datos?!?! Procesador de textos?!?! Imposible!!! Al menos manteniendo la seguridad al 100%. Graficos, texto y sonido  Graficos: coordenadas, lineas, puntos, circulos, ovalos, poligonos o imagenes GIF  Texto: fuentes, tamaños  Color: de fondo, de dibujo  Graficos  Lineas: g.drawline(10,10,50,50)  Rectangulos:  Cuadrados  Esquinas redondeadas  Con efecto 3D: borde en relieve Ej: g . d r a w R e c t
  • 37. . d r a w 3 D r e c t ( 2 0 , 2 0 , 6 0 , 6 0 , t r u e ) ;  Poligonos: Ej: i n t l i s t a C o o r d X [ ]
  • 46. D e n t r o = p o l i g o n o . c o n t a i n s ( x , y ) ;  Ovalos: g.drawOval(a,b,c,d)  Arcos: g.drawArc(a,b,c,d,e,f,g)  Copiando areas de la pantalla g.copyAerea(origen X,origenY,anchura, altura,destinoX,des tinoY) // Borrar un area. Se rellena con el color de fondo // Para borrar todo el applet; g.clearRect(0,0,size ().width,size().heigt
  • 47. h) // size() devuelve un objeto Dimension  Texto y fuentes  Clases Font y FontMetrics  public Font(String nombre, int estilo, int tamaño) Estilos; PLAIN, BOLD(negrita), ITALIC, BOLD+ITALIC Ej: Font f = new Font("Helvetica", Font.BOLD, 14); // Font f = new Font("Helvetica", Font.BOLD + Font.ITALIC, 14); g.setFont(f); g.drawString("Texto en Helvetica y negrita", 10, 10);  public FontMetrics(Font fuente) Permite centrar un texto. Da medidas de las letras, anchura, distancia a la base, etc...  Color  De 24 bits. 3 componentes, espacio RGB  0,0,0 es negro  255,0,0 es rojo  255,255,255 es blanco  etc...
  • 48. colores predefinidos como constantes: Color.white, Color.yellow, Color.lightGray,etc.. Ej: Color miCol or = new Color (130, 124,3 1); g.set Color (miC olor); // empi eza a dibuj ar con el nuev o color setBa ckgro und( Color .blue ); // camb ia el color de fondo del apple t setFo regro unf(C olor.b lack(; // camb ia de golpe el
  • 51. + = 3 0 ) { f o r ( i n t i = 5 ; i < ( s i z e ( ) . w i d t h - 2 5 ) ; i + = 3
  • 52. 0 ) { r o j o = ( i n t ) M a t h . f l o o r ( M a t h . r a n d o m ( ) * 2 5 6 ) ; v e r d e
  • 56. a c k ) ; g . d r a w R e c t ( i - 1 , j - 1 , 2 5 , 2 5 ) ; } } } }  Imagenes: clase Image, metodo drawImage() / / P i
  • 60.
  • 62. g )
  • 63.
  • 64.
  • 65.
  • 66. }  Sonido (p209 21days)  Java tiene soporte para reproducir el formato .AU de Sun.  Solo en applets  En aplicaciones, se puede recurrir a una clase no documentada, sun.audio  Las clases que comienzan por sun.XXX incluyen funciones que aun no se han estandarizado, pero que se prevé lo hagan en un futuro próximo. Pasará de sun.audio a java.audio. De cualquier forma, no es recomendable utilizarla, cuestion de asegurar compatibilidad.  AU esta comprimido, pero calidad mediocre  metodo play(URL)  Ej: p l a y ( g e t C o d e B a s
  • 69. i n i t ( ) { p l a y ( g e t C o d e B a s e ( ) , " y a h o o 1 . a u " ) ; / / p o n e r y a h
  • 70. o o 1 . a u e n d i r j a v a ! } }  Comienza en cuanto carga el sonido  Si no lo encuentra, no da error. No hará nada.  Para lanzar sonidos que se repitan constantemente; AudioClip Ej: import java.applet. AudioClip; AudioClip clip = getAudioClip (getCodeBas e(), "audio/ruido DeFondo.au" ); clip.play(); // suena solo una vez clip.loop(); // suena indefinidame nte clip.stop();
  • 71. // obliga a que se pare  AudioClip no para de sonar aunque cambiemos de pagina. Por tanto, se suele implementar clip.stop() en el metodo stop() del applet. Ej: // SonidoApple t.java import java.applet. AudioClip; public class SonidoApple t extends java.applet. Applet { AudioClip sonido; public void init() { sonid o= getA udioC lip(ge tCode Base( ), "yaho o1.au "); } public void start() { sonid o.loo p(); }
  • 72. public void stop() { sonid o.sto p(); } } No se cuenta exhaustivamente todo lo que se puede hacer con las clases de Java. VER DOCUMENTACION!!!! Animaciones simples y multithreading Se puede hablar de dos tipos:  Animacion de tipo ‘dibujos animados’: presentar una sucesion rapida de imagenes precargadas GIF o JPEG (p205 21days)  Animacion dibujada en tiempo real; veamos  Un ejemplo que NO funciona (no aparece nada en pantalla); / / M a l R e l o j D i
  • 77. o i d s t a r t ( ) { w h i l e ( t r u e )
  • 78.
  • 81. }  ¿Porqué no funciona?: paint nunca se ejecuta ya que el bucle while monopoliza la ejecucion.  Cómo debe hacerse para que funcione: usando Threads Ej: / / B i e n R e l o j D i g i t a l A p p l e t . j a v a i m p o r t j a
  • 88. e l s e } / / c a m b i o
  • 89. p u b l i c v o i d s t o p ( ) { i f ( r u n n e r ! = n u l l )
  • 92.
  • 95. } }  El problema del parpadeo: el programa anterior funciona, pero se aprecia un parpadeo molesto cada 3 o 4 segundos  Porqué aparece parpadeo:  (las imagenes son demasiado grandes. Con pequeños cuadros es inapreciable el parpadeo)  repaint() llama al metodo update()  update() borra la pantalla por completo y la rellena con el color de fondo. Despues llama a paint() p u
  • 97.
  • 98. paint() escribe el nuevo pantallazo  Es la llamada a update() la que produce el parpadeo.  Soluciones posibles 1. Sobreescribir update() para que no borre la pantalla o que solo borre una cierta area 2. Clipping: re-dibujar solo aquello que cambia. Metodo clipRect() de la clase Graphics 3. Doble-buffering: hacer los cambios en una pantalla ‘virtual’ y volcar el resultado a la pantalla ‘real’ (p212 21days). Es el metodo mas complicado... Eventos y respuesta al usuario  Los eventos son una parte del paquete AWT  Un evento es aparece cuando hay interaccion con el usuario. Ejemplos de eventos;
  • 99. Se pulsa el boton del raton (Java no se distingue entre boton izquierdo y derecho, por un problema de compatibilidad entre plataformas. En MacIntosh los ratones son de 1 solo boton!!!)  Se arrastra con el raton  Se maximiza o minimiza una ventana  Se pulsa una tecla  etc...  Eventos de raton Ej: // PosicionDeCl ickApplet.jav a import java.awt.Eve nt; import java.awt.Gra phics; public class PosicionDeCl ickApplet extends java.applet. Applet { int x,y; //Point ultimo = null; //Point nuevo = null; public void paint(Graphi cs g) { if ( x*y != 0)
  • 101. y , 0 , 1 0 ) ; g . f i l l O v a l ( x , y , 1 0 , 1 0 ) ; } } public boolean mouseDown (Event evt, int x,int y) { this.x = x; this.y = y; Syste m.ou t.prin tln(" Has hech o CLIC
  • 102. K en x=" +x +" , y=" + y); repai nt(); retur n true; } }  Variacion en el ejemplo anterior: cambiar mouseDown() por mouseMove()  Si se picha y arrastra no lo detecta: habria que usar mouseDrag()  mouseEnter() y mouseExit() Ej: public boolean mouseEnter( Event evt, int x, int y) { setBa ckgro und(j ava.a wt.Co lor.bl ue); repai nt(); retur n true; } public boolean mouseExit(E vent evt, int x, int y)
  • 103. { setBa ckgro und(j ava,a wt.Co lor.re d); repai nt(); retur n true; }  Eventos de teclado  keyDown(Event evt, int key)  keyUp(Event evt, int key)  Modificadores: la clase Event tiene 3 metodos para controlar si se ha pulsado una tecla modificadora junto con el propio evento. Devuelven un booleano  Event.shiftDown()  Event.metaDown() (¿?) (un metakey parece ser algo popular en Unix, tipicamente corresponde a Alt, pero se desaconseja en beneficio de Control y Shift)  Event.controlDown() Ej: public boolean mouseDown (Event evt, int x, int y) { if (evt. shift Down ()) {// tratar el event
  • 104. o shift +clic k} else {// tratar el event o click simpl e} }  El manejador de eventos (‘AWT Event Handler’)  Hay muchos mas eventos, relacionados con el AWT DÍA 4 Interfaz gráfica de usuario (AWT) AWT = Abstract Windowing Toolkit Permite crear entornos graficos de ventanas, a la manera de Windows Aspecto ‘similar’ en varias plataformas Se han utilizado elementos comunes a todas las plataformas: barras deslizantes, botones, menus desplegables, etc... 1. Controles basicos  Button  Chekboxes  Choice  List  Menu  Text Field
  • 105. 2. Otros controles  Slider  Scrollbar  Text Area  Canvas  Label  Panel  Scroll Pane Ejemplo: appletviewer GUIWindow.html (tutorial SUN) Jerarquia de clases (ver grafico) Los menus dependen de otra rama de Object; 3. Concepto de Jerarquia de Componentes del programa  Una interfaz grafica lleva asociada una jerarquia (arbol)  P.ej.: las opciones de un menu son ‘hijas’ del menu, que a su vez es
  • 106. ‘hijo’ de la ventana en la que aparece, que a su vez es hijo del applet, etc...  Al [re]dibujar la interfaz, se hace siguiendo la jerarquia, de arriba a abajo.  Demasiado rapido para verse a simple vista ¡!! 4. Como usar Labels // EjemploLabelApplet.java import java.awt.*; public class EjemploLabelApplet extends java.applet.Applet { public void init() { Label etiqueta1 = new Label("Label1"); Label etiqueta2 = new Label("Label2"); Label etiqueta3 = new Label("Label3"); add(etiqueta1); add(etiqueta2); add(etiqueta3); } } 5. Como usar Buttons //EjemploButtonApplet.java import java.awt.*; public class EjemploButtonApplet extends java.applet.Applet { public void init() { Label etiqueta1 = new Label("Label1"); Button boton1 = new
  • 107. Button("Boton 1"); Button boton2 = new Button("Boton 2"); add(boton1); add(etiqueta1); add(boton2); } } Probar a cambiar las dimensiones de la ventana de appletviewer: la disposicion de los elementos es automatica. 6. Como usar Checkboxes // EjemploAWTApplet.java ... add(new Checkbox("Pamplona")); add(new Checkbox("Bilbao", null, true)); add(new Checkbox("Madrid")); add(new Checkbox("Barcelona")); ... Metodos utiles: setState() //consulta el estado del checkbox setState() //altera el estado del checkbox etc... RadioButton  Son un caso especial de Checkbox: solo 1 puede estar activo en su grupo, como los botones de una radio, que saltan al cambiar...  Hay que crear el CheckboxGroup ... CheckboxGroup cbg = new CheckboxGroup(); add(new Checkbox("Rojo", cbg, false)); add(new Checkbox("Azul", cbg, false)); add(new Checkbox("Verde", cbg, true)); add(new Checkbox("Negro", cbg, false)); ... 7. Como usar Choice Menu
  • 108. Un menu Choice es desplegable.  Permite seleccionar un item del menu ... Choice c = new Choice(); // crea el menu desplegable c.addItem("Naranja"); c.addItem("Manzana"); c.addItem("Pera"); add(c); // añade el menu al panel ... Metodos utiles: getItem(int n) devuelve el string de la opcion n-esima getSelectedIndex() devuelve el indice de la opcion seleccionada //Este tipo de menus solo permiten seleccionar una opcion. Para multiples opciones, usar una lista 8. Como usar TextFields  Permite al usuario introducir texto ... add(new Label("Nombre completo")); add(new TextField("-esciba aqui su nombre-")); add(new Label("Telefono")); add(new TextField(12)); add(new Label("Password")); TextField t = new TextField(20); t.setEchoCharacter('*'); add(t); ... Metodos utiles: setEditable(boolean) define si el testo es editable o no select(int, int) selecciona el texto entre las dos posiciones (origen = 0) etc... 9. Como usar TextArea
  • 109.  Es un componente similar a TextField.  TextField es mas conveniente para pequeños textos, idealmente de una sola linea. No tiene barras de deslizamiento  TextArea en mas conveniente para textos largos, de mas de una linea.  Por defecto, tiene barras de deslizamiento ... String texto = "Erase una vez un pais en el que vivian tres cerditos que erann" + "hermanos. Decidieron construirse una casa, y uno el primero den" + "ellos se la hizo de paja, el segundo de madera y el tercero de ladrillon" + "Un buen dia aparecio por alli el lobo y blablabla..."; // el caracter ‘n’ es para forzr el retorno de linea add(new TextArea(texto, 10, 60)); ... Metodos utiles: insertText(String, int) // inserta texto en la posicion indicada replaceText(String, int,int) // reepmplaza el texto entre las posiciones dadas etc... 10. Como usar Frames y Dialogs  La clase Window de AWT permite crear ventanas independientes del navegador que contiene al applet. Frame es mas potente que Dialog  El LayoutManager por defecto para Frame es BorderLayout  Los Dialog son ventanas emergentes pensadas para mensajes no permanentes, como ‘ADVERTENCIA’, peticion de informacion especifica, etc..., que una vez presentados al usuario pueden desaparecer (p.ej.: ‘Se va a proceder a la instalacion de HyperQuake V. Confirmar?’)  Se puede forzar a que sean no redimensionables o ‘modales’  Un Dialog ‘modal’ es aquel que impide usar otra ventana hasta que no se lleve a cabo la accion de la presente ventana (p.ej.:
  • 110. ‘Es necesario que introduzca la clave de acceso para continuar la ejecucion’)  A su vez existen dos clases de Dialog:  Dialog (a secas!)  FileDialog:  Presenta los ficheros del directorio, abrir, cancelar, etc..  Debido a las restricciones de los applets, tiene muchas mas funcionalidades si se emplea en una aplicacion Java ... // Ejemplo de utilizacion de Frame Frame ventanaFrame = new Frame("Mi ventana FRAME"); ventanaFrame.setLayout(new FlowLayout()); //por defecto es BorderLayout ventanaFrame.add(new Button("Opcion 1")); ventanaFrame.add(new Button("Opcion 2")); ventanaFrame.add(new Button("Opcion 3")); ventanaFrame.resize(100,150); //define el tamaño de la ventana Point dim = location(); //devuelve la posicion de este componente, como la esquina sup-izda //medida respecto al componente padre ventanaFrame.move(dim.x + 50, dim.y + 50); ventanaFrame.show(); //cuando se crea la ventana, es invisible. Para ocultarla, hide() ... // Ejemplo de utilizacion de Dialog ... // Ejemplo de utilizacion de FileDialog ... 11. Como usar List  Son menus, pero no desplegables  Es una lista de items en la que se puede elegir uno o varios
  • 111. Si el numero de items es mayor que la longitud de la lista, aparecen barras de deslizamiento ... List lista = new List(5, true); // crea una lista que tendra 5 lineas, y que permitira // seleccion multiple (valor 'true') lista.addItem("Afrodita"); lista.addItem("Apolo"); lista.addItem("Ares"); lista.addItem("Hades"); lista.addItem("Zeus"); // si se añade un sexto elemento, se creara automaticamente // una barra deslizante add(lista); ... Metodos utiles: getSelectedIndex() // devuelve el indice del item seleccionado, si no se permite seleccion mult. getSlectedIndexes() // devuelve un array de indices de los items seleccionados getSelectedItem() // devuelve el item seleccionado getSlectedItems() // idem varios items select(int) // fuerza a que esté seleccionado el item de la posicion dada etc... 12. Como usar Scrollbars  Los componentes TextArea y TextField vienen con sus propias barras deslizantes. Pero tambien se pueden crear barras deslizantes independientes, tipicamante para manipular rangos de valores entre un maximo y un minimo.  Para variar el valor asociado, hay tres formas:  Pinchar las flechas de los extremos. Variacion unitaria.  Pinchar en la barra. Variacion en saltos, 10 por defecto.  Pinchar y arrastar el ‘elevador’.
  • 112. ...Scrollbar barraDeslizante = new Scrollbar(Scrollbar.HORIZONTAL); add(barraDeslizante); ... // constructor mas general: // Scrollbar(int orientacion, int valorInicial, int anchura, int valorMinimo, int valorMaximo); ... Metodos utiles: getValue() // Devuelve el valor actual de la barra setValue() // Asigna un valor a la barra 13. Como usar Canvas  Un componente Canvas es un objeto que permite dibujar en él.  No hace nada por si mismo. Esta pensado para ser extendido por herencia. Canvas can = new Canvas(); add(can); 14. Como usar Panels  Es un tipo de ‘Container’  Permite definir un area en la cual incluir otros componentes, incluidos otros Panels (‘paneles anidados’). De esta forma los componentes se agrupan, dando un aspecto ordenado al conjunto de la interfaz grafica. Para que esta ordenacion sea eficaz, hay que usar Panel en un componente que tenga bien definida la disposicion mediante un LayoutManager (se ve mas adelante). ... Panel unPanel = new Panel(); unPanel.add(new Label("Arriba"));
  • 113. unPanel.add(new Label("Abajo")); add(unPanel); ... 15. Como usar Scroll Panes  Define un area para mostrar un solo componente con barras deslizantes.  La utilizacion tipica es la de visualizar una imagen dentro del ScrollPane.  Si la imagen es mayor que el area del ScrollPane, este crea automaticamente las barras deslizantes necesarias.  Se puede forzar que no haya barras. NOTA: utilizar ScrollPane es un poco mas complicado que los componentes anteriores. En este ejemplo se ha tenido que definir una clase aparte, que hereda de Canvas, e implementar varios metodos para que la imagen aparezca con un tamaño adecuado ... Image foto = getImage(getCodeBase(), "orb.gif"); ScrollableCanvas sCanvas = new ScrollableCanvas(foto); ScrollPane sPane = new ScrollPane(); sPane.add(sCanvas); add(sCanvas); ... // Ahora viene la clase definida por nosotros (se pueden incluir varias clases en un mismo fichero siempre que solo haya una de ellas con el atributo ‘public’ class ScrollableCanvas extends Canvas { Dimension preferredSize; Dimension minimumSize; Image imagen; // Constructor de la clase ScrollableCanvas (definida por nosotros ¡!) public ScrollableCanvas(Image imagen) { this.imagen = imagen; preferredSize = new Dimension(600,
  • 114. 320); minimumSize = new Dimension(10, 10); } public Dimension getMinimumSize() { return minimumSize; } public Dimension getPreferredSize() { return preferredSize; } public void paint(Graphics g) { g.drawImage(imagen, 0, 0, getBackground(), this); } } 16. Otros componentes  MenuShortcut: asocia una combinacion de teclas para activar una opcion de menu (p.ej.:Control-S para grabar archivo)  PopupMenu: menu flotante 17. Como aprovechar un applet grafico desde una aplicacion  Se puede lanzar desde una aplicacion un applet haciendo lo siguiente; // Heredar –con extends- de las clases Applet, AWT, etc...
  • 115. public static void main(String args[]) { Frame f = new Frame("Mi ventana para el applet"); // Crea una ventana para mostrar el applet, //a la manera de un navegador EjemploAWTApplet unApplet = new EjemploAWTApplet(); // El fichero EjemploAWTApplet es //tambien una clase y por lo tanto se puede instanciar ¡! unApplet.init(); // Lanza init(), igual que haria el navegador unApplet.start(); // idem con start() f.add("Center", unApplet); f.resize(300, 300); // Hace las veces de WIDTH y HEIGHT en el HTML!! f.show(); //ATENCION: esta ‘adaptacion’ para ver applets como aplicaciones debe tener en cuenta si el applet lee //parametros del fichero HTML. Habria que pasar los parametros en la linea de comandos, a main(String //args[]) } 18. LayoutManager  La disposicion de componentes en un panel depende del Layout Manager establecido y del orden en que se van añadiendo los componentes con add().  Cada Panel puede tener su propio LM, incluso si se anidan paneles.  El AWT tiene los siguientes LM:  FlowLayout  GridLayout  GridBagLayout  BorderLayout  CardLayout  Layout hecho ‘a medida’ por el usuario  Sin Layout: posicionamiento absoluto de los componentes  No es recomendable usarlo, porque las coordenadas de pantalla dependen de la plataforma, y esto va en
  • 116. contra de la filosofia Java de hacer programas portables  En un sistema puede quedar perfecto y en otro salir como un churro...  FlowLayout  Es la clase mas sencilla. Simplemente se van añadiendo los componentes uno detras de otro, en linea. Si no caben en una linea, se pasa a la siguiente.  Es el LM por defecto. setLayout(new FlowLayout()); setLayout(new FlowLayout(FlowLayout.LEFT), 10, 10); // alineacion izquierda, con distancias de 10 pixeles en horizontal y vertical  GridLayout  Dividen la superficie del panel en filas y columnas.  Al añadir componentes con add(), estos se distribuyen por las celdas ... Panel panelGridLayout = new Panel(); panelGridLayout.setLayout(new GridLayout(3,3)); // Layout de 3 filas y 3 columnas pa.nelGridLayout.add(etiqueta1); panelGridLayout.add(boton1); panelGridLayout.add(boton2); panelGridLayout.add(boton3); add(panelGridLayout); ... Otro constructor: public GridLayout(int rows, int columns, int horizontalGap, int verticalGap) // define tambien la separacion entre celdas, en pixels  GridBagLayout