Sie sind auf Seite 1von 18

Ejemplo JFileChooser

Nuevamente regreso con un ejemplo prctico sobre


uno de loscomponentes Java Swing.............. el da de hoy
les traigo elJFileChooser, este se encuentra en la categora de
componentes
Complejos,
ya
que
igual
que
el JColorChooser presenta una ventana con funciones ya
definidas y lgica preestablecida....
A diferencia del anterior, aunque ambos nos permiten manipular
ventanas definidas, el JFileChooser encierra un poquito mas de
complejidad, pues en este caso trabajamos con archivos (no se
requiere mucho conocimiento sobre archivos ya que el ejemplo
es muy diciente, sin embargo mas adelante dedicaremos un
espacio a el manejo de Archivos con Java...).

Que Es?
La Clase JFileChooser, nos presenta una ventana de
herramientas, que dependiendo de nuestra lgica, nos permitir
Abrir o Guardar archivos, igual que la JColorChooser, la
ventana es una ventana de Dialogo para navegar por nuestros
directorios...

El Ejemplo.
Este es otro de esos ejemplos bsicos y fciles de entender, en
si el componente que estamos trabajando habla por si solo......
usaremos
una
ventana JFrame con
un JTextArea y
dos JButtons.

La aplicacin nos permitir Abrir o Guardar un archivo de texto


dependiendo del botn que presionemos, veamos los mtodos
que nos permiten est procedimiento (Se crea el objeto en cada
mtodo por motivos del ejemplo, pero lo ideal es que el objeto
sea
global
para
trabajar
con
el
mismo...).

Abrir Archivos.
Si definimos Abrir, entonces se cargar la ventana con lo
necesario para navegar por nuestros directorios y seleccionar el
archivo que queremos abrir (el trabajo con tipos de archivos lo
veremos en una prxima entrada)

La Clase JFileChooser nos permite cargar la ventana anterior


usando
su
mtodo showOpenDialog(this),
cuando
seleccionamos el archivo deseado, lo agregamos a un objeto de
tipo File por
medio
del
mtodo getSelectedFile(),
posteriormente recorremos el archivo y lo almacenamos en un
String...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

private String abrirArchivo() {


String aux="";
texto="";
try
{
/**llamamos el metodo que permite cargar la ventana*/
JFileChooser file=new JFileChooser();
file.showOpenDialog(this);
/**abrimos el archivo seleccionado*/
File abre=file.getSelectedFile();

/**recorremos el archivo, lo leemos para plasmarlo


*en el area de texto*/
if(abre!=null)
{
FileReader archivos=new FileReader(abre);
BufferedReader lee=new BufferedReader(archivos);
while((aux=lee.readLine())!=null)
{
texto+= aux+ "\n";
}
lee.close();
}
}
catch(IOException ex)
{
JOptionPane.showMessageDialog(null,ex+"" +
"\nNo se ha encontrado el archivo",
"ADVERTENCIA!!!",JOptionPane.WARNING_MESSAGE);
}
return texto;//El texto se almacena en el JTextArea

Por ultimo retornamos la cadena con el contenido de nuestro


archivo y luego se almacena en el rea de texto usando su
propiedad setText(texto), en caso de cualquier excepcin,
usamos
los
bloques try
catch para
manejarlo....

Guardar

Archivo.

Si definimos Guardar, igual que el anterior, se cargar una

ventana para navegar por nuestros directorios y definir la ruta


donde ser almacenado.

De la misma forma, la lgica para navegar por nuestro PC biene


definida gracias al metodo showSaveDialog(this) de la
clase JFileChooser, que nos permite cargar la ventana de
dialogo y encontrar la ruta donde almacenaremos el archivo.....
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

private void guardarArchivo() {


try
{
String nombre="";
JFileChooser file=new JFileChooser();
file.showSaveDialog(this);
File guarda =file.getSelectedFile();
if(guarda !=null)
{
/*guardamos el archivo y le damos el formato directamente,
* si queremos que se guarde en formato doc lo definimos como .doc*/
FileWriter save=new FileWriter(guarda+".txt");
save.write(areaDeTexto.getText());
save.close();
JOptionPane.showMessageDialog(null,
"El archivo se a guardado Exitosamente",
"Informacin",JOptionPane.INFORMATION_MESSAGE);
}
}

catch(IOException ex)
{
JOptionPane.showMessageDialog(null,
"Su archivo no se ha guardado",
"Advertencia",JOptionPane.WARNING_MESSAGE);
}

}
}

