Beruflich Dokumente
Kultur Dokumente
DIA 1
Introduccin a la OOP (programacin orientada a objetos)
Junto con el paradigma de la orientacin a procedimientos, son las dos
filosofas generales de diseo ms importantes. A diferencia de la
orientacin a procedimientos (OP), la orientacin a objetos (OO) no
mtodos y atributos.
4. Herencia
Es el concepto que define la adopcin de todas las caractersticas de una
clase por parte de otra clase que es definida como descendiente o heredera
de la primera.
Introduccin a Java
1. Historia de JAVA
A finales de los aos ochenta Sun Microsystems decide introducirse en el
mercado de la electrnica de consumo y ms concretamente en los equipos
domsticos, incluyendo la televisin interactiva. Java, nace como un
lenguaje ideado en sus comienzos para programar electrodomsticos!
En sus primeras versiones, se llam OAK.
2. Objetivos de diseo de los creadores de JAVA
LENGUAJE FAMILIAR:
Java no sera un lenguaje totalmente nuevo, se parecera a lo que
conocemos como C++, as que no le sera tan complicado recalar en los
programadores escpticos.
LENGUAJE ORIENTADO A OBJETOS:
encapsulacin
herencia
polimorfismo
enlace dinmico.
LENGUAJE ROBUSTO:
Uno de los problemas ms comunes en los lenguajes de programacin 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 aplicacin 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 cdigo en C o C++ el programador debe hacerse cargo de la gestin
de memoria de una forma explcita, solicitando la asignacin de bloques a
punteros y liberndolos cuando ya no son necesarios.
En Java, los punteros, la aritmtica de punteros y las funciones de
asignacin y liberacin de memoria (malloc( ) y free( ) ) no existen. En lugar
de los punteros se emplean referencias a objetos, los cuales son
identificadores simblicos. 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 ( MLTIPLES THREADS ):
Una de las caractersticas del lenguaje es que soporta la concurrencia a
travs de threads. En ocasiones puede interesarnos dividir una aplicacin 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 lgico de direcciones, se denominan threads.
LENGUAJE PORTABLE:
El principal objetivo de los diseadores de Java, y dado el gran crecimiento
de las redes en los ltimos aos, fue el de desarrollar un lenguaje cuyas
aplicaciones una vez compiladas pudiesen ser inmediatamente ejecutables
en cualquier mquina y sobre cualquier sistema operativo. Por ejemplo, un
programa desarrollado en Java en una estacin de trabajo Sun que emplea
el sistema operativo Solaris, debera poderse llevar a un PC que utilice
sistema operativo Windows NT.
LENGUAJE LO MS SIMPLE POSIBLE:
- Applets
<HTML>
<BODY>
<APPLET code="miProgramaApplet.class" width=400
height=400>
</APPLET>
</BODY>
</HTML>
DA 2
Gramtica de Java
1. Comentarios
{
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);
}
}
}
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");
}
/* Aadir:
-
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:
-
*/
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 slo se ha utilizado la palabra clave public para calificar el
nombre de las clases que hemos visto, pero hay tres modificadores ms. Los
tipos de clases que podemos definir son:
abstract
Una clase abstract tiene al menos un mtodo 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 mtodos 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 mtodos de instancia
4. 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 Pato, que es una especializacin de Ave.
class Pato extends Ave {
int numero_de_patas;
}
La palabra clave extends se usa para generar una subclase (especializacin)
de un objeto. Una Pato es una subclase de Ave. Cualquier cosa que
contenga la definicin de Ave ser copiada a la clase Pato, adems, en Pato
se pueden definir sus propios mtodos y variables de instancia. Se dice que
Pato deriva o hereda de Ave.
Adems, se pueden sustituir los mtodos proporcionados por la clase base.
Utilizando nuestro anterior ejemplo de MiClase, aqu hay 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 toro mecnico a partir de una mquina motorizada
(aparato con motor) y un toro (aminal). En realidad, lo que se pretende es
copiar los mtodos, es decir, pasar la funcionalidad del toro de verdad al
toro 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.
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 mtodos definidos
en la clase:
public
public void CualquieraPuedeAcceder(){}
Cualquier clase desde cualquier lugar puede acceder a las variables y
mtodos de instacia 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), 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 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.
class UnaClase {
int var;
UnaClase()
{
var = 5;
}
UnaFuncion()
{
var += 5;
}
}
En el cdigo anterior, si se llama a la funcin UnaFuncion a travs de un
puntero a funcin, no se podra acceder a var, porque al utilizar un puntero
a funcin no se pasa implcitamente el puntero al propio objeto (this). Sin
embargo, s se podra acceder a var si fuese esttica, porque siempre
estara en la misma posicin de memoria para todos los objetos que se
creasen de UnaClase.
7. Interfaces
Los mtodos abstractos son tiles cuando se quiere que cada
implementacin de la clase parezca y funcione igual, pero necesita que se
cree una nueva clase para utilizar los mtodos abstractos.
Los interfaces proporcionan un mecanismo para abstraer los mtodos a un
nivel superior.
Un interface contiene una coleccin de mtodos que se implementan en
otro lugar. Los mtodos de una clase son public, static y final.
La principal diferencia entre interface y abstract es que un interface
proporciona un mecanismo de encapsulacin de los protocolos de los
mtodos 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();
}
DA 3
Creacin de applets sencillos
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
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!
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
g.drawString("Contador
g.drawString("Contador
g.drawString("Contador
g.drawString("Contador
}
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:
36 es el tamao
En el HTML:
<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>
Ej:
<PARAM NAME=fuente VALUE="TimesRoman">
y
String nombreDeLaFuente = getParameter("fuente");
Proteccion: se aade a continuacion;
If(nombreDelaFuente == null)
nombreDeLaFuente == "Courier";
Ej:
<PARAM NAME=tamaoLetras VALUE="36">
y
int tamaoDeLetra;
String tam = getParameter("tamao");
If (tam == null)
tamaoDeLetra = 20;
}
else tamaoDeLetra = Integer.parseInt(tam);
// OtroHolaMundoCruelApplet.java
import java.awt.Graphics;
import java.awt.Font;
import java.awt.Color;
public class OtroHolaMundoCruelApplet 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 = "Fulanito";
nombre = "Hola " + nombre + "!!!";
}
//
public void paint(Graphics g)
{
g.setFont(f);
g.setColor(Color.red);
Graficos
Lineas: g.drawline(10,10,50,50)
Rectangulos:
Cuadrados
Esquinas redondeadas
Ej:
g.drawRect(x,y,anchura,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:
int listaCoordX[] = {0,10,20,10,50,0};
int listaCoordY[] = {0,20,30,60,40,0};
int numeroPuntosPoligono = listaCoordX.length;
g.drawPolygon(listaCoordX,listaCoordY,numeroPuntosPoligono);
Con objetos;
int listaCoordX[] = {0,10,20,10,50,0};
int listaCoordY[] = {0,20,30,60,40,0};
int numeroPuntosPoligono = listaCoordX.length;
Polygon poligono = new Polygon(listaCoordX,
listaCoordY,numeroPuntosPoligono);
g.drawPolygon(poligono);
// poligono.addPoint(20,30);
// boolean estaDentro = poligono.contains(x,y);
Ovalos: g.drawOval(a,b,c,d)
Arcos: g.drawArc(a,b,c,d,e,f,g)
g.copyAerea(origenX,origenY,anchura,altura,destinoX,destinoY)
// Borrar un area. Se rellena con el color de fondo
// Para borrar todo el applet;
g.clearRect(0,0,size().width,size().heigth)
// size() devuelve un objeto Dimension
Texto y fuentes
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);
Color
De 24 bits. 3 componentes,
espacio RGB
0,0,0 es negro
255,0,0 es rojo
255,255,255 es blanco
etc...
Ej:
Color miColor = new Color(130,124,31);
g.setColor(miColor); // empieza a dibujar con el nuevo color
setBackground(Color.blue); // cambia el color de fondo del applet
setForegrounf(Color.black(; // cambia de golpe el color de todo lo dibujado
// CajasDeColores.java
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);
}
}
}
}
// PintaFoto.java
import java.applet.Applet;
import java.awt.Graphics;
import java.awt.Image;
Solo en applets
En aplicaciones, se puede
recurrir a una clase no
documentada, sun.audio
metodo play(URL)
Ej:
play(getCodeBase(), "audio/violin.au");
// SonidoApplet.java
public class SonidoApplet extends java.applet.Applet
{
public void init()
{
play(getCodeBase(), "yahoo1.au"); // poner yahoo1.au en dir java!
}
}
Si no lo encuentra, no da error.
No har nada.
Ej:
import java.applet.AudioClip;
AudioClip clip = getAudioClip(getCodeBase(), "audio/ruidoDeFondo.au");
clip.play(); // suena solo una vez
clip.loop(); // suena indefinidamente
clip.stop(); // obliga a que se pare
Ej:
// SonidoApplet.java
import java.applet.AudioClip;
public class SonidoApplet extends java.applet.Applet
{
AudioClip sonido;
public void init()
{
sonido = getAudioClip(getCodeBase(), "yahoo1.au");
}
// MalRelojDigitalApplet.java
import java.awt.Graphics;
import java.awt.Font;
import java.util.Date;
public class MalRelojDigitalApplet extends java.applet.Applet
{
Font fuente = new Font("TimesRoman", Font.BOLD, 24);
Date fecha;
public void start()
{
while (true)
{
fecha = new Date();
repaint();
try
{
Thread.sleep(10000);
} catch(InterruptedException e)
{;}
}
}
public void paint(Graphics g)
{
g.setFont(fuente);
g.drawString(fecha.toString(), 10, 50);
}
}
Ej:
// BienRelojDigitalApplet.java
import java.awt.Graphics;
import java.awt.Font;
import java.util.Date;
public class BienRelojDigitalApplet extends java.applet.Applet implements
Runnable //cambio
{
Font fuente = new Font("TimesRoman", Font.BOLD, 24);
Date fecha;
Thread runner; //cambio
//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)
{;}
}
}
public void paint(Graphics g)
{
{
g.setFont(fuente);
g.drawString(fecha.toString(), 10, 50);
}
}
}
repaint() llama al
metodo update()
update() borra la
pantalla por completo y
la rellena con el color de
fondo. Despues llama a
paint()
Soluciones posibles
Sobreescribir update()
para que no borre la
pantalla o que solo
borre una cierta area
Doble-buffering: hacer
los cambios en una
pantalla virtual y
volcar el resultado a la
pantalla real (p212
21days). Es el metodo
mas complicado...
etc...
Eventos de raton
Ej:
// 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);
}
}
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)
{
setBackground(java.awt.Color.blue);
repaint();
return true;
}
Eventos de teclado
Event.shiftDown()
Event.controlDown()
Ej:
public boolean mouseDown(Event evt, int x, int y)
{
if (evt.shiftDown()) {// tratar el evento shift+click}
else {// tratar el evento click simple}
}
DA 4
Interfaz grfica de usuario (AWT)
Button
Chekboxes
Choice
List
Menu
Text Field
Slider
Scrollbar
Text Area
Canvas
Label
Panel
Scroll Pane
1. Controles basicos
2. Otros controles
Checkbox("Pamplona"));
Checkbox("Bilbao", null, true));
Checkbox("Madrid"));
Checkbox("Barcelona"));
Metodos utiles:
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));
...
7. Como usar Choice Menu
...
Choice c = new Choice(); // crea el menu desplegable
c.addItem("Naranja");
c.addItem("Manzana");
c.addItem("Pera");
add(c); // aade 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
...
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...
...
String texto = "Erase una vez un pais en el que vivian tres cerditos que
eran\n" +
"hermanos. Decidieron construirse una casa, y uno el primero de\n" +
"ellos se la hizo de paja, el segundo de madera y el tercero de ladrillo\n" +
"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
Dialog (a secas!)
FileDialog:
...
// Ejemplo de utilizacion de Frame
Frame ventanaFrame = new Frame("Mi ventana FRAME");
ventanaFrame.setLayout(new FlowLayout()); //por defecto es BorderLayout
...
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 aade un sexto elemento, se creara
automaticamente
Es un tipo de Container
...
Panel unPanel = new Panel();
unPanel.add(new Label("Arriba"));
unPanel.add(new Label("Abajo"));
add(unPanel);
...
18. LayoutManager
FlowLayout
GridLayout
GridBagLayout
BorderLayout
CardLayout
FlowLayout
Es el LM por defecto.
setLayout(new FlowLayout());
GridLayout
...
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
BorderLayout
...
Panel panelBorderLayout = new Panel();
panelBorderLayout.setLayout(new BorderLayout(5,5));
panelBorderLayout.add("Center", etiqueta1);
panelBorderLayout.add("North", boton1);
panelBorderLayout.add("East", boton2);
panelBorderLayout.add("West", boton3);
panelBorderLayout.add("South", boton4);
add(panelBorderLayout);
...
CardLayout
...
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
Insets
setLayout(null)
...
public Insets insets()
{
return new Insets(10,10,10,10); // 10 pixels en los 4 lados
}
...
Mover el raton
etc...
Eventos en JDK1.0.x
etc...
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();
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);
}
{
areaTexto.append("mouseReleased: x=" + e.getX() + ", y=" + e.getY() +
"\n");
}
// Metodos del 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();
}
ActionEvent
MouseEvent
DA 5
Ejemplo de programas
Ilustracin de las fases de vida de un applet
// 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);
// CajasDeColores.java
// Dibuja una serie de rectngulos y los rellena con colores d
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);
}
}
}
}
// SonidoApplet.java
import java.applet.AudioClip;
public class SonidoApplet extends java.applet.Applet
{
AudioClip sonido;
public void init()
{
// EjemploDeEventos.java
// EVENTOS JDK 1.1.x
// Muestra una ventana con 3 botones que cambian el color
import java.awt.*;
import java.awt.event.*;
// 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);
}
// Metodos del interfaz MouseListener
public void mouseClicked(MouseEvent e)
{
areaTexto.append("mouseClicked: x=" + e.getX() + ", y=" +
"\n");
}
public void mouseEntered(MouseEvent e)
{
areaTexto.append("mouseEntered: x=" + e.getX() + ", y=" +
"\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=" +
"\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=" +
"\n");
}
public void mouseReleased(MouseEvent e)
{
areaTexto.append("mouseReleased: x=" + e.getX() + ", y="
"\n");
}
// Metodos del 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(Co
else if (nombreColor.equals("Azul")) areaTexto.setBackgroun
else if (nombreColor.equals("Verde"))
areaTexto.setBackground(Color.green);
else if (nombreColor.equals("Amarillo"))
areaTexto.setBackground(Color.yellow);
}
}
{
public static void main(String args[])
{
BotonesDeColores bdc = new BotonesDeColores();
}
}
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)
{
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=" +
if (e.getComponent() == label1)
{
label1.setText("Normal");
label1.setBackground(Color.white);
}
} //fin de la clase interna SymMouse
{
if (nombreColor.equals("Rojo")) areaTexto.setBackground(Co
else if (nombreColor.equals("Azul")) areaTexto.setBackgroun
else if (nombreColor.equals("Verde")) areaTexto.setBackgrou
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();
}
}
try
{
fos = new FileOutputStream(ficheroDeSalida);
} catch (IOException e)
{
System.out.println(e);
}
catch(SecurityException e)
{
System.out.println(e);
}
pw = new PrintWriter(fos);
// Escribe una secuencia de texto en el fichero
for (int i = 0; i < 10; i++)
{
pw.println("Linea " + i + " " + System.currentTimeMillis());
}
// Escribir realmente en el disco
pw.flush();
// Cerrar Streams
try
{
fos.close();
} catch(IOException e)
{
System.out.println(e);
}
}
}
import java.io.*;
public class LeeDeDisco
{
{
FileInputStream fis = null;
BufferedReader br = null;
String linea;
File ficheroDeEntrada = new File("c:/Javadir/historia", "salida
try
{
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);
}
}
}
{
System.out.println(is.available());
System.out.println("El servidor me envia este mensaje: " + b
}
}
// pw.println("Que tal? Soy un cliente");
// 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 {
while (true)
{
try
{
Socket socketCliente = socketServidor.accept( );
System.out.println("He aceptado otro socket cliente");
System.out.println("Ya se han conectado " + ++contador +
// Envia texto de bienvenida
os = socketCliente.getOutputStream();
pw = new PrintWriter(os);
is = socketCliente.getInputStream();
br = new BufferedReader(new InputStreamReader(is));
{
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();
data = new DataInputStream(new BufferedInputStream(con
while ((linea = data.readLine()) != null)
{
buferDeTexto.append(linea + "\n");
}
System.out.println(buferDeTexto.toString());
} catch(IOException e) {}
}
public static void main(String args[])
{
new CargaOrigenDeURL();
}
}
BIBLIOGRAFA RECOMENDADA
- Aprendiendo JAVA 1.1 en 21 Das. Laura Lemay y Carles L. Perkins
Ed. Prencice Hall
- Java Unleashed. Varios autores
Ed. Samsnet
- The Java FAQ. Kanerva
Ed. Addison Wesley
- JDBC DB access with JAVA. Hamilton, Cattell y Fisher
Ed. Addison Wesley
- Manual de JAVA. Patrick Naughton
Ed. McGraw-Hill
DIRECCIONES EN INTERNET
http://www.java.sun.com : Direccin donde Sun mantiene informacin sobre
Java.
http://www.javasoft.com : Direccin de la divisin comercial de Sun dedicada
al desarrollo de JAVA.
http://www.developer.com/directories/pages/dir.java.html : Directorio con
utilidades JAVA.
http://www.jars.com/ : Directorio con utilidades JAVA.
http://ftp.sunet.se/no_sugar/index.htm : Utilidades diversas.
comp.lang.java.programmer
comp.lang.java
comp.lang.java.tech