universidad nacional del santa facultad de ingenieria eap ingenieria

Anuncio
UNIVERSIDAD NACIONAL DEL SANTA
FACULTAD DE INGENIERIA
E.A.P INGENIERIA DE SISTEMAS E INFORMATICA
MANUAL DE PROGRAMACION VISUAL CON JAVA
PARTE - 3
Ing. Mirko Manrique Ronceros
Primera Edición
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Programación Visual con Java
INTERFASES MULTIMEDIA Y MANEJO DE PAQUETES
Uso de paquetes
En Java, es posible agrupar varias clases en una estructura llamada paquete. Un
paquete no es más que un conjunto de clases, generalmente relacionadas entre sí de
alguna manera. Es habitual diseñar una aplicación distribuyendo su funcionalidad
entre varios paquetes, cuyas clases se comunican entre sí a través de interfaces bien
definidas.
El uso de paquetes aporta varias ventajas frente a la programación sin paquetes. En
primer lugar, permite encapsular funcionalidad en unidades con un cierto grado de
independencia, ocultando los detalles de implementación. De esta forma se pueden
conseguir diseños (e implementaciones) más limpios y elegantes.
Por otra parte, se potencia la reutilización de las clases desarrolladas. Es posible
definir interfaces de uso de cada paquete, para que otros paquetes o aplicaciones
puedan utilizar la funcionalidad implementada. Además, el uso de paquetes permite la
reutilización de los nombres de las clases, ya que el espacio de nombres de un
paquete es independiente del de otros paquetes. El lenguage Java impone la
restricción de que una clase debe tener un nombre único, dentro del paquete al cual
pertenece. Sin embargo, es posible que dos clases tengan el mismo nombre, siempre
y cuando pertenezcan a paquetes distintos.
Para incluir una clase dentro de un paquete, únicamente hay que utilizar una
sentencia package al principio del fichero fuente.
Por ejemplo:
package prueba;
public class Prueba
{
...
}
o con subpaquetes:
package prueba.prueba2;
public class Prueba
Ing. Mirko Manrique Ronceros
Página
3
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Programación Visual con Java
{
...
}
El nombre completo de la clase (fully qualified name) está compuesto por el nombre
del paquete al cual pertenece la clase además del nombre de la propia clase.
Los nombres completos de las clases del ejemplo anterior son prueba.Prueba y
prueba.prueba2.Prueba.
Dado que prueba y prueba.prueba2 son paquetes distintos (aunque prueba.prueba2
sea un subpaquete de prueba), no hay colisión de nombres entre prueba.Prueba y
prueba.prueba2.Prueba. Sin embargo, aunque el compilador permita usar el mismo
nombre de esta forma, no es una práctica aconsejable porque el código tiende a ser
confuso y propenso a errores.
En cuanto al nombre de los paquetes, Sun propuso en su momento un convenio para
facilitar el uso de paquetes de terceros. Este convenio no es en absoluto obligatorio,
aunque sí es aconsejable seguir alguno, o bien éste o bien otro, para mantener
mínimamente organizadas nuestras clases.
Para usar clases de otros paquetes, no hay más que utilizar sentencias import, antes
de la declaración de la clase.
Por ejemplo:
import java.lang.*;
import java.util.Vector;
import java.rmi.server.*;
Con el primer import le estamos indicando al compilador que vamos a importar todas
las clases del subpaquete java.lang. (Este paquete contiene clases esenciales en la
mayoría de aplicaciones Java, por lo que el compilador lo importa automáticamente,
aunque no incluyamos una línea como la de arriba). Con el segundo import, indicamos
que sólo queremos importar la clase Vector del subpaquete java.util. Con el tercer
import, importamos todas las clases del paquete java.rmi.server.
Es posible utilizar una clase sin que esté incluída en un import, siempre y cuando
utilicemos su nombre completo.
Por ejemplo:
java.util.Vector vector = new java.util.Vector(100, 10);
Ing. Mirko Manrique Ronceros
Página
4
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Programación Visual con Java
La ventaja de utilizar una sentencia import es que la anterior línea se puede reducir a
Vector vector = new Vector(100, 10);
Java Media Framework
The Java Media Framework (JMF) is a recent API for Java dealing with real-time multimedia presentation and effects processing. JMF handles time-based media, media
which changes with respect to time. Examples of this are video from a television
source, audio from a raw-audio format file and animations. The beta JMF 2.0 specification will be used for this report, as they currently reflect the features that will appear
in the final version.El Java Media Framework (JMF) es una API para Java últimos se
ocupan de multimedia en tiempo real la presentación y procesamiento de efectos. JMF
se ocupa de los medios de comunicación basados en el tiempo, los medios de
comunicación que cambia con respecto al tiempo. Ejemplos de esto son el vídeo de
una fuente de televisión, audio de formato de archivos de audio y animaciones.
Java Media Framework proporciona a los applets y aplicaciones Java la capacidad de
reproducir capturar y transmitir/recibir en tiempo real video y otros contendios
multimedia. Provee de una serie de codificadores y decodificadores para los formatos
multimedia más relevantes siendo capaz además, de realizar transcodificación entre
dichos formatos.
Etapas
Ing. Mirko Manrique Ronceros
Página
5
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Programación Visual con Java
JMF La arquitectura está organizada en tres etapas:
Durante la etapa de entrada, se lee los datos de una fuente y se aprueban en buffers
a la etapa de procesamiento. La etapa de entrada puede consistir en la lectura de
datos desde un dispositivo de captura (como una cámara web o tarjeta de captura de
TV), un archivo en el disco o arroyo De la red.
La etapa de procesamiento consiste en una serie de codecs y efectos diseñados para
modificar el flujo de datos a uno adecuado para la producción. Estos codecs podrán
ejercer funciones como comprimir o descomprimir el audio a un formato diferente, la
adición de una marca de agua de algún tipo, la limpieza de ruido o aplicar un efecto
de la corriente (como eco a los de audio).
Una vez que la etapa de procesamiento se ha aplicado sus transformaciones a la
corriente, pasa la información a la etapa de salida. La fase de salida puede tomar la
corriente y pasarlo a un archivo en el disco, la producción local a la pantalla de vídeo
o transmitirlo a través de la red .
Por ejemplo, un sistema de JMF puede leer el aporte de una tarjeta de captura de TV
local el sistema de captación de los aportes de una grabadora en la etapa de entrada.
Puede entonces pasar a la fase de transformación, para añadir una marca de agua en
la esquina de cada cuadro y, por último, emisión A través de la Intranet local en la
etapa final.
Ing. Mirko Manrique Ronceros
Página
6
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Programación Visual con Java
Componente de Arquitectura
JMF es construido alrededor de una arquitectura de componentes. El compenents se
organizan en una serie de categorías principales:
•
Medios manipuladores
•
Fuente de los datos
•
Codecs / Efectos
•
Extracción de grasas
•
Mux / Demuxes
Medios Manipuladores
MediaHandlers están registradas para cada tipo de archivo que JMF debe ser capaz de
manejar. Para apoyar nuevos formatos de archivo, un nuevo MediaHandler se pueden
crear.
RenderersExtracción de grasas
Un procesador es similar a un Codec, pero la final está en un lugar diferente al otro
arroyo. VideoRenderer Un salidas los datos finales a la pantalla, sino otro tipo de
procesador podría salida a los diferentes equipos, como por ejemplo una tarjeta de
salida de TV.
Mux/DemuxesMux / Demuxes
Multiplexores y Demultiplexers se utilizan para combinar múltiples arroyos en una sola
corriente o viceversa, respectivamente. Son útiles para crear y leer un paquete de
audio y video para guardarse en el disco como un solo archivo, o se transmite a través
de una red.
Ing. Mirko Manrique Ronceros
Página
7
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Programación Visual con Java
Aplicación multimedia
Presenting Data
Una aplicación multimedia es aquella que produce, reproduce, procesa o maneja uno
o varios contenidos multimedia. A su vez un contenido multimedia es aquel que está
compuesto de diversos “medios”, como pueden ser audio, video, texto, etc. Decimos
que un contenido multimedia está basado en el tiempo en tanto que cada uno de sus
medios cambia significativamente con él. Esta característica hace que un contenido
multimedia requiera ser proporcionado y procesado en unas condiciones temporales
estrictas. Por ejemplo cuando se reproduce un video, si los datos multimedia no
pueden ser proporcionados lo suficientemente rápido pueden producirse pausas y
retardos en la reproducción; por otro lado si los datos no pueden ser recibidos y
procesados lo suficientemente rápido el video se reproduce a saltos en tanto que se
desechan cuadros como medio para mantener la tasa de reproducción.
Cada uno de los medios de los que se compone un contenido multimedia se denomina
pista . Por ejemplo un contenido multimedia correspondiente a una videoconferencia
puede contener una pista de audio y otra de video. Se dice que las pistas que
componen un contenido multimedia están multiplexadas, al proceso de extracción de
las distintas pistas que componen un contenido multimedia se le denomina
demultiplexación. Existen distintos tipos de pistas en función del tipo de datos que
contienen, como audio y/o video; a su vez cada pista posee un formato que define
como están estructurados los datos que forman parte de ella. Los distintos formatos
se distinguen en función de:
•
La calidad que proporcionan
•
Su exigencia de recursos de CPU para ser procesados.
•
La cantidad de ancho de banda requerida para su transmisión.
En Java Media Framework los datos multimedia pueden proceder de diversas
fuentes, como archivos locales o remotos y video y audio en tiempo real o bajo
demanda.
Una fuente de datos multimedia se modela mediante un objeto DataSource. Podemos
crear una DataSource directamente a través de una URL (Universal Resource Locator)
o bien mediante un objeto de tipo MediaLocator.
Vamos a proceder a ejecutar un audio, para ello necesitamos un arhivo de formato
mp3, como por ejemplo mana.mp3. Para lograr esto sigamos los siguientes pasos:
Ing. Mirko Manrique Ronceros
Página
8
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Programación Visual con Java
1. Instalamos el Java Media Framework, que lo encontramos en la siguiente
dirección:
http://java.sun.com/products/java-media/jmf/2.1.1/download.html
En ésta dirección tienes la opción de descargar el instalador de Java Media
Framework indicando la plataforma que pueder ser windows, linux, etc.
Aproximadamente en la plataforma Windows es de 4.8Mb el tamaño del
instalador.
2. Vamos
al
entorno
de
NetBeans
y
creamos
un
proyecto
llamado
PruebaMultimedia.
La localización del proyecto se encuentra en la unidad D:\
Luego dar click en el botón de comando Finish (en caso de que la versión de
NetBeans es en castellano entonces dar click en el botón de comando
Terminar)
3. Procedemos a crear un archivo class denominado Applet_Reproductor.
Ubicamos el puntero del mouse sobre el paquete pruebamultimedia y al dar
click botón derecho del mouse y se muestra un menú flotante donde
seleccionamos Java Class.
Ing. Mirko Manrique Ronceros
Página
9
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Programación Visual con Java
4. Indicamos como nombre de clase Applet_Reproductor.
Ing. Mirko Manrique Ronceros
Página 10
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Programación Visual con Java
Luego dar click en el botón de comando Finish (en caso de que la versión de
NetBeans es en castellano entonces dar click en el botón de comando
Terminar)
5. Estando en el entorno de NetBeans borramos lo que observamos seleccionado:
6. En el lugar donde se borró se colocará el siguiente código de programación:
import java.awt.*;
import java.applet.*;
import java.lang.String;
import java.net.URL;
import java.net.MalformedURLException;
import java.io.IOException;
import javax.media.*;
public class Applet_Reproductor extends Applet implements ControllerListener{
String MEDIAFILE = "mana.mp3";
//Reproductor
Player player=null;
Ing. Mirko Manrique Ronceros
Página 11
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Programación Visual con Java
//Componente de reproducción del vídeo
Component visualComponent=null;
//Controles
Component controlComponent=null;
//Barra de progreso
Component progressBar=null;
/**
*Permite seleccionar el archivo a reproducir y crea el reproductor
*/
public void init() {
setLayout(new BorderLayout());
//URL base del documento HTML
URL codeBase = getDocumentBase();
URL url = null;
try{
//Se crea URL para el archivo
if ((url = new URL(codeBase,MEDIAFILE)) == null)
System.err.println("No se puede construir URL para el archivo");
//Se crea el reproductor
player=Manager.createPlayer(url);
player.addControllerListener(this);
}
catch (MalformedURLException e){
System.err.println("URL no valida");
}
catch (IOException e){
System.err.println("Excepcion de Lectura/Escritura");
}
catch (NoPlayerException e){
System.err.println("No existe reproductor");
}
}
/**
Ing. Mirko Manrique Ronceros
Página 12
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Programación Visual con Java
*Comienza la reproducción del archivo
*/
public void start(){
if (player != null) player.start();
}
/**
*Detiene la reproducción y libera recursos
*/
public void stop(){
if (player != null){
player.stop();
player.deallocate();
}
}
/**
*De acuerdo al interfaz ControllerListener. Llamada cuando ocurre algun
*evento en la reproduccion
*/
public synchronized void controllerUpdate(ControllerEvent event){
//Comprobamos que el reproductor está "vivo"
if (player == null) return;
//Qué evento se ha producido?
if (event instanceof RealizeCompleteEvent){
//Se añade el componente de visualización del reproductor y el de control
if((visualComponent = player.getVisualComponent()) != null)
add("Center",visualComponent);
if ((controlComponent = player.getControlPanelComponent()) != null)
add("South",controlComponent);
validate();
}
else if (event instanceof EndOfMediaEvent){
player.setMediaTime(new Time(0));
player.start();
Ing. Mirko Manrique Ronceros
Página 13
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Programación Visual con Java
}
else if (event instanceof ControllerErrorEvent){
player = null;
System.err.println(((ControllerErrorEvent)event).getMessage());
}
}
public void paint(Graphics g) {
}
}
7. Compilamos el archivo.
8. Luego procedemos a ejecutarlo.
Ing. Mirko Manrique Ronceros
Página 14
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Programación Visual con Java
Se muestra errores de ejecución debido a que no encuentra el archivo
mana.mp3 dentro del proyecto PruebaMultimedia.
9. Debemos tener en cuenta que el archivo mana.mp3 debe quedar ubicado
dentro de la carpeta build del proyecto PruebaMultimedia para que la aplicación
se ejecute normalmente.
10.
Procedemos nuevamente a ejecutarlo y se observa la siguiente ventana e
inmediatamente se ejecuta el audio.
Ing. Mirko Manrique Ronceros
Página 15
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Programación Visual con Java
MANEJO DE LOS SWING WINDOWS
Objeto JDialog y JFrame
JDialog es un componente que sirve para presentar diálogos que son ventanas
auxiliares que se presentan cuando se registra un evento dentro de un programa,
sirven para prevención o en su defecto se puede utilizar para dar información sobre
algo, los diálogos que JDialog muestra pueden ser modales o no modales, esto quiere
decir que si son modales la ventana del diálogo bloquea las entradas a otras ventanas,
este tipo de diálogos se pueden hacer también con JoptionPane.
Todos los diálogos dependen de un frame, las modificaciones que se le hagan al frame
afectaran a el diálogo, en caso de que el frame sea cerrado, minizado o maximizado,
sus diálogos tendrán el mismo comportamiento.
Un objeto JFrame es una ventana más utilizado para diseñar formularios. Vamos a
proceder hacer comparaciones con el objeto JDialog:
•
Si instanciamos un JFrame en la barra de abajo de windows (creo que se llama
"barra de herramientas") nos aparece un nuevo "botoncito" correspondiente a
nuestra aplicación. Si instanciamos un JDialog, no aparece nada.
•
Un JFrame tiene un método setIconImage() para cambiar el icono por
defecto de la taza de café. JDialog no tiene este método.
•
Un JDialog admite otra ventana (JFrame o JDialog) como padre en el
constructor. JFrame no admite padres.
•
Un JDialog puede ser modal, un JFrame no.
Todo esto nos indica lo siguiente:
•
Un JFrame debe ser la ventana principal de nuestra aplicación y sólo debe
haber una.
•
Las ventanas secundarias de nuestra aplicación deben ser JDialog.
Los motivos de esto son los siguientes:
Al mostrar el JFrame un botón en la barra de herramientas de windows y tener
método para cambiar el icono, es la ventana ideal como ventana principal de nuestra
Ing. Mirko Manrique Ronceros
Página 16
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Programación Visual con Java
aplicación y sólo debe haber una. Nos permite cambiar el icono y sólo debe haber un
botón en la barra de herramientas de windows para nuestra aplicación.
Si usamos un JDialog como ventana principal, no tenemos botón en la barra de
herramientas y no hay forma fácil de cambiarle el icono.
Los JDialog son ideales para ventanas secundarias porque admiten una ventana
padre. Si la VentanaA es padre del JDialogB, entonces el JDialogB siempre estará por
delante de VentanaA, nunca quedará por detrás. Lo ideal es que hagamos nuestras
ventanas secundarias como JDialog cuyo padre sea el JFrame principal. De esta
forma los JDialog siempre serán visibles por encima del JFrame y no se irán detrás
ni quedarán ocultos por el JFrame.
Otra ventaja de admitir un padre es que heredan el icono de él. Si hemos cambiado el
icono del JFrame con el método setIconImage(), entonces todos los JDialog que
hagamos como hijos de este JFrame heredarán el icono. Todas las ventanas de
nuestra aplicación tendrán el mismo icono en lugar de la taza de café por defecto.
Un JDialog puede ser modal, pasándole un true en el constructor en el sitio
adecuado o haciéndolo modal con el método setModal(). Si hacemos un JDialog
modal, todas las demás ventanas se deshabilitarán hasta que el usuario de nuestro
programa cierre el JDialog. Esto está estupendo para pedir un dato al usuario y evitar
que toque otras cosas hasta que haya introducido el dato. Sin embargo, tiene un
peligro.
Supongamos un JDialog que lo hacemos modal para pedir unos datos al usuario. Este
JDialog tiene un botón de "Aceptar" para que el usuario lo pulse cuando haya
terminado de introducir los datos. Supongamos que en el código de ese botón
"Aceptar" comprobamos los datos que ha metido el usuario y vemos que son
incorrectos. Le sacamos un segundo JDialog modal para indicarle el error y no
cerramos el primero.
¿Quién debe ser el padre de ese segundo JDialog modal?. Si hacemos que el padre
sea el JFrame tendremos dos JDialog modales hijos del JFrame, es decir, dos
JDialog modales hermanos. Esto nos dará problemas, como que ambas ventanas
queden deshabilitadas, que al cerrar una de ellas se nos oculten todas, que parte de la
ventana quede deshabilitada mientras que otra parte no, etc.
Ing. Mirko Manrique Ronceros
Página 17
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Programación Visual con Java
Entonces, ¿cómo hacemos?. Para que java no haga cosas raras, el padre del segundo
JDialog modal debe ser el primer JDialog modal. De esta forma, el segundo tiene
"prioridad" sobre el primero. Todo queda deshabilitado excepto este segundo JDialog.
Cuando lo cerremos, será el primero el que mande. Si queremos varias ventanas
modales simultáneamente en pantalla, cada ventana que se muestre debe ser padre
de la siguiente, de forma que la cadena de ventanas modales sean padre, hijo, nieto,
etc. Tener dos ventanas modales simultaneas que sean hermanas o primas o cualquier
otra relación que no sea directa, nos dará problemas
Aplicación 1
Vamos a proceder a crear un formulario donde se hará uso del objeto JDialog para
mostrar un mensaje dentro de un objeto de control JtextArea.
Solución:
1. Procedemos a crear un proyecto denominado SwingWindows.
Ing. Mirko Manrique Ronceros
Página 18
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Programación Visual con Java
Luego dar click en el botón de comando Finish (en caso de que la versión de
NetBeans es en castellano entonces dar click en el botón de comando
Terminar)
2. Estando en el entorno de NetBeans, seleccionamos el paquete swingwindows
y dando click botón derecho del mouse, se muestra un menú flotante, donde
seleccionamos Formulario Jframe.
3. A continuación, colocaremos como nombre de formulario frmUsoJDialog.
Ing. Mirko Manrique Ronceros
Página 19
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Programación Visual con Java
4. Procedemos a programar
package swingwindows;
import javax.swing.*;
import java.awt.*;
public class frmUsoJDialog extends javax.swing.JFrame {
/** Creates new form frmUsoJDialog */
public frmUsoJDialog() {
initComponents();
// creamos una variable del tipo JDialog
JDialog dialog;
// creamos una variable de tipo JFrame
JFrame credi;
credi=new JFrame();
dialog = new JDialog(credi, "", true);
dialog.setTitle("Creditos");
JTextArea texto = new JTextArea("Este Programa fue Diseñado por :\n" +
"Martín Salcedo Quiñones\n" + "Como Trabajo del curso de Programación
Visual\n" +"Contiene jFrame y JDialog\n");
Container contentPane = dialog.getContentPane();
contentPane.add(texto, BorderLayout.CENTER);
dialog.setSize(new Dimension(300, 150));
dialog.show();
}
En la línea de programación siguiente:
dialog = new JDialog(credi, "", true);
Podemos notar la parte del String está vacía, esto se debe a que en el
programa vamos a cambiarle el título al JDialog, a medida que necesitemos
presentar uno nuevo, esto con el fin de crear un solo JDialog para las diferentes
ventanas. También vemos que en boolean esta true esto es para especificar que
es un diálogo modal en caso que no lo pondríamos false.
Ing. Mirko Manrique Ronceros
Página 20
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Programación Visual con Java
En la línea de programación siguiente:
dialog.setTitle("Creditos");
El método setTitle es utilizada para cambiarle el título a dialog.
En las líneas de programación siguiente:
JTextArea texto = new JTextArea("Este Programa fue Diseñado por :\n" +
"Martín Salcedo Quiñones\n" + "Como Trabajo del curso de Programación
Visual\n" +"Contiene jFrame y JDialog\n");
Container contentPane = dialog.getContentPane();
Creamos el componente que va dentro, y a continuación se pone el dialog
dentro del contentPane junto con el componente.
En las líneas de programación siguiente:
dialog.setSize(new Dimension(300, 150));
dialog.show();
Por último se dice el tamaño del JDialog y la última línea es para que sea
mostrado.
5. Procedemos a compilar el formulario frmUsoDialog y luego ejecutarlo.
6. Una vez ejecutado se mostrará la ventana:
Ing. Mirko Manrique Ronceros
Página 21
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Programación Visual con Java
Objeto JFileChooser
En Java tenemos varias formas para leer y escribir ficheros de textos, binarios, de
formato xml, etc. La clase JFileChooser permite mostrar una ventana para que el
usuario nevegue por los directorios y elija un archivo.
Para pedir un archivo para abrirlo y leerlo basta hacer dos líneas de programación:
JFileChooser fileChooser = new JfileChooser();
int seleccion = fileChooser.showOpenDialog(areatexto);
Este código abre una ventana para navegar en directorios y eligir un fichero.
Pocremos selecionar el botón de comando Abrir o el botón de comando Cancelar. En
la variable de memoria seleccion se almacenará el valor del botón de comando
seleccionado. Sólo debemos comprobar si es el botón de comando Abrir para pedirle
a JFileChooser qué archivo ha elegido el usuario y empezar a trabajar con él.
If (selección ==JfileChooser.APPROVE_OPTION)
{
File fichero = fileChooser.getSelectedFile();
}
Ing. Mirko Manrique Ronceros
Página 22
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Programación Visual con Java
Si selección vale JFileChooser.APPROVE_OPTION es que el usuario ha pulsado
“Abrir”, así que pedimos el fichero seleccionado con getSelectedFile().
JFileChooser abre una ventana que se mostrará junto a la ventana de nuestro editor.
Nos gustaría que esta ventana de selección de fichero no se vaya detrás y quede
oculta por la ventana del editor. La ventana de elegir fichero debería estar siempre
delante y visible sobre el editor. La forma de conseguir esto es que JFileChooser
sepa cual es esta ventana delante de la cual debe estar siempre. Para saber cual es
esa ventana, basta con pasarle en el parámetro cualquier componente de dicha
ventana. En nuestro ejemplo hemos decidido pasarle el JTextArea de nuestro editor,
pero podíamos pasarle perfectamente el JMenuBar o el JFrame principal.
Para elegir un fichero para salvar, el código es exactamente igual, pero cambia el
método para visualizar el diálogo.
JFileChooser fileChooser = new JFileChooser();
int seleccion = fileChooser.showSaveDialog(areatexto);
Aplicación 2
Vamos a proceder a crear una aplicación donde usaremos el JFrame,JDialog,
JTextArea, y JFileChooser para hacer lectura de un archivo texto seleccionado y
abierto desde un JFileChooser.
Solución:
1. Procedemos a crear un proyecto denominado PruebaJFileChooser.
Luego dar click en el botón de comando Finish (en caso de que la versión de
NetBeans es en castellano entonces dar click en el botón de comando
Terminar).
Ing. Mirko Manrique Ronceros
Página 23
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Programación Visual con Java
2. Todo proyecto creado crea por defecto un archivo main de extensión java.
Haremos uso de este archivo para lo cual colocaremos el siguiente código.
package pruebajfilechooser;
import javax.swing.*;
import java.io.*;
import java.awt.*;
/**
*
* @author Usuario
*/
public class Main {
/** Creates a new instance of Main */
public Main() {
}
/**
* @param args the command line arguments
*/
public static void main(String[] args)throws IOException {
JTextArea area= new JTextArea();
JDialog dialog;
JFrame formulario = new JFrame();
dialog = new JDialog(formulario, "", true);
dialog.setTitle("Mostrar Archivo");
//se instancia la variable fileChooser del tipo JFileChooser
JFileChooser fileChooser = new JFileChooser();
//con el método showOpenDialog() se muestra la ventana para seleccionar el
archivo
int seleccion = fileChooser.showOpenDialog(area);
//si el usuario selecciona el botón de comando Abrir, el if se hace verdadero
if (seleccion==JFileChooser.APPROVE_OPTION)
{
Ing. Mirko Manrique Ronceros
Página 24
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Programación Visual con Java
//la variable fichero contiene el archivo texto seleccionado con el método
getSelectedFile()
File fichero = fileChooser.getSelectedFile();
//la variable reader permite leer linea por linea el archivo a través del
método readLine()
BufferedReader reader = new BufferedReader(new FileReader(fichero));
String linea = reader.readLine();
//con while se lee línea por línea y se pasa a la variable area que es un
JTextArea
while (linea != null)
{
area.append(linea);
area.append(System.getProperty("line.separator"));
linea = reader.readLine();
}
//se cierra el fichero
reader.close();
//se muestra visualmente el contenido de la variable area dentro de un JDialog
Container contentPane = dialog.getContentPane();
contentPane.add(area, BorderLayout.CENTER);
dialog.setSize(new Dimension(500, 600));
dialog.show();
}
}
}
3. Una vez compilado, procedemos a ejecutarlo.
Ing. Mirko Manrique Ronceros
Página 25
Universidad Nacional del Santa
Facultad de Ingeniería
E.A.P. Sistemas e Informática
Programación Visual con Java
4. Observamos la ventana generada por el objeto JfileChooser.
Seleccionamos el archivo texto Grupos para Procedimientos Almacenados ...,
luego damos click en el botón de comando Abrir. A continuación, visualizamos la
siguiente interface:
Ing. Mirko Manrique Ronceros
Página 26
Descargar