Internamente le definimos la extensin que vamos a manejar y


tan solo es cuestin de dar un nombre y listo, el sistema guarda
el contenido del rea de texto en un objeto de
tipo FileWriter y posteriormente
el archivo en la ruta
especificada....
Y
Listo!!!!
Llegamos al final del ejemplo y al final de esta entrada, vemos
que los mtodos anteriores engloban todo lo necesario para
utilizar la clase JFileChooser, y aunque no sepamos de
archivos, es una muy buena oportunidad para aprender...

Descarga!!!
Les dejo el enlace de descarga por si lo quieren
revisar ;)......si usasNetBeans te interesar esta entrada con
un vdeo paso a paso de como abrirlo en el... recuerden que
es gratis, y nada cuesta opinar, compartir o agradecer :)
Tambin te podra Interesar.

Ejemplo JTree.

Ejemplo JColorChooser

Ejemplo Jtable

Control de Versiones con Tortoise.

Eclipse Vs Netbeans?

Componentes de Texto Java Swing

Mens Con Java Swing.

Clases en Java

Clases Abstractas

Hay algo que quieras anexar o comentar sobre esta


entrada? no dudes en hacerlo.....y si te gust...... te
invito
a
compartir
y Suscribirte
ingresando
al botn "Participar en este sitio" para darte cuenta de
mas entradas como esta ;)

ArrayList
El tema que veremos ahora son los ArrayList, esto es bastante importante para cuando
queramos manejar grandes cantidades de datos, el punto sera cuando podramos querer jalar
informacin en modo de registros de una base de datoso un archivo xls u otros. Claro que
ahora no entraremos en esos temas de como extraer datos de archivos externos, si no
aprenderemos a manejar algunas acciones bsicas de un ArrayList as como agregar datos,
recorrer en la coleccin de datos que tenga y leerlos.

La ventaja de un Objeto ArrayList es que permite almacenar informacin en ella de forma


dinmica, es decir, su ndice de entrada se va extendiendo segn se agregue ms informacin
en ella, esta sera la diferencia tan grande que existe entre este objeto y un simple array de
timpo entero, flotante, cadena u otros.

En un futuro podremos ver que este componente incluso puede almacenar en si algunos datos
que pueden ser encapsuladas dentro de una clase la cual puede tener muchos tipos de datos
diferentes en su estructura.

Entonces dicho esto, iniciemos con el ejemplo

aplicativo que siempre lo hacemos.

Preparamos el formulario
Creamos el proyecto y agregamos un formulario y lo diseamos ms o menos de la siguiente
forma.

Como se puede ver los componentes slo es un JTextField o campo de texto, dos botones y
por otro lado si sera un componentes que an no mencionamos en el blog el cual es un JList
donde se ven los textos de item. Este componentes se encuentra en la paleta de componentes.

Ahora lo que tenemos que hacer es darles los nombres que Uds. deseen a los componentes
para un mejor manejo y en el caso del JList quitemos esos items que aparece. Para dicho
propsito seleccionamos en JList y luego vamos al panel de propiedades y dentro de model
borramos todos los items que aparecen.

El formulario debera quedar de la siguiente forma.

Empezamos con el Cdigo


Primero creamos una variable global la cual ser nuestro ArrayList. Para hacer esto vamos al
cdigo del formulario en la pestaa "source" o "cdigo" y luego agregamos la variable encima
del constructor de la clase, con lo que debera quedar de la siguiente manera.

package Paquete1;
import java.util.ArrayList;
/** * * @author kaaf */

