?? java16.htm
字號:
<HTML>
<HEAD>
<TITLE>Java desde Cero</TITLE>
<META NAME="GENERATOR" CONTENT="Internet Assistant for Microsoft Word 2.0z">
</HEAD>
<BODY background=/iconos/1.gif TEXT=000000 LINK=FF0000 VLINK=A62A2A>
<H1>Multimedia!<BR>
</H1>
<P>
Java permite cargar y visualizar archivos <FONT FACE="Arial">GIF</FONT>
o <FONT FACE="Arial">JPEG</FONT> de imagen y <FONT FACE="Arial">AU</FONT>
de audio (solamente en mono, 8 bits, 8000Hz de muestreo).
<P>
Para el caso del sonido, un archivo de audio se carga mediante
un objeto de la clase <FONT FACE="Arial">AudioClip</FONT>, mediante
el método <FONT FACE="Arial">getAudioClip(URL, archivo)</FONT>,
se ejecuta con los métodos <FONT FACE="Arial">play()</FONT>
o <FONT FACE="Arial">loop()</FONT> y se detiene con <FONT FACE="Arial">stop()</FONT>.
<P>
Noten esto! Si bien dijimos que un applet no puede acceder al
disco de la máquina cliente, SI puede leer archivos del
server desde donde se cargó. Por lo tanto, pasándole
el URL de la máquina desde donde se cargó el applet,
podemos leer cualquier tipo de archivo a través de la red.
<P>
La forma más segura de indicar dicho URL es mediante el
método <FONT FACE="Arial">getDocumentBase()</FONT>, que
nos da el URL adecuado.
<P>
Por ejemplo, puedo cargar y reproducir audio con sólo dos
líneas:
<PRE>
<FONT SIZE=2>........
AudioClip sonido = getAudioClip( getDocumentBase(), "sonido.au" );
sonido.play();
.........<BR>
</FONT>
</PRE>
<P>
Por otra parte, una foto puede cargarse mediante un objeto de
clase <FONT FACE="Arial">Image</FONT> mediante el método
<FONT FACE="Arial">getImage(URL, archivo)</FONT>. Luego la mostramos
en un objeto <FONT FACE="Arial">Graphics</FONT> correspondiente
al applet (o al área de dibujo) mediante <FONT FACE="Arial">drawImage(imagen,
x, y, observador)</FONT>. Observador es un objeto que implementa
la interface ImageObserver; los applets, por descender de Component
(que implementa dicha interface) también la implementan.
Típicamente, la imagen se visualiza en el método
paint(...) del applet:
<PRE>
<FONT SIZE=2>.............
algunMetodo(...) {
..........
Image imagen = getImage(getDocumentBase(), "imagen.gif");
..........
}
...........
public void paint(Graphics g) {
g.drawImage(imagen, xOffset, yOffset, this); // "this" representa al applet
}
...............<BR>
</FONT>
</PRE>
<P>
El problema con las imágenes es asegurarse que fue cargada
antes de mostrarla. Para eso se utiliza un <FONT FACE="Arial">MediaTracker</FONT>
(también debería servir para los archivos de audio,
pero en esta versión aún no está implementado).
<P>
Mediante <FONT FACE="Arial">addImage( imagen, grupo)</FONT> se
agrega una imagen a la lista del <FONT FACE="Arial">MediaTracker</FONT>,
y hay métodos para esperar que sea cargada (como <FONT FACE="Arial">waitForAll()</FONT>
o <FONT FACE="Arial">waitForID(grupo)</FONT>), para verificar
que se haya cargado correctamente (como <FONT FACE="Arial">checkAll()</FONT>,
<FONT FACE="Arial">checkID(grupo)</FONT>, <FONT FACE="Arial">isErrorAny()</FONT>...),
etcétera.
<P>
El siguiente applet utiliza estos conceptos para cargar una imagen
y un archivo de audio y mostrarlos:<BR>
<PRE>
<FONT SIZE=2>// Ejemplo24.java
import java.awt.*;
import java.applet.*;
public class Ejemplo24 extends Applet {
MediaTracker supervisor;
String archImagen, archAudio;
Image imagen;
AudioClip audio;
Label titulo;
Panel cuadro;
public void init() {
supervisor = new MediaTracker(this);
archImagen = "javacero.gif";
archAudio = "tada.au";
// carga imagen
imagen = getImage(getDocumentBase(), archImagen);
supervisor.addImage(imagen,0);
try {
supervisor.waitForID(0); // espero que se cargue
}
catch (InterruptedException e) {
System.out.println("Error cargando imagen!");
}
showStatus("Imagen cargada");
// carga sonido
audio = getAudioClip(getDocumentBase(), archAudio);
// arma layout
setLayout(new BorderLayout());
titulo = new Label(archImagen);
setFont(new Font("helvetica", Font.BOLD, 18));
add("South", titulo);
}
public void start() {
repaint();
audio.play();
}
public void paint(Graphics g) {
if (supervisor.isErrorAny()) {
g.setColor(Color.black);
g.fillRect(0, 0, size().width, size().height);
return;
}
g.drawImage(imagen, 0, 0, this);
}
}
</FONT>
</PRE>
<P>
Para visualizarlo, como siempre, creamos un HTML:<BR>
<PRE>
<FONT SIZE=2><HTML>
<HEAD>
<TITLE>Ejemplo 24 - Ejemplo Multimedia</TITLE>
</HEAD>
<BODY>
<applet code="Ejemplo24.class" width=150 height=200>
</applet>
</BODY>
</HTML><BR>
<BR>
</FONT>
</PRE>
<H2>Parametrizando un applet</H2>
<P>
Vamos a aprovechar este ejemplo, modificándolo un poco
para indicarle desde el HTML qué archivos debe cargar,
mediante parámetros. Nuestro HTML modificado será:
<BR>
<PRE>
<FONT SIZE=2><HTML>
<HEAD>
<TITLE>Ejemplo 24 - Multimedia</TITLE>
</HEAD>
<BODY>
<applet code="Ejemplo24.class" width=150 height=200>
<param name="imagen" value="javacero.gif">
<param name="sonido" value="tada.au">
</applet>
</BODY>
</HTML><BR>
</FONT>
</PRE>
<P>
Para leer estos parámetros desde el applet, usamos el método
<FONT FACE="Arial">getParameter(nombreParámetro)</FONT>,
así que podemos modificar nuestro applet simplemente modificando
un par de líneas:<BR>
<PRE>
<FONT SIZE=2> archImagen = getParameter("imagen");
archAudio = getParameter("sonido");<BR>
</FONT>
</PRE>
<P>
Voilá! Pueden probar de cargar este applet en http://www.amarillas.com/rock/java/Ejemplo24.htm.
<P>
De esta manera podemos pasar cualquier valor como parámetro
para un applet, haciéndolo más flexible.
<P>
Y esto es todo por hoy!<BR>
<P>
Con esto hemos visto una gran parte de lo que es Java. No hemos
profundizado demasiado en cada punto, pero hemos hecho ejemplos
que funcionan para ilustrar cada cosa.
<P>
Sin embargo, hemos dejado un punto importante y muy fuerte de
Java, que es el de las comunicaciones entre aplicaciones y, especialmente,
el uso de sockets y la programación de aplicaciones cliente-servidor.
En esto nos centraremos en el próximo capítulo.
<BR>
<BR>
<BR>
<BR>
<BR>
<P>
Jorge Bourdette
<P>
<A HREF="mailto:jpb@amarillas.com" >jpb@amarillas.com</A><BR>
</BODY>
</HTML>
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -