Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Monografia Lenguaje Java
Monografia Lenguaje Java
1234-
Introduccin.
Caractersticas.
Hot Java.
Java para aplicaciones corporativas: 4.1- Desarrollo rpido de aplicaciones.
4.2- Portabilidad para programador y programa.
4.3- Costos de desarrollo.
4.4- Mantenimiento y soporte.
4.5- Aprendizaje.
5- 5Lo necesario para trabajar con Java.
6- 6Como hacer un programa en Java.
7- 7La gramtica de Java: 7.1- Comentarios.
7.2- Identificadores.
8- 8Las aplicaciones y los Applets.
9- 9Clases, mtodos, atributos y objetos de Java:
9.19.1Tipos de clases.
9.29.2Variables y mtodos de
instancia.
9.39.3Mtodos y
constructores.
9.49.4Herencia.
9.59.5Control de acceso.
9.69.6Variables y mtodos
estadsticos.
9.7Interfaces.
1010- Creacin a Applets sencillos.
1111- Grfico, texto y sonido.
1212- Animaciones simples y multithreading.
1313- Los eventos y la respuesta al usuario.
1414- Concepto de jerarqua de componentes del programa
1515- Como se utiliza Labels.
1616- Como se utiliza Buttons.
1717- Como se utiliza Checkboxes.
1818- Como se utiliza Choise Menu.
1919- Como se utiliza Text Fields.
2020- Como se utiliza Text Area.
2121- Como se utiliza Frames y Dialogs.
2222- Como se utiliza Lists.
23- Como se utiliza Scrollbars
24- Como se utiliza Canvas.
25-25- Como se utiliza Panels.
26- Como se utiliza Scroll Panes.
27- Otros componentes.
28- Layout Manager.
29- Control de eventos (Event Handling).
30- Ejemplos de los temas vistos.
31- Paquetes de Java.
32- Algunas referencias.
1- INTRODUCCIN
La empresa SUN MICROSYSTEMS, lder en servidores para Internet, ha desarrollado el
Lenguaje Java, para resolver simultneamente todos los problemas que se le plantean a los
creadores de software por la proliferacin de arquitecturas incompatibles, entre las diferentes
mquinas y diversos sistemas operativos, y sistemas de ventanas que funcionaban sobre una
misma mquina, sumndose a esto la dificultad de crear aplicaciones distribuidas en una red
como Internet.
En la Argentina, muchas empresas estn usando o considerando el uso de Java, y en los
avisos clasificados, cada vez ms requieren personal con conocimiento de este lenguaje.
Este lenguaje nuevo ha causado sensacin, porque posee estricta orientacin a objetos, menor
tiempo de desarrollo, mayor portabilidad, ms seguridad, simplicidad en la distribucin de
software, orientacin a redes, programacin multitarea, etc. Ocupa un lugar importante en la
lista de lenguajes a tener en cuenta cundo se va a desarrollar aplicaciones, particularmente en
el caso de aplicaciones de negocios que implican conexin a red, arquitecturas multiusuarios,
cliente/servidor, o acceso desde internet.
Tiene muchas posibilidades como lenguaje de aplicaciones comerciales y desarrollos dirigidos a
la empresa. Posee innumerables ventajas, dos de ellas muy importantes son la independencia
de la plataforma y el diseo orientado a redes.
En las empresas que se fueron informatizando desde hace un tiempo, es comn encontrar una
mezcla de hardware y sistemas operativos. Por ejemplo servidores Unix con Oracle en el sector
administrativo, PCs con DOS, y Windows en las oficinas, y Macintosh en el departamento de
diseo.
Java tiene posibilidades de integracin de sistemas, porque permite que todos ellos corran las
mismas aplicaciones, lo que disminuye el costo de desarrollo, mantenimiento y entrenamiento
de los usuarios. Tambin ofrece la posibilidad de independizarse de los proveedores de
hardware y adaptarse a la evolucin continua sin realizar inversiones en reingenieria de
sistemas.
En la reintegracin de los sistemas, la interconexin de equipos y las aplicaciones en red, Java
cumple un rol fundamental. Es el lenguaje ideal para desarrollar aplicaciones en red. La
posibilidad de ejecutar aplicaciones cliente/servidor, en las cuales varios usuarios utilizan los
mismos recursos de software del servidor, desde mquinas baratas o net computers, disminuye
los costos de actualizacin del software, porque no hay que estar rastreando que versiones hay
en cada mquina y perdiendo tiempo en actualizar cada una. Al no quedar limitado dentro de
la red interna de la empresa y abrir el acceso a internet, se beneficia a los usuarios de la
empresa y a los clientes. Sin importar la ubicacin fsica ni el tiempo de maquina, los clientes
pueden realizar consultas y compras por la red, los distribuidores pueden actualizar sus
catlogos y listas de precios y un sin fin de otras posibilidades.
Adems posee diversas funciones orientadas a la seguridad y que se encuentran
incorporadas al lenguaje en forma nativa. Obviamente el uso de Java por si solo, no suprime
las debilidades que posee el sistema operativo subyacente, sea cual sea, pero permite estar
completamente seguros en cuanto a las aplicaciones propias de este lenguaje. Dentro de los
desarrollos de Sun orientados a las empresas, que conforman lo que se denomina la Java
Commerce API, se tienen en cuenta los mecanismos de seguridad, la encriptacin de datos, los
mtodos de pago a distancia, y el uso de tarjetas inteligentes que incorporan chips basados en
Java.
2- CARACTERSTICAS.
Las caractersticas principales que ofrece Java respecto a cualquier otro lenguaje de
programacin son las siguientes:
Es simple, ofrece la funcionalidad de un lenguaje potente, pero sin las
caractersticas menos usadas y ms confusas de estos. C++ es un lenguaje que carece de
falta de seguridad, pero C y C++ son lenguajes mas difundidos, por eso Java se diseo
para ser ms similar a C++ y facilitar un rpido y fcil aprendizaje. Java elimina muchas de
las caractersticas de otros lenguajes como C++, para reducir las especificaciones del
lenguaje y aadir caractersticas muy tiles como el garbage collector (reciclador de
memoria dinmica). No es necesario preocuparse de liberar memoria, el reciclador se
encarga de ello, y como es un thread de baja prioridad permite liberar bloques de memoria
muy grandes, lo que reduce la fragmentacin de la memoria. Java reduce en un 50% los
errores ms comunes de programacin con lenguaje como C y C++ al eliminar muchas de
las caractersticas de estos, por ejemplo, aritmtica de punteros, no existen referencias,
registros (struct), definicin de tipos (typedef), macros (# define), necesidad de liberar
memoria (free). Lo que hace es eliminar las palabras reservadas (struct typedef), ya que
las clases son algo parecido.
Es orientado a objetos, implementa la tecnologa bsica de C++ con algunas
mejoras y elimina algunas cosas para mantener la simplicidad del lenguaje, trabaja con sus
datos como objetos y con interfaces a esos datos. Soporta las 3 caractersticas propias del
paradigma de la orientacin objetos: encapsulacin, herencia y polimorfismo. Las plantillas
de objetos son llamadas como en C++, clases y sus copias, instancias. Como en C++,
necesitan ser construidas y destruidas en espacio de memoria. Java incorpora
funcionalidades inexistentes en C++, como por ejemplo la resolucin dinmica de mtodo.
Esta caracterstica proviene del lenguaje Objetive C, dueo del sistema operativo Next. En
C++ se suele trabajar con libreras dinmicas (DLLs) que obligan recompilar la aplicacin
cuando se retocan las funciones que se encuentran en su interior. Este inconveniente lo
resuelve Java mediante una interfaz especifica llamada RTTI (Rum Time Type Identification)
que define la interaccin entre objetos excluyendo variables de instancias o implementacin
de mtodos. Las clases en Java tienen una representacin en el RunTime que permite a los
programadores preguntar por el tipo de clase y enlazar dinmicamente la clase con el
resultado de la bsqueda. Para que un lenguaje pueda considerarse orientado a objetos
debe soportar como mnimo las caractersticas de encapsulacin, herencia, polimorfismo,
enlace
Es distribudo; Java se ha construdo con extensas capacidades de interconexin
TCP/IP. Existen libreras de rutina para acceder e interactuar con protocolos como http y ftp, lo
cual permite a los programadores acceder a la informacin a travs de la red con tanta
facilidad como a los ficheros locales. Java en si no es distribudo, sino que proporciona las
libreras y herramientas para que los programas puedan ser distribudos, es decir, que se
corran en varias mquinas interactuando.
Es robusto, realiza verificaciones, en busca de problemas, tanto en tiempo de
compilacin como en tiempo de ejecucin. La comprobacin de tipos en Java ayuda a detectar
errores en el ciclo de desarrollo, obliga a la declaracin explcita de mtodos, reduciendo las
posibilidades de error. Maneja la memoria para eliminar las preocupaciones por parte de
programador de la liberacin o corrupcin de memoria. Implementa los arrays autnticos, en
vez de listas enlazadas de punteros, con comprobacin de limites para evitar la posibilidad de
sobreescribir o corromper memoria, resultado de puntero, que sealan a zonas equivocadas.
Estas caractersticas reducen fuertemente el tiempo de desarrollo de aplicaciones en Java. Para
asegurar el funcionamiento de la aplicacin, realiza una verificacin de los byte codes, que son
el resultado de la compilacin de un programa Java. Es un cdigo de mquina virtual que es
interpretado por el interprete Java. No es el cdigo mquina directamente entendible por el
hardware, pero a pasado todas las fases del compilador, anlisis de instrucciones, orden de
operadores, etc., y ya tiene generada la pila de ejecucin de ordenes. Proporciona
comprobacin de punteros, comprobacin de limites de arrays, y verificacin de byte-codes.
Tiene arquitectura neutral. Para establecer Java como parte integral de la red, el
compilador Java compila su cdigo a un fichero objeto de formato independiente de la
arquitectura de la mquina en que se ejecutara. Cualquier mquina que tenga el sistema de
ejecucin (run-time) puede ejecutar ese cdigo objeto sin importar la mquina en que ha sido
generada. Existen sistemas run-time para Solaris 2.x, SunOs 4.1.x, Windows 95, Windows NT,
Linux, Irix, Aix, Mac, Apple, y hay grupos de desarrollos trabajando para otras plataformas. El
cdigo fuente Java se compila a un cdigo de bytes de alto nivel independiente de la mquina.
Este cdigo (byte-codes) esta diseado para ejecutarse en una mquina hipottica que es
implementada por un sistema run-time que si es dependiente de la mquina. Lo dependiente
del sistema es la Mquina Virtual Java (JVM) y las libreras fundamentales que nos permitiran
acceder directamente al hardware de la mquina. Una mquina virtual es una capa lgica que
hace creer al programa Java que se ejecuta en un ordenador real (con registros, memoria y
procesador), cuando en realidad solo se ve una reconstruccin lgica de un ordenador. Para
ejecutar un programa Java compilado (que esta en p-codes), se debe contar con una
implementacion de la mquina virtual especifica donde se desea ejecutar, la cual efecta la
transformacin del p-code en un programa comprensible para la mquina. Adems habr APIs
de Java que tambin entren en contacto directo con el hardware y sern dependientes de la
mquina. Ejemplo de este tipo de APIs:
Java 2D: grficos 2D y manipulacin de imgenes.
Java Media Framework: elementos crticos en el tiempo: audio, video...
Java Animation: animacin de objetos en 2D.
Java Telephony: integracin con telefona.
Java Share: interaccin entre aplicaciones multiusuario.
Java 3D: grficos 3D y su manipulacin.
aplicaciones multiplataforma, pero para ejecutarlas es necesario que exista el run time
correspondiente al sistema operativo utilizado.
Es multithreaded, permite muchas actividades simultneas en un programa. Los
threads (llamados procesos ligeros) son pequeos procesos o piezas independientes de un
gran proceso. Al estar construidos en el lenguaje, son ms fciles de usar y ms robustos que
sus homlogos en C o C++. El beneficio consiste en un mejor rendimiento interactivo y mejor
comportamiento en tiempo real. Aunque el comportamiento en tiempo real esta limitado a las
capacidades del sistema operativo subyacente (Unix, Windows, etc.), aun supera a los
entornos de flujo nico de programa (single-threaded) tanto en la facilidad de desarrollo como
en rendimiento. Cualquiera que haya utilizado la tecnologa de navegacin concurrente, sabe lo
frustrante que puede ser esperar por una gran imagen que se est trayendo. En Java las
imgenes se pueden ir trayendo en un thread independiente, permitiendo que el usuario pueda
acceder a la informacin en la pagina sin tener que esperar por el navegador.
Es dinmico, Java se beneficia todo lo posible de la tecnologa orientada a objetos;
no intenta conectar todos los mdulos que componen una aplicacin hasta el tiempo de
ejecucin. Las libreras nuevas o actualizadas no paralizarn las aplicaciones actuales (siempre
que mantengan el API anterior). Tambin simplifica el uso de protocolos nuevos o actualizados.
Si su sistema ejecuta alguna aplicacin Java sobre la red y encuentra una pieza de la
aplicacin que no sabe manejar, es capaz de traer automticamente cualquiera de esas piezas
que es sistema necesita para funcionar. Para evitar que los mdulos de byte-codes o los
objetos o nuevas clases, haya que estar trayndolos de la red cada vez que se necesiten
implementa las opciones de persistencia. Cul es la ventaja de todo esto?. Qu gano con
Java? :
1- 1No volver a escribir el cdigo si quiero ejecutar el programa en otra mquina. Un solo
cdigo funciona para todos los browsers compatibles con Java o donde se tenga una
mquina virtual de Java (Mac's, PC's, Sun's, etc.)
2- 2Java es un lenguaje de programacin orientado a objetos y tiene todos los beneficios
que ofrece esta metodologa de programacin.
3- 3Un browser compatible con Java deber ejecutar cualquier programa hecho en Java,
ahorra a los usuarios tener que estar insertando "plug-ins", y adems programas que a
veces quitan tiempo y espacio en disco.
4- 4Java es un lenguaje y puede hacer todas las cosas que puede hacer un lenguaje de
programacin: clculos matemticos, procesadores de palabras, bases de datos, aplicaciones
grficas, animaciones, sonidos, hojas de clculo, etc.
5- 5Si lo que interesa son las paginas web, ya no tienen que ser estticas, se les puede
poner toda clase de elementos multimedia y permiten un alto nivel de interactividad, sin tener
que gastar en paquetes carsimos de multimedia.
Algunas limitantes:
1- 1La velocidad.
2- 2Los programas hechos en Java no tienden a ser muy rpidos, se est trabajando en
mejorar esto. Como los programas de Java son interpretados nunca alcanzan la velocidad
de un verdadero ejecutable.
3- 3Java es un lenguaje de programacin, esa es otra limitante; aprenderlo no es cosa
fcil, especialmente para los no programadores.
4- 4Es nuevo, todava no se conocen bien todas sus capacidades. En general posee
muchas ventajas, y se pueden hacer cosas muy interesantes, posee mucha fuerza.
3- HOTJAVA
Es un navegador con soporte Java (Java-enabled), desarrollado en Java. Como cualquier
navegador de Web, HotJava puede decodificar HTML estndar y URLs estndares, aunque no
soporta completamente el estndar HTML 3.0. La ventaja sobre el resto de navegadores, sin
soporte Java, es que puede ejecutar programas Java sobre la red. La diferencia con Netscape,
es que tiene implementado completamente los sistemas de seguridad que propone Java, esto
significa que puede escribir y leer en el disco local, aunque esto hace disminuir la seguridad, ya
que se pueden grabar en nuestro disco programas que contengan cdigo malicioso e
introducirnos un virus, por ejemplo. No obstante, el utilizar esta caracterstica de HotJava es
decisin del usuario.
4- JAVA PARA APLICACIONES CORPORATIVAS
Surge la pregunta de si esta es una buena tecnologa para desarrollar aplicaciones
corporativas. Y la respuesta es afirmativa, en donde la red sea algo crtico, Java facilita
tremendamente la vida de la programacin corporativa.
Durante aos, las grandes empresas se han convencido de que la "red" corporativa es la que
mantiene vivo su negocio. Desde el gran servidor de sus oficinas centrales, hasta los
servidores de las delegaciones, las estaciones de trabajo de los programadores y las Pcs, la
informacin va fluyendo de unos a otros. Para muchas compaas, la Red es la Empresa.
Si esta red no se mantiene sana, los pedidos no llegan, el inventario no se actualiza, el
software no se desarrolla adecuadamente, los clientes no estn satisfechos y,
fundamentalmente, el dinero no entra. La necesidad de diagnosticar y reducir los problemas de
la red, hace que se estn implementando continuamente nuevas metodologas que subsanen
este grave problema.
4.1- Desarrollo rpido de aplicaciones
Hace aos, se deca que los programadores pronto desapareceran. Los generadores
automticos de programas, eliminaran a los generadores humanos y el mundo sera un lugar
mejor para vivir. Desafortunadamente, quienes decan esto no tuvieron en cuenta una
acelerada demanda de software de calidad para muy diferentes aplicaciones. Sin embargo, la
tecnologa de objetos pronto vino a intentar facilitar la tarea, adoptando el modelo de "generar
parte de un programa", as, generando la parte bsica de un programa (los objetos), se podra
conectar con otras partes para proporcionar diferentes utilidades al usuario.
El lenguaje C++ es una buena herramienta, pero no cumple totalmente la premisa. Visual
Basic y NextStep, se acercan cada vez ms al poder de los objetos. Java facilita la creacin de
entornos de desarrollo-aplicaciones de modo similar, pero adems es flexible, poderoso y
efectivo. Los programadores ahora disponen de herramientas de programacin de calidad, que
apuntan hacia esa meta, como son el Java WorkShop de SunSoft, el entorno Java de Borland,
el Caf de Symantec, y pronto, herramientas ms sofisticadas como Netcode o FutureTense.
Esto proporciona una gran progresin a los entornos de desarrollo Java.
Aplicaciones efectivas y eficientes
Las aplicaciones que se crean en grandes empresas deben ser ms efectivas que eficientes; es
decir, conseguir que el programa funcione y el trabajo salga adelante es ms importante que el
que lo haga eficientemente. Esto es una realidad de la programacin corporativa. Al ser un
lenguaje ms simple que cualquiera de los que ahora estn en el cajn de los programadores,
Java permite a stos concentrarse en la mecnica de la aplicacin, en vez de pasarse horas y
horas incorporando APIs para el control de las ventanas, controlando minuciosamente la
memoria, sincronizando los ficheros de cabecera y corrigiendo los agnicos mensajes del linker.
Java tiene su propio toolkit para interfaces, maneja por s mismo la memoria que utilice la
aplicacin, no permite ficheros de cabecera separados (en aplicaciones puramente Java) y
solamente usa enlace dinmico.
Muchas de las implementaciones de Java actuales son puros intrpretes. Los byte-codes son
interpretados por el sistema run-time de Java, la Mquina Virtual Java (JVM), sobre el
ordenador del usuario. Aunque ya hay ciertos proveedores que ofrecen compiladores nativos
Just-In-Time (JIT). Si la Mquina Virtual Java dispone de un compilador instalado, las secciones
(clases) del byte-code de la aplicacin se compilarn hacia la arquitectura nativa del ordenador
del usuario.
Los programas Java en ese momento rivalizarn con el rendimiento de programas en C++. Los
compiladores JIT no se utilizan en la forma tradicional de un compilador; los programadores no
compilan y distribuyen binarios Java a los usuarios. La compilacin JIT tiene lugar a partir del
byte-code Java, en el sistema del usuario, como una parte (opcional) del entorno run-time
local de Java.
Muchas veces, los programadores corporativos, ansiosos por exprimir al mximo la eficiencia
de su aplicacin, empiezan a hacerlo demasiado pronto en el ciclo de vida de la aplicacin.
Java permite algunas tcnicas innovadoras de optimizacin. Por ejemplo, Java es
inherentemente multithreaded, a la vez que ofrece posibilidades de multithread como la clase
Thread y mecanismos muy sencillos de usar de sincronizacin; Java en s utiliza threads. Los
desarrolladores de compiladores inteligentes pueden utilizar esta caracterstica de Java para
lanzar un thread que compruebe la forma en que se est utilizando la aplicacin. Ms
especficamente, este thread podra detectar qu mtodos de una clase se estn usando con
ms frecuencia e invocar a sucesivos niveles de optimizacin en tiempo de ejecucin de la
aplicacin. Cuanto ms tiempo est corriendo la aplicacin o el applet, los mtodos estarn
cada vez ms optimizados.
Si un compilador JIT est embebido en el entorno run-time de Java, el programador no se
preocupa de hacer que la aplicacin se ejecute ptimamente.
4.2- Portabilidad para programador y programa
En una empresa de relativo tamao hay cantidades diferentes de ordenadores. Probablemente
nos encontremos con estaciones de trabajo Sun para el desarrollo de software, hordas de PCs
para cada empleado, algn Mac en el departamento de documentacin, una estacin de
trabajo HP en administracin y una estacin SGI en la sala de demos. Desarrollar aplicaciones
corporativas para un grupo tan diferente de plataformas en excesivamente complejo y caro.
Hasta ahora era complicado convencer a los programadores de cada arquitectura que utilicen
un API comn para reducir el coste de las aplicaciones.
Con un entorno run-time de Java portado a cada una de las arquitecturas de las plataformas
presentes en la empresa y una buena librera de clases ("packages" en Java), los
programadores pueden entenderse y encontrar muy interesante trabajar con Java. Esta
posibilidad har tender a los programadores hacia Java, justo donde otros intentos anteriores
con entornos universales (como Galaxy o XVT) han fracasado. Estos APIs eran simplemente
inadecuados, no orientados a redes y, verdaderamente, pesados.
Una vez que los programas estn escritos en Java, otro lado interesante del asunto es que los
programadores tambin son portables. El grupo de programadores de la empresa puede ahora
enfrentarse a un desarrollo para cualquiera de las plataformas. La parte del cliente y del
servidor de una aplicacin estarn ahora escritas en el mismo lenguaje. Ya no ser necesario
tener un grupo que desarrolle en Solaris en del departamento de I+D, programadores
trabajando sobre Visual Basic en el departamento de documentacin y programadores sobre
GNU en proyectos especiales; ahora todos ellos podrn estar juntos y formar el grupo de
software de la empresa.
4.3- Costos de desarrollo
En contraste con el alto coste de los desarrollos realizados sobre estaciones de trabajo, el costo
de creacin de una aplicacin Java es similar al de desarrollar sobre un PC.
Desarrollar utilizando un software caro para una estacin de trabajo (ahora barata) es un
problema en muchas empresas. La eficiencia del hardware y el poco costo de mantenimiento
de una estacin de trabajo Sun, por ejemplo, resulta muy atractivo para las empresas; pero el
costo adicional del entorno de desarrollo con C++ es prohibitivo para la gran mayora de ellas.
La llegada de Java e Intranet reducen considerablemente estos costos. Las herramientas Java
ya no estn en el entorno de precios de millones de pesos, sino a los niveles confortables de
precio de las herramientas de PCs. Y con el crecimiento cada da mayor de la comunidad de
desarrolladores de software freeware y shareware que incluso proporcionan el cdigo fuente,
Applets:
Escribir el programa fuente en cualquier editor y guardarlo con extensin.java
Compilar el fichero fuente mediante: javac.miProgramaApplet.java
Escribir la pagina web que contendr al applet y guardar el cdigo con extensin
el cdigo mnimo ser:
<HTML>
<BODY>
<APPLET code="miProgramaApplet.class" width=400
height=400>
</APPLET>
</BODY>
</HTML>
2- 2JDK1.1.x, con el que podemos compilar y probar las aplicaciones y applets realizados.
3- 3Documentacin HTML de las clases Java.
Es aconsejable trabajar con paquetes de componentes que no pertenecen a los bsicos de
Java, como puede ser swing o symbeans. Estos componentes o beans proporcionan utilidades
y facilidades aadidas a paquete bsico de jdk.
Otra posibilidad para desarrollar en Java es utilizar una herramienta Visual como Visual Caf o
V++. Estas herramientas suponen un entorno integrado de programacin con mdulos editor,
de diseo visual, compilador, depurador, etc. Proporcionan componentes especialmente tiles
en diseo de interfaces grficas.
7- 7-
LA GRAMATICA DE JAVA.
Palabra clave: las siguientes son palabras claves que estn 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
Palabras reservadas: el lenguaje se reserva unas cuantas palabras mas, pero que hasta
ahora no tienen un cometido especifico. Son:
cast future generic inneroperator outer rest var
Tags HTML
Atributos del tag <APPLET>
<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>
8- 8-
Las caractersticas propias del lenguaje java hacen que adems de poder desarrollar
aplicaciones que se ejecutan en el intrprete local, se puedan desarrollar mdulos
descargables a travs de una pagina web y ejecutables en la JVM (Java Virtual Machine) del
navegador. Estos mdulos reciben el nombre de APPLETS. 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
// BuenDiaSeoraApplet.java
import java.awt.Graphics;
import java.awt.Font;
import java.awt.Color;
public class BuenDiaSeoraApplet 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("Buen dia seora",5,50);
}
}
Ejemplo extrado de: htpp//:arcoinf.uc3m.esp/yy_pstr
9- 9-
OOP en
}
else
{
System.out.println("- el perro esta durmiendo");
}
}
/* Aadir:
- dormirPerro
- cortarPelo (declarar color private)
- escribir main en la propia clase y como clase independiente
- mtodo que devuelve un valor en vez de void -> devolver un objeto propio
- variable esttica: al cambiarla, varan las de todas las instancias
- mtodo constructor con parmetro Nombre del propietario
Comentarios:
- al no declarar que hereda de nadie, se asume que es de Object
- comentarios
- aritmtica 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[])
{
Perro miPerro;
miPerro = new Perro( );
miPerro.raza = "AFGANO";
miPerro.color = "blanco marfil";
miPerro.describePerro( );
System.out.println("-------------------");
System.out.println("Hacer ladrar al perro...");
miPerro.ladrarPerro( );
System.out.println("-------------------");
miPerro.describePerro( );
System.out.println("-------------------");
miPerro.ladrarPerro( );
// Otro Perro
Perro elPerroDeMiHermana = new Perro( );
elPerroDeMiHermana.raza = "Labrador";
System.out.println("-------------------");
elPerroDeMiHermana.describePerro( );
// Altera la variable estatica de la clase Perro
Perro.peso = 15;
elPerroDeMiHermana.describePerro( );
miPerro.describePerro( );
// NOTA: el color saldra null
}
}
Ejemplo extrado de: www.monografias.com/trabajos/java/java.stml
9.4 LA HERENCIA
La Herencia es el mecanismo por el que se crean nuevos objetos definidos en trminos de
objetos ya existentes. Por ejemplo, si se tiene la clase Ave, se puede crear la subclase Ganso,
que es una especializacin de Ave.
class Ganso extends Ave {
int numero_de_patas;
}
La palabra clave extends se usa para generar una subclase (especializacin) de un objeto. Una
Ganso es una subclase de Ave. Cualquier cosa que contenga la definicin de Ave ser copiada
a la clase Ganso, adems, en Ganso se pueden definir sus propios mtodos y variables de
instancia. Se dice que Ganso deriva o hereda de Ave.
Adems, se puede sustituir los mtodos proporcionados por la clase base. Utilizando nuestro
anterior ejemplo de MiClase, un ejemplo de una clase derivada sustituyendo a la funcin
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 tambin se inicializa a 10,
pero la llamada al mtodo Suma_a_i() produce un resultado diferente:
MiNuevaClase mnc;
mnc = new MiNuevaClase();
mnc.Suma_a_i( 10 );
En Java no se puede hacer herencia mltiple. Por ejemplo, de la clase aparato con motor y de
la clase animal no se puede derivar nada, sera como obtener el objeto perro mecnico a partir
de una mquina motorizada (aparato con motor) y un perro (animal). En realidad, lo que se
pretende es copiar los mtodos, es decir, pasar la funcionalidad del perro de verdad al perro
mecnico, con lo cual no sera necesaria la herencia mltiple sino simplemente la comparticin
de funcionalidad que se encuentra implementada en Java a travs de interfaces.
9.5 EL 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 mtodos definidos en la clase:
public
public void CualquieraPuedeAcceder(){}
Cualquier clase desde cualquier lugar puede acceder a las variables y mtodos de instancia
pblicos.
protected
protected void SoloSubClases(){}
Slo las subclases de la clase y nadie ms puede acceder a las variables y mtodos de
instancia protegidos.
private
private String NumeroDelCarnetDeIdentidad;
Las variables y mtodos de instancia privados slo pueden ser accedidos desde dentro de la
clase. No son accesibles desde las subclases.
friendly (sin declaracin especfica)
void MetodoDeMiPaquete(){}
Por defecto, si no se especifica el control de acceso, las variables y mtodos de instancia se
declaran friendly (amigas), o sea que son accesibles por todos los objetos dentro del
mismo paquete, pero no por los externos al paquete. Es lo mismo que protected.
Los mtodos protegidos (protected) pueden ser vistos por las clases derivadas, como en
C++, y tambin, en Java, por los paquetes (packages). Todas las clases de un paquete
pueden ver los mtodos protegidos de ese paquete. Para evitarlo, se deben declarar como
private protected, lo que hace que ya funcione como en C++ en donde slo se puede
acceder a las variables y mtodos protegidos de las clases derivadas.
10-
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
PUBLIC class miclase extends java.applet.Applet: solo la clase principal debe ser
pblica por fuerza
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:
// BuenDiaSeoraApplet.java
import java.awt.Graphics;
import java.awt.Font;
import java.awt.Color;
public class BuenDiaSeoraApplet 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("Buen dia seora",5,50);
}
}
Crear BuenDiaSeoraApplet.HTML:
<HTML>
<BODY>
<applet code="BuenDiaSeoraApplet.class" width=400 height=400>
</applet>
</BODY>
</HTML>
En el applet Java:
No hay init(), start(), destroy() sobreescritos.
36 es el tamao
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 funciona.
En el HTML:
Ejemplo anterior es el ms sencillo posible.
El tag <APPLET>: extensin 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
(m tarde)
WIDTH, HEIGTH son obligatorios. Dimensiones de la caja de applet. Si pequea,
se recorta.
Cerrar con </APPLET>
Opcionalmente lnea siguiente a </APPLET> para N no Java ("Debera aparecer
aqu un applet si el navegador es compatible con Java")
Ms 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
>
// OtroBuenDiaSeoraApplet.java
import java.awt.Graphics;
import java.awt.Font;
import java.awt.Color;
public class OtroBuenDiaSeoraApplet extends
java.applet.Applet
{
Font f = new Font("Arial", Font.BOLD, 36);
String nombre; // nuevo
// nuevo
public void init()
{
nombre = getParameter("Nombre");
if (nombre == null) nombre = "Maurito";
nombre = "Hola" + nombre + "!!!";
}
//
public void paint(Graphics g)
{
g.setFont(f);
g.setColor(Color.red);
g.drawString("Buen dia seora",5,50);
}
}
11-
11-
O los cargamos localmente (dificultad: hay que bajar todas las clases,
imgenes, sonidos, en misma jerarqua de directorios)
Grficos
Lneas: g.drawline(10,10,50,50)
Rectngulos:
Cuadrados
Esquinas redondeadas
Con efecto 3D: borde en relieve
Ej:
g.drawRect(x,y,ancho,altura)
g.fillRect(20,20,80,80)
g.drawRoundRect(a,b,c,d,E,F) (ver p151
21days)
g.fillRoundRect(...)
g.draw3Drect(20,20,60,60,true);
Poligonos:
Ej:
g.clearRect(0,0,size().width,size().heigth)
// size() devuelve un objeto Dimension
Texto y fuentes
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 miColor = new Color(130,124,31);
g.setColor(miColor); // empieza a dibujar con el nuevo color
}
Imgenes: clase Image, mtodo drawImage()
// PintaFoto.java
import java.applet.Applet;
import java.awt.Graphics;
import java.awt.Image;
public class PintaFoto extends Applet
{
Image imagen;
public void init()
{
imagen = getImage(getCodeBase(), "orb.gif"); //poner orb.gif
en el directorio java !!
}
public void paint(Graphics g)
{
int alturaImagen = imagen.getHeight(this);
int anchuraImagen = imagen.getWidth(this);
g.drawImage(imagen, 0, 0, this);
g.drawImage(imagen, anchoImagen,0,anchoImagen/2,
alturaImagen*2, this); // dibuja la imagen deformada
}
}
Sonido (p209 21days)
Solo en applets
Las clases que comienzan por sun.XXX incluyen funciones que aun no se han
estandarizado, pero que se prev lo hagan en un futuro prximo. Pasar de
mtodo play(URL)
Ej:
play(getCodeBase(), "audio/guitarra.au");
// SonidoApplet.java
public class SonidoApplet extends java.applet.Applet
{
public void init()
{
play(getCodeBase(), "yahoo1.au"); // poner yahoo1.au en dir
java!
}
}
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;
//cambio
public void start()
{
if (runner == null)
{
runner = new Thread(this);
runner.start();
}
else
{
System.out.println("Stop");
}
//cambio
public void stop()
{
if (runner != null)
{
runner.stop();
runner = null;
}
else
{
System.out.println("Stop");
}
}
//cambio
public void run()
{
while (true)
{
fecha = new Date();
repaint();
try
{
Thread.sleep(1000);
} catch(InterruptedException e)
{;}
}
}
Soluciones posibles
1- 1Sobreescribir update() para que no borre la pantalla o que solo borre
una cierta rea
2- 2Clipping: re-dibujar solo aquello que cambia. Metodo clipRect() de la
clase Graphics
3- 3Doble-buffering: hacer los cambios en una pantalla virtual y volcar el
resultado a la pantalla real. Es el mtodo ms complicado...
Ej:
Eventos de mouse
// PosicionDeClickApplet.java
import java.awt.Event;
import java.awt.Graphics;
public class PosicionDeClickApplet extends java.applet.Applet
{
int x,y;
//Point ultimo = null;
//Point nuevo = null;
public void paint(Graphics g)
{
if ( x*y != 0)
{
g.drawString("Has hecho CLICK en x = " + x +" , y = " + y,0,10);
g.fillOval(x,y,10,10);
}
}
public boolean mouseDown(Event evt, int x,int y)
{
this.x = x;
this.y = y;
System.out.println("Has hecho CLICK en x = " + x +" , y = " + y);
repaint();
return true;
}
Ej:
}
Variacin en el ejemplo anterior: cambiar mouseDown() por mouseMove()
Si se cliquea y arrastra no lo detecta: habra que usar mouseDrag()
mouseEnter() y mouseExit()
Ej:
1. Controles bsicos
Button
Chekboxes
Choice
List
Menu
Text Field
2. Otros controles
Slider
Scrollbar
Text Area
Canvas
Label
Panel
Scroll Pane
14- 14- CONCEPTO DE JERARQUIA DE COMPONENTES DEL PROGRAMA
P.ej.: las opciones de un men son hijas del men, que a su vez es hijo de
la ventana en la que aparece, que a su vez es hijo del applet, etc.
add(boton1);
add(etiqueta1);
add(boton2);
}
Checkbox("Concordia"));
Checkbox("Rosario", null, true));
Checkbox("Chaco"));
Checkbox("Catamarca"));
Metodos tiles:
setState() //consulta el estado del checkbox
setState() //altera el estado del checkbox
etc...
RadioButton
...
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));
...
Ejemplos extraidos de: htpp//:arcoinf.uc3m.esp/yy_pstr
18- 18- COMO USAR CHOICE MENU
Un men Choice es desplegable.
Permite seleccionar un item del men
...
Choice c = new Choice(); // crea el menu desplegable
c.addItem("Naranja");
c.addItem("Manzana");
c.addItem("Pera");
add(c); // aade el menu al panel
...
Mtodos tiles:
getItem(int n) devuelve el string de la opcion n-esima
getSelectedIndex() devuelve el ndice de la opcin seleccionada
//Este tipo de mens solo permiten seleccionar una opcin. Para mltiples opciones, usar
una lista
19- COMO USAR TEXTFIELDS
Permite al usuario introducir texto
...
add(new Label("Nombre completo"));
add(new TextField("-escriba aqu su nombre-"));
add(new Label("Telefono"));
add(new TextField(12));
add(new Label("Password"));
TextField t = new TextField(20);
t.setEchoCharacter('*');
add(t);
...
Metodos tiles:
setEditable(boolean) define si el testo es editable o no
select(int, int) selecciona el texto entre las dos posiciones (origen = 0)
etc.
20- COMO USAR TEXTAREA
Es un componente similar a TextField.
TextField es ms conveniente para pequeos textos, idealmente de una sola
linea. No tiene barras de deslizamiento
TextArea en ms conveniente para textos largos, de ms de una linea.
Por defecto, tiene barras de deslizamiento
...
String texto = "Erase una vez un bosque en el que vivan siete enanitos que eran\n" +
lista.addItem("Urano");
lista.addItem("Jupiter"); // si se aade un sexto elemento, se creara automaticamente
// una barra deslizante
add(lista);
...
Mtodos 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 posicin dada
etc.
23-
23-
24-
25-
26-
26-
{
g.drawImage(imagen, 0, 0, getBackground(), this);
}
27-
27-
OTROS COMPONENTES
MenuShortcut: asocia una combinacin de teclas para activar una opcin de
menu (p.ej.:Control-S para grabar archivo)
PopupMenu: menu flotante
28-
28-
LAYOUTMANAGER
GridBagLayout
Es el LM ms complejo y potente.
Permite definir celdas, pero de distinto tamao
Tambien se puede definir el comportamiento de las celdas al variar el tamao de
la ventana que los contiene (ver GridBagConstraints): se mantiene su tamao,
utilizan el nuevo espacio disponible, etc.
BorderLayout
CardLayout
Esta clase se usa para hacer slide show, es decir una sucesin de tarjetas en
pantalla.
Los paneles se presentan uno cada vez.
...
Panel panelCardLayout = new Panel();
panelCardLayout.setLayout(new CardLayout());
panelCardLayout.add("primero", new Button("Boton 14"));
panelCardLayout.add("segundo", new Button("Boton 15"));
panelCardLayout.add("tercero", new Button("Boton 16"));
panelCardLayout.add("cuarto", new Button("Boton 17"));
((CardLayout)panelCardLayout.getLayout()).show(panelCardLayout, "tercero"); //
complicadillo...
add(panelCardLayout);
Metodos utiles:
public void first(Container parent)
public void next(Container parent)
public void previous(Container parent)
public void last(Container parent)
Sin LayoutManager
Para hacer posicionamiento absoluto, se declara hace:
setLayout(null)
Insets
Definen un espacio de marco del panel.
Se pueden asignar anchos independientes a los 4 lados
public Insets insets()
{
return new Insets(10,10,10,10); // 10 pixels en los 4 lados
}
29
29-
Eventos en JDK1.0.x
Usa un mecanismo que ha quedado obsoleto. No se recomienda su uso. La
version JDK1.1.x conserva el mecanismo antiguo para asegurar la compatibilidad,
pero define uno nuevo, cuyo uso se recomienda.
El compilador devuelve deprecated si se usan los Metodos del antiguo, pero
no da error.
El gestionador de eventos de cada componente puede reaccionar de alguna
de las formas siguientes;
Ignorando el evento y pasndolo al Componente superior en
jerarqua. Es lo que se hace por defecto.
Modificando el evento (que es un objeto) y pasndolo al nivel
superior. P.ej.: un texto se convierte a maysculas y se pasa
Reaccionando al evento y parando su propagacin hacia arriba. P.ej.:
si se introduce un carcter no valido en un TextField, el evento no se
propaga, y los componentes superiores nunca lo vern
Los objetos de la clase Event
Cada evento produce la creacin de un objeto de la clase predefinida Event,
que incluye la siguiente informacin;
Tipo de evento: p.ej. pulsacin de tecla, Boton del mouse,
apertura de ventana,...
Objeto en el que se ha producido el evento: p.ej. Boton,
ventana, textField,...
Tiempo en que se produjo el evento
Posicion (x,y) en que se produjo, relativo al origen del
componente.
Para eventos de teclado, la tecla pulsada y el estado de los
modificadores Shift, Alt, Ctrl
Un argumento arbitrario, como un String
etc.
gotFocus() (Event.GOT_FOCUS)
lostFocus() (Event.LOST_FOCUS)
handleEvent() (all event types)
Ejemplo de programa que interpreta eventos a la manera de JDK1.0.x;
// BotonesColoresApplet.java
// EVENTOS JDK 1.0.x
import java.awt.*;
public class BotonesColoresApplet extends java.applet.Applet
{
TextArea areaTexto;
Panel panel1;
public void init()
{
setLayout(new BorderLayout());
panel1 = new Panel();
panel1.add(new Button("Rojo"));
panel1.add(new Button("Azul"));
panel1.add(new Button("Verde"));
panel1.add(new Button("Amarillo"));
areaTexto = new TextArea(15, 10);
areaTexto.setEditable(false);
add("North",panel1);
add("South",areaTexto);
}
public boolean handleEvent(Event evt)
{
switch(evt.id)
{
case Event.ACTION_EVENT :
if (evt.target instanceof Button)
{
cambiaColor((String) evt.arg);
}
break;
case Event.GOT_FOCUS:
areaTexto.append("GOT_FOCUS \n");
return true;
case Event.LOST_FOCUS:
areaTexto.append("LOST_FOCUS \n");
return true;
case Event.MOUSE_ENTER:
areaTexto.append("MOUSE_ENTER, x=" + evt.x + " y=" + evt.y + "\n");
return true;
case Event.MOUSE_EXIT:
areaTexto.append("MOUSE_EXIT, x=" + evt.x + " y=" + evt.y + "\n");
return true;
default:
return false;
}
return true;
}
public void cambiaColor(String nombreColor)
{
if (nombreColor.equals("Rojo")) areaTexto.setBackground(Color.red);
else if (nombreColor.equals("Azul")) areaTexto.setBackground(Color.blue);
else if (nombreColor.equals("Verde")) areaTexto.setBackground(Color.green);
else if (nombreColor.equals("Amarillo")) areaTexto.setBackground(Color.yellow);
}
}
// EjemploDeEventos.java
// EVENTOS JDK 1.1.x
import java.awt.*;
import java.awt.event.*;
class BotonesDeColores implements MouseListener, ActionListener
{
TextArea areaTexto;
Button boton1, boton2, boton3;
MenuBar barraMenu;
Menu menu1;
MenuItem opcionMenu1_1;
Label label1;
Panel panel1;
// Constructor
public BotonesDeColores()
{
Frame f = new Frame();
f.setLayout(new BorderLayout());
// Creo todos los objetos Componentes
panel1 = new Panel();
{
areaTexto.append("mouseExited: x=" + e.getX() + ", y=" + e.getY() + "\n");
if (e.getComponent() == label1)
{
label1.setText("Normal");
label1.setBackground(Color.white);
areaTexto.setFont(new Font("TimesRoman", Font.PLAIN, 14));
}
}
public void mousePressed(MouseEvent e)
{
areaTexto.append("mousePressed: x=" + e.getX() + ", y=" + e.getY() + "\n");
}
public void mouseReleased(MouseEvent e)
{
areaTexto.append("mouseReleased: x=" + e.getX() + ", y=" + e.getY() + "\n");
}
// Mtodos de la interfaz ActionListener
public void actionPerformed(ActionEvent e)
{
String cadena = e.getActionCommand();
if (cadena.equals("Salir"))
{
System.exit(0);
}
else
{
cambiaColor(cadena);
}
}
// Otros metodos
public void cambiaColor(String nombreColor)
{
if (nombreColor.equals("Rojo")) areaTexto.setBackground(Color.red);
else if (nombreColor.equals("Azul")) areaTexto.setBackground(Color.blue);
else if (nombreColor.equals("Verde")) areaTexto.setBackground(Color.green);
else if (nombreColor.equals("Amarillo")) areaTexto.setBackground(Color.yellow);
}
}
public class EjemploDeEventos
{
public static void main(String args[])
{
BotonesDeColores bdc = new BotonesDeColores();
}
}
// CajasDeColores.java
// Dibuja una serie de rectngulos y los rellena con colores de componentes RGB
aleatorias
import java.awt.Graphics;
import java.awt.Color;
public class CajasDeColores extends java.applet.Applet
{
public void paint(Graphics g)
{
int rojo,verde,azul;
for (int j = 30; j < (size().height - 25); j += 30)
{
for (int i = 5; i < (size().width - 25); i += 30)
{
rojo = (int) Math.floor(Math.random() * 256);
verde = (int) Math.floor(Math.random() * 256);
azul = (int) Math.floor(Math.random() * 256);
g.setColor(new Color(rojo,verde,azul));
g.fillRect(i,j,25,25);
g.setColor(Color.black);
g.drawRect(i-1, j-1, 25, 25);
}
}
}
Carga un sonido y lo interpreta
// SonidoApplet.java
import java.applet.AudioClip;
public class SonidoApplet extends java.applet.Applet
{
AudioClip sonido;
public void init()
{
// El fichero de sonido se llama 'yahoo.au' y est en el directorio del fichero html
sonido = getAudioClip(getCodeBase(), "yahoo1.au");
}
public void start()
{
sonido.loop();
}
public void stop()
{
sonido.stop();
}
}
Cmo tratar los eventos
// EjemploDeEventos.java
// EVENTOS JDK 1.1.x
// Muestra una ventana con 3 botones que cambian el color al cliquearlos
import java.awt.*;
import java.awt.event.*;
class BotonesDeColores implements MouseListener, ActionListener
{
// Declara los componentes que luego se usaran para crear la interfaz grafica
TextArea areaTexto;
Button boton1, boton2, boton3;
MenuBar barraMenu;
Menu menu1;
MenuItem opcionMenu1_1;
Label label1;
Panel panel1;
// Constructor
public BotonesDeColores()
{
Frame f = new Frame();
f.setLayout(new BorderLayout());
// Creo todos los objetos Componentes
panel1 = new Panel();
label1 = new Label("Normal");
boton1 = new Button("Rojo");
boton2 = new Button("Azul");
boton3 = new Button("Verde");
barraMenu = new MenuBar();
menu1 = new Menu("Archivo");
opcionMenu1_1 = new MenuItem("Salir");
areaTexto = new TextArea(15, 10);
areaTexto.setEditable(false);
// Estructuro todos los componentes
panel1.add(boton1);
panel1.add(boton2);
panel1.add(boton3);
panel1.add(label1);
menu1.add(opcionMenu1_1);
barraMenu.add(menu1);
f.add("North", panel1);
f.add("South", areaTexto);
f.setMenuBar(barraMenu);
f.setSize(300,320);
f.setVisible(true);
// Observador de areaTexto
areaTexto.addMouseListener(this);
// Observador de label1
label1.addMouseListener(this);
// Observador de los botones
boton1.addActionListener(this);
boton2.addActionListener(this);
boton3.addActionListener(this);
// Observador de la opcion de menu
opcionMenu1_1.addActionListener(this);
}
// Mtodos del interfaz MouseListener
public void mouseClicked(MouseEvent e)
{
areaTexto.append("mouseClicked: x=" + e.getX() + ", y=" + e.getY() + "\n");
}
public void mouseEntered(MouseEvent e)
{
areaTexto.append("mouseEntered: x=" + e.getX() + ", y=" + e.getY() + "\n");
if (e.getComponent() == label1)
{
label1.setText("CURSIVA");
label1.setBackground(Color.red);
areaTexto.setFont(new Font("TimesRoman", Font.ITALIC, 14));
}
}
public void mouseExited(MouseEvent e)
{
areaTexto.append("mouseExited: x=" + e.getX() + ", y=" + e.getY() + "\n");
if (e.getComponent() == label1)
{
label1.setText("Normal");
label1.setBackground(Color.white);
areaTexto.setFont(new Font("TimesRoman", Font.PLAIN, 14));
}
}
public void mousePressed(MouseEvent e)
{
areaTexto.append("mousePressed: x=" + e.getX() + ", y=" + e.getY() + "\n");
}
public void mouseReleased(MouseEvent e)
{
areaTexto.append("mouseReleased: x=" + e.getX() + ", y=" + e.getY() + "\n");
}
// Mtodos del interfaz ActionListener
public void actionPerformed(ActionEvent e)
{
String cadena = e.getActionCommand();
if (cadena.equals("Salir"))
{
System.exit(0);
}
else
{
cambiaColor(cadena);
}
}
// Otros mtodos
public void cambiaColor(String nombreColor)
{
if (nombreColor.equals("Rojo")) areaTexto.setBackground(Color.red);
else if (nombreColor.equals("Azul")) areaTexto.setBackground(Color.blue);
else if (nombreColor.equals("Verde")) areaTexto.setBackground(Color.green);
else if (nombreColor.equals("Amarillo")) areaTexto.setBackground(Color.yellow);
}
}
// Mtodo de entrada al programa. Es el primero que se ejecuta al lanzarlo
public class EjemploDeEventos
{
public static void main(String args[])
{
}
Control de eventos mediante clases internas
// EjemploDeEventos2.java
// EVENTOS JDK 1.1.x mediante clases internas
import java.awt.*;
import java.awt.event.*;
class BotonesDeColores
{
TextArea areaTexto;
Button boton1, boton2, boton3;
MenuBar barraMenu;
Menu menu1;
MenuItem opcionMenu1_1;
Label label1;
Panel panel1;
SymMouse aSymMouse;
SymAction aSymAction;
// Constructor
public BotonesDeColores()
{
Frame f = new Frame();
f.setLayout(new BorderLayout());
// Creo todos los objetos Componentes
panel1 = new Panel();
label1 = new Label("Normal");
boton1 = new Button("Rojo");
boton2 = new Button("Azul");
boton3 = new Button("Verde");
barraMenu = new MenuBar();
menu1 = new Menu("Archivo");
opcionMenu1_1 = new MenuItem("Salir");
areaTexto = new TextArea(15, 10);
areaTexto.setEditable(false);
// Estructuro todos los componentes
panel1.add(boton1);
panel1.add(boton2);
panel1.add(boton3);
panel1.add(label1);
menu1.add(opcionMenu1_1);
barraMenu.add(menu1);
f.add("North", panel1);
f.add("South", areaTexto);
f.setMenuBar(barraMenu);
f.setSize(300,320);
f.setVisible(true);
aSymMouse = new SymMouse();
aSymAction = new SymAction();
// Observador de areaTexto
areaTexto.addMouseListener(aSymMouse);
// Observador de label1
label1.addMouseListener(aSymMouse);
// Observador de los botones
boton1.addActionListener(aSymAction);
boton2.addActionListener(aSymAction);
boton3.addActionListener(aSymAction);
// Observador de la opcin de menu
opcionMenu1_1.addActionListener(aSymAction);
}
//Clase interna que controla los eventos de mouse. Extiende de MouseAdapter que a
su vez implementa el interfaz MouseListener
class SymMouse extends MouseAdapter
{
public void mouseClicked(MouseEvent event)
{
areaTexto.append("mouseClicked: x=" + event.getX() + ", y=" +
event.getY() + "\n");
Object object = event.getSource();
if (object == boton1)
{
//boton1_MouseClick(event);
areaTexto.append("\t boton1");
}
else if (object == boton2)
{
//boton2_MouseClick(event);
areaTexto.append("\t boton2");
}
else if (object == boton3)
{
//boton3_MouseClick(event);
areaTexto.append("\t boton3");
}
}
public void mouseEntered(MouseEvent e)
{
areaTexto.append("mouseEntered: x=" + e.getX() + ", y=" + e.getY() +
"\n");
if (e.getComponent() == label1)
{
label1.setText("CURSIVA");
label1.setBackground(Color.red);
areaTexto.setFont(new Font("TimesRoman", Font.ITALIC, 14));
}
}
public void mouseExited(MouseEvent e)
{
areaTexto.append("mouseExited: x=" + e.getX() + ", y=" + e.getY() +
"\n");
if (e.getComponent() == label1)
{
label1.setText("Normal");
label1.setBackground(Color.white);
areaTexto.setFont(new Font("TimesRoman", Font.PLAIN, 14));
}
public void mousePressed(MouseEvent e)
{
areaTexto.append("mousePressed: x=" + e.getX() + ", y=" + e.getY() +
"\n");
}
public void mouseReleased(MouseEvent e)
{
areaTexto.append("mouseReleased: x=" + e.getX() + ", y=" + e.getY()
+ "\n");
}
} //fin de la clase interna SymMouse
//Clase interna que controla los eventos generales
class SymAction implements ActionListener
{
// Mtodos del interfaz ActionListener
public void actionPerformed(ActionEvent e)
{
String cadena = e.getActionCommand();
if (cadena.equals("Salir"))
{
System.exit(0);
}
else
{
cambiaColor(cadena);
}
}
} //fin de la clase interna SymMouse
public void cambiaColor(String nombreColor)
{
if (nombreColor.equals("Rojo")) areaTexto.setBackground(Color.red);
else if (nombreColor.equals("Azul")) areaTexto.setBackground(Color.blue);
else if (nombreColor.equals("Verde")) areaTexto.setBackground(Color.green);
else if (nombreColor.equals("Amarillo")) areaTexto.setBackground(Color.yellow);
}
} //fin de la clase BotonesDeColores
public class EjemploDeEventos2
{
public static void main(String args[])
{
new BotonesDeColores();
}
}
// Cerrar Streams
try
{
fos.close();
} catch(IOException e)
{
System.out.println(e);
}
}
import java.io.*;
public class LeeDeDisco
{
public static void main(String args[])
{
{
fis = new FileInputStream(ficheroDeEntrada);
} catch (FileNotFoundException e)
{
System.out.println(e);
}
catch(SecurityException e)
{
System.out.println(e);
}
br = new BufferedReader(new InputStreamReader(fis));
while (true)
{
try
{
linea = br.readLine();
pw.flush();
} catch (UnknownHostException e)
{
System.err.println(e);
}
catch (IOException e)
{
System.err.println(e);
}
}
// Servidor.java
import java.io.*;
import java.net.*;
public class Servidor
{
// Constructor
public Servidor( )
{
super( );
}
public static void main(String args[])
{
int numeroDePuerto = 3000;
ServerSocket socketServidor = null;
OutputStream os = null;
InputStream is = null;
PrintWriter pw = null;
BufferedReader br;
try {
socketServidor = new ServerSocket(numeroDePuerto);
System.out.println("Servidor creado. Esperando conexion de clientes...");
} catch (IOException e)
{
System.err.println(e);
}
int contador = 0;
while (true)
{
try
{
Socket socketCliente = socketServidor.accept( );
System.out.println("He aceptado otro socket cliente");
}
Muestra una pgina web dentro de un applet
// CargaPaginaWeb.java
import java.net.*;
public class CargaPaginaWeb extends java.applet.Applet
{
public void init()
{
URL direccionURL = null;
try
{
direccionURL = new URL("http://www.yahoo.com/");
} catch(MalformedURLException e)
{
System.out.println(e);
}
getAppletContext().showDocument(direccionURL);
}
}
Carga la fuente de una pagina web en formato html y la muestra en pantalla
// CargaOrigenDeURL.java
import java.io.*;
import java.net.URL;
public class CargaOrigenDeURL
{
// Constructor
public CargaOrigenDeURL()
{
InputStream conn;
DataInputStream data;
String linea;
StringBuffer buferDeTexto = new StringBuffer();
URL direccionURL = null;
try
{
direccionURL = new URL("http://www.yahoo.com");
conn = direccionURL.openStream();
32-
Referencias
Java se asemeja mucho a C y C++. Esta similitud, es la mejor herramienta para los
programadores, ya que facilita en gran manera su transicin a Java. Desafortunadamente,
tantas similitudes hacen que no nos paremos en algunas diferencias que son vitales. La
terminologa utilizada en estos lenguajes, a veces es la misma, pero hay grandes diferencias
subyacentes en su significado.
C tiene tipos de datos bsicos y punteros. C++ modifica un poco este panorama y le aade los
tipos referencia. Java tambin especifica sus tipos primitivos, elimina cualquier tipo de
punteros y tiene tipos referencia mucho ms claros.
Conocemos ya ampliamente todos los tipos bsicos de datos: datos base, integrados,
primitivos e internos; que son muy semejantes en C, C++ y Java; aunque Java simplifica un
poco su uso a los desarrolladores haciendo que el chequeo de tipos sea bastante ms rgido.
Adems, Java aade los tipos boolean y hace imprescindible el uso de este tipo booleano en
sentencias condicionales.
Bibliografia:
Desarrollo de bases de datos en Java.
Martin Rinehart, editorial Mc Graw-Hill. Ao 1.998.
Manual de Java Patrick Naughton,
Editorial Mc Graw-Hill. Ao 1.999.
Aplicaciones de negocios en Java
Jorge Bourdette. Compumagazine.
Direcciones de internet consultadas:
www.monografias.com/trabajos/java/java.shtml
http://arco.inf.uc3m.esp/ii_pstr
www.geocities.com/CollegePark/Quad/8901/tema05.html
ftp://ftp.javasoft.com/docs/tutorial.html.zip