public class Principal extends javax.swing.JFrame {

ArrayList miArrayList=new ArrayList<>();

/** * Creates new form Principal */

public Principal()
{
initComponents();
}
//.
//.
//. El cdigo sigue.

Con esto tendramos esta variable a la cual se podr acceder desde cualquier mtodo de la
case sin perder los datos que tiene este. Claro eso ser mientras no borremos y asignemos
una nuevas instancia al mismo.

Codigo en el evento ActionPerformed del botn


"Agregar al ArrayList"

if(!txtNombre.getText().trim().isEmpty())
{
miArrayList.add(txtNombre.getText());
txtNombre.setText("");
}
else
{
JOptionPane.showMessageDialog(this, "Ingrese un texto");
}

Como se puede ver es muy sencillo primero verificamos si existe texto en el campo JTextField
en este caso con el nombre de "txtNombre" y en caso exista agregamos ese texto a nuestro
ArrayList y luego limpiamos en campo de texto, si no hay texto pasamos al caso contrario
"else".

Cada vez que demos click en el botn "Agregar al ArrayList" se ir creando un nuevo ndice con
el contenido que se tiene en el campo txtNombre y as tendremos estos datos mientras la clase
no finalice (En este caso mientras no se finalice el programa).

Cdigo en el evento ActionPerformed del botn


"Leer datos del ArrayList"
DefaultListModel modeloDelJList = new DefaultListModel();
for(String datosDeMiArray : miArrayList)
{
modeloDelJList.addElement(datosDeMiArray);
}
jListDatos.setModel(modeloDelJList);
Lo que se hace es. En la primera lnea creamos un nuevo modelo (Como un molde) para el
JList que tenemos en elformulario, luego en el bucle lo que hacemos es recorrer el ArrayList
que tenemos en este caso "miArrayList" hasta el ltimo registro que tiene y vamos
almacenndolo en cada vuelta a nuestro modelo (Si no entiende ste bucle "for" puede ver la
forma de uso aqu) y en la ltima lnea lo que se hace es asignar ese modelo que creamos a

nuestro JList delformulario y de esta forma se cargarn los datos que estn en el ArrayList en
nuestro componente JList.

Como pudimos ver el manejo de ArrayList es muy sencillo, ahora con el tiempo veremos la
forma de usarlo en programacin orientada a objetos y como manejarlo con clases
encapsuladas.

Ahora si quisiramos borrar algn registro de nuestro ArrayList slo se debera recorrer en sus
datos con el bucle "for" como lo vimos o el bucle que sea de su preferencia y dentro poner una
condicin que compare el dato que est buscando y en caso lo encuentre agregar esta lnea en
la condicin "miArrayList.remove(indice);".

Imaginemos que en los datos:

-Kevin Arnold
-KAAF
-Este es otro Registro

Quisiramos borrar el del medio. Tendramos que recorrer en el bucle hasta llegar a este
encontrar cual es el ndice mediante un contador y borrarlo, el cdigo para borrar el segundo
registro sera ms o menos de la siguiente forma.

int contador=0;
for(String datosDeMiArray : miArrayList)
{

if("KAAF".equals(datosDeMiArray))
{
miArrayList.remove(contador);
break;
}
contador++;
}
Y as se borrara el registro que deseemos de nuestro ArrayList

Categoras destacadas

Artculo
Inicio Artculo Internet PHP

84
votar!

Cmo hacer encuestas con PHP y MySQL

1
. Crear
2
. Dar
de
3
. Votar
4 . Mostrar el grfico de barras

la
alta

base
una
los

de
nueva

datos
encuesta
resultados

Crear la base de datos


Vamos a crear encuestas para nuestro sitio web. Para ello crearemos dos sencillas tablas en
MySQL, una para controlar las encuestas propiamente dichas y otra para las respuestas de
cada encuesta.
Tabla de encuestas:

CREATE TABLE encuestas


(id INT not null AUTO_INCREMENT,
titulo VARCHAR (50) not null ,
fecha INT (10) not null ,
PRIMARY KEY (id));

Id: Es el identificador de la encuesta. Se incrementa automticamente y sirve de


clave primaria.
Titulo: Tendremos 50 caracteres para asignar un titulo que contendr la pregunta en
s.
Fecha: Servir tanto para conocer la fecha de la encuesta, como para que slo se
muestre la ltima.

Tabla de respuestas:

CREATE TABLE respuestas

(id INT not null AUTO_INCREMENT,


texto VARCHAR (50) not null ,
votos INT (5) not null ,
idenc INT not null,
PRIMARY KEY (id));

Id: Identificador de la respuesta. Se incrementa automticamente y sirve de clave


primaria.
Texto: Es el texto que describir la respuesta
Votos: El total de votos acumulados.
Idenc: Referencia al Id de la encuesta a la que est asociado.

Dar de alta una nueva encuesta


La forma de crear una nueva encuesta ser sencilla; Un formulario nos pregunta el texto de
la pregunta y el nmero total de respuestas. Damos a "Enviar". Acto seguido tendremos un
campo de texto por cada respuesta, donde asignaremos el texto de la respuesta. Volvemos a
dar a "Aceptar" y si todo ha ido bien, nuestra encuesta ya estar dada de alta en nuestra
base de datos.
Primer formulario:
enc1.php

<form name="form1" method="post" action="enc2.php">


<p>Titulo de la encuesta:
<input type="text" name="titulo">
</p>
<p>N&uacute;mero de respuestas:
<input type="text" name="respuestas">
</p>
<p>
<input type="submit" name="Submit" value="Enviar">
</p>
</form>

Segundo formulario, dentro de enc2.php. Bsicamente lo nico que hacemos en este


formulario es poner tantos campos de texto como posibles respuestas haya.
enc2.php

<form action="enc3.php" method="post">


<table border="0">
<?php
for($i=1;$i<=$respuestas;$i++){
?>
<tr>
<td>respuesta <?php echo $i; ?></td>
<td><input name="p<?php echo $i;?>" type="text" size="50"
maxlength="50"></td>
</tr>
<?php } ?>
</table>
<input type="submit" name="Submit" value="Enviar"></p>
<input name="titulo" type="hidden" value="<?php echo $titulo;?
>">
<input
type="hidden"
name="respuestas"
value="<?php
echo
$respuestas;?>">
</form>

El siguiente fichero (enc3.php) es el que se encarga de guardar los cambios en la base de


datos. En un primero momento, guardamos tan solo la encuesta, con sus campos 'fecha' y
'titulo'. Posteriormente sacamos el 'id' asignado a nuestra encuesta (la ltima almacenada)
para que al insertar las respuestas podamos hacer referencia al id de la encuesta a la que va
asociada.
enc3.php

<?php
//Conectamos con la base de datos
require('configuracion.inc.php');
$enlace = mysql_connect($host, $usuario, $password);
mysql_select_db($db,$enlace);
//Obtenemos la fecha del sistema
$fecha = time();
//Insertamos la nueva encuesta
$sql = "INSERT INTO encuestas
'$fecha') ";
$sql = mysql_query($sql);

(titulo,

fecha)

VALUES

('$titulo',

//Ahora obtenemos el ID de la encuesta que acabamos de insertar


$sql = "SELECT id FROM encuestas ORDER BY fecha DESC LIMIT 0,1";
$sql = mysql_query($sql);
while($row = mysql_fetch_array($sql)){
$id=$row["id"];
}
//Recorremos todas las preguntas
for($i=1; $i<=$respuestas; $i++){
//Obtenemos el texto de la pregunta
$preg = p.$i;
$texto = $$preg;
//Y lo insertamos
$sql
=
"INSERT
INTO
respuestas(texto,
votos,
idenc)
VALUES("$texto", 0, $id)";
$sql = mysql_query($sql);
}
?>
<div align="center"><strong>Felicidades!! Si todo ha ido bien, tu
encuesta ha
sido insertada!! </strong> </div>
Y por ltimo, creamos el fichero configuracion.inc.php que contiene la siguiente
informacin:
configuracion.inc.php

<?
$host = "miHost";
$usuario = "miUsuario";
$password = "miContrasea";
$db = "miBaseDeDatos";
?>

Por supuesto, deberemos indicar la configuracin de nuestra base de datos. Ya tenemos


nuestra base de datos creada, y nuestra aplicacin en html para insertar nuevas encuestas,
ya slo nos queda el formulario para votar, y mostrar un grfico de barras con el resultado.

Votar los resultados


Tal y como yo he planteado este sistema de encuestas, la nica que se mostrar ser la que
tenga la fecha ms reciente, es decir, la ltima encuesta insertada. Cualquier modificacin
para evitar este funcionamiento no creo que os suponga mucho esfuerzo.
A continuacin tenis el cdigo del formulario para votar la opcin que deseada.
encuesta.php

<?php
//Conectamos con la base de datos
require('configuracion.inc.php');
$enlace = mysql_connect($host,$usuario,$password);
mysql_select_db($db,$enlace);
//Seleccionamos la informacion de la ltima encuesta insertada
$consulta = "SELECT * FROM encuestas ORDER BY fecha DESC LIMIT
0,1";
$consulta = mysql_query($consulta,$enlace);
while($row = mysql_fetch_array($consulta)){
$titulo=$row["titulo"];
$fecha=$row["fecha"];
$id=$row['id'];
}
?>
<body>
<form name="form1" method="post" action="votar.php">
<table width="350" border="1">
<tr>
<td colspan="2"><strong>Titulo</strong>: <?php echo $titulo; ?>
<input type="hidden" name="id" value="<?php echo $id;?>"></td>
</tr>
<?php
$sql = "SELECT texto, id FROM respuestas WHERE idenc="$id"";
$sql = mysql_query($sql,$enlace);
while($row = mysql_fetch_array($sql)){
$texto=$row["texto"];
$idres=$row["id"];
?>
<tr>
<td width="51"><input type="radio" name="opcion" value="<?php
echo $idres; ?>"></td>
<td width="283"><?php echo $texto; ?></td>
</tr>
<?php } ?>
<tr>
<td><input type="submit" name="Submit" value="Enviar"></td>
<td>Esta encuesta est&aacute; desde el <?php echo date('d-m-y',
$fecha); ?></td>
</tr>
<tr>
<td colspan="2"><a href="votar.php">Ver resultados</a></td>
</tr>
</table>

</form>
</body>

El cdigo que viene a continuacin, votar.php, de momento slo aade el voto a la base de
datos. Ms adelante pondremos en ste mismo fichero el cdigo que aade la imagen con el
grfico de barras:
votar.php

<?
require('configuracion.inc.php');
$enlace = mysql_connect($host, $usuario, $password);
mysql_select_db($db,$enlace);
//Obtenemos el titulo de la encuesta
$consulta = "SELECT titulo FROM encuestas ORDER BY fecha DESC LIMIT
1,0";
$consulta = mysql_query($consulta,$enlace);
$lado=mysql_num_rows($consulta);
while($row = mysql_fetch_array($consulta)){
$titulo= $row['titulo'];
}
//Obtenemos el numero actual de votos para la opcin elegida
//Comprobamos si $opcion no est vaco porque posteriormente este
mismo
//fichero lo utilizaremos para ver resultados sin tener que votar
necesariamente
if(!empty($opcion)) {
$consulta = "SELECT votos FROM respuestas WHERE id=$opcion";
$consulta = mysql_query($consulta,$enlace);
$lado=mysql_num_rows($consulta);
while($row = mysql_fetch_array($consulta)){
$votos= $row['votos'];
}
//Incrementamos en uno los votos totales
$votos = $votos + 1;
//Y actualizamos la base de datos
$consulta = "UPDATE respuestas
id=$opcion";
mysql_query($consulta,$enlace);
}
?>

SET

votos

$votos

WHERE

Mostrar el grfico de barras


Para realizar esto lo que haremos es crearnos un fichero que conectar con la base de datos
y extraer la informacin necesaria. Crearemos una imagen, y le daremos formato con
funciones de la librera gd.
Quizs a muchos de vosotros os surja la duda, tal y como me ocurri a m, de como poner en
funcionamiento esta librera: Tenis que bajaros (en caso de estar en Windows) el
archivophp_gd.dll, copiarlo a la carpeta extensions de php y descomentar la lnea donde
se hace referencia a la DLL en cuestin en el php.ini.

El cdigo, aunque a alguno a primera vista os intimide, realmente no tiene complicacin


alguna, tan solo leemos de la base de datos y dibujamos los elementos de nuestro grfico de
barras:
NOTA: ste fichero ha de conectar con la base de datos. Para que funcione correctamente,
tenis que aadir que incluya configuracion.inc.php directamente vosotros en el sitio
que corresponda. Dicho queda.
dgrafica.php

<?php
//Fijaos en que esta vez tenis que aadir vosotros la informacion en
mysql_connect
$enlace = mysql_connect('tuHost','tuUsuario','tuPassword');
mysql_select_db('tuBaseDeDatos');
//Obtenemos el titulo de la ltima encuesta para colocarlo como ttulo
en nuestro grfico
$consulta = "SELECT titulo, id FROM encuestas ORDER BY fecha DESC
LIMIT 0,1";
$consulta = mysql_query($consulta,$enlace);
$lado=mysql_num_rows($consulta);
while($row = mysql_fetch_array($consulta)){
$titulo= $row['titulo'];
$id=$row['id'];
}
//Obtenemos el numero de votos de cada opcion y los metemos en
"votos[]"
$consulta = "SELECT votos, texto FROM respuestas WHERE idenc=$id";
$consulta = mysql_query($consulta,$enlace);
$lado=mysql_num_rows($consulta);
while($row = mysql_fetch_array($consulta)){
//Guardamos el texto en la variable temp. Este texto nos servir
como
//ndice en el array votos[]
$temp = $row['texto'];
$votos[$temp]= $row['votos'];
}
//Variables del grfico
$width = 500;
//Ancho de la imagen
$espacioCol = 30;
//Espacio que habr del principio de una
columna a otra
$altoCol = 15;
//El alto de las columnas
$height = 2*count($votos)*$espacioCol+45;
//El alto de la imagen
$maxvoto = max($votos);
//Valor de la opcion mas votada
$maxlargo = $width-50;
//Largo que tendr la opcin mas votada
$coeficiente = (int)($maxlargo / $maxvoto);
//Coeficiente
para
calcular el largo de cada opcion
//Creamos la imagen con el alto y ancho asignados anteriormente
$image = imagecreate($width,$height);
//Declaramos variables para los colores.
Al ser el gris el primer
color que
//declaramos, ste se quedar como color de fondo en la imagen
$gray = imagecolorallocate($image, 0xC0, 0xC0, 0xC0);
$black = imagecolorallocate($image, 0x00, 0x00, 0x00);
$blue = imagecolorallocate($image, 0x00, 0x00, 0xFF);

//Recorremos el array 'votos'


for($i=0; list($texto, $vot) = each($votos); $i++) {
$labelfont = 2; //Fuente empleada para etiquetas
//Dibujamos las barras
//Coordenadas para definir el rectngulo
$valign = ($i+1)*$espacioCol + 15;
$halign = 30;
$valign2 = $valign + $altoCol;
$halign2 = $halign+$vot*$coeficiente;
imagefilledrectangle($image,$halign,$valign,
$halign2,$valign2,$blue);
//Ponemos el ndice de cada barra
//Coordenadas para colocar los indices
$indice = $i + 1;
$halign = 15;
imagestring($image, $labelfont, $halign, $valign, $indice, $black);
//Leyenda: Numero de opcion + Texto + ( votos )
//Coordenadas para colocar la leyenda
$valign = ($i+1)*$espacioCol + (count($votos)*$espacioCol)+ 15;
$halign = 30;
$leyenda = "Opcion ".$indice.": ".$texto." ($vot)";
imagestring($image, $labelfont, $halign, $valign, $leyenda, $black);
}
//Asignamos tipografa y colocamos el ttulo en la parte superior
izquierda
$titlefont = 3;
imagestring($image, $titlefont, 10, 10, $titulo, $black);
//Dibujamos el recuadro que encierra el contenido
imagerectangle($image, $width - 5, 30, 5, $height - 5, $black);
//Devolvemos la imagen
header("Content-type: image/png");
imagepng($image);
imagedestroy($image);
?>
Ya lo tenemos todo hecho, tan slo nos falta incluir un pequeo detalle a nuestro cdigo. En
el archivo que capta los votos (votar.php) tenis que aadir el siguiente cdigo:

<img src="dgrafica.php">
Y os coloco una imagen del resultado final de una encuesta cualquiera:

Das könnte Ihnen auch gefallen