Sei sulla pagina 1di 57

Diseo y realizacin de servicios de presentacin de entornos grficos.

Cuaderno de Prcticas 2013/2014


Bloque: JAVA

Colegio Montessori

Bloque:
JAVA

Diseo y realizacin de servicios de presentacin de entornos grficos.

Cuaderno de Prcticas 2013/2014


Bloque: JAVA

Colegio Montessori

Introduccin al lenguaje Java

Compilar y ejecutar un programa en Java

Preparando el PATH
Supongamos que en el directorio C:\Archivos de programa\Java\jdk1.5.0_06 tenemos
recien instalado java. Los nmeros del nombre de la carpeta correspondern siempre a
la versin de Java que hayamos instalado, por lo que podrn ser diferentes a los de estos
apuntes.
Con esto, podemos desde una ventana de ms-dos ejecutar el comando "java", que nos
permite ejecutar programas java ya hechos. Sin embargo, todava no podemos ejecutar
el comando "javac" que nos permite compilar programas java, ni el comando "jar" que
nos permite crear ficheros .jar de java.
Para que esto sea posible, debemos poner en el path de bsqueda de ejecutables el
directorio C:\Archivos de programa\Java\jdk1.5.0_06\bin, que es el directorio donde se
encuentran los programas javac.exe y jar.exe. Para poner este directorio en el path de
bsqueda de ejecutables hacemos lo siguiente
En Windows 2000, XP,vista o Windows 7 vamos al icono "mi pc", le damos con el
botn derecho de ratn para sacar el men, elegimos "propiedades", pestaa "opciones
avanzadas" y luego el botn "variables de entorno". Buscamos la variable "Path" y la
editamos. Al final de lo que tenga en ese momento, aadimos un punto y coma y el
directorio C:\Archivos de programa\Java\jdk1.5.0_06\bin
En Windows Vista, vamos al icono "equipo", sacamos el men, elegimos
"propiedades", "configuracin avanzada del sistema", "variables de entorno" y seguimos
como en Windows 2000/XP.
En mi caso, despus de aadir, quedara algo como esto:
C:\Windows\system32;C:\Windows;C:\Archivos de Programa\Java\jdk1.5.0_06\bin
Si queremos mantener el valor de la variable PATH, se har de la siguiente manera
C:\Archivos de programa\Java\jdk1.7.0_25\bin>set path=%path%;C:\Archivos de
programa\Java\jdk1.7.0_25\bin
Una vez hecho esto y aceptados todos los cambios, abrimos una ventana de ms-dos
nueva. Es importante abrirla despus de haber hecho los cambios. En esa ventana de
ms-dos ya deberamos poder ejecutar los comandos javac y jar.

Compilar
Vamos al directorio donde est nuestro proyecto. Ah creamos y hacemos nuestros
fuentes .java. Es importante tener en cuenta lo siguiente:

Diseo y realizacin de servicios de presentacin de entornos grficos.

Colegio Montessori

Cuaderno de Prcticas 2013/2014


Bloque: JAVA

Los ficheros .java que dentro no ponen package, deben colocarse en el directorio
de nuestro proyecto. El siguiente fuente debera ir en
c:\path_mi_proyecto\fuente1.java

public class fuente1 {

Si un fichero .java lleva dentro package paquete;, debemos crear en nuestro


proyecto un subdirectorio paquete y meter dentro el fichero .java. El siguiente fuente
debera ir en c:\path_mi_proyecto\paquete\fuente2.java

package paquete;
public class fuente2 {

Si un fichero .java lleva dentro package paquete.subpaquete;, debemos crear


en nuestro proyecto un subdirectorio paquete y dentro de este otro subdirectorio
subpaquete y dentro de este nuestro fuente .java. El siguiente fuente debera ir en
c:\path_mi_proyecto\paquete\subpaquete\fuente3.java

package paquete.subpaquete;
public class fuente3 {

Es decir, los package y los directorios deben coincidir.


Para compilar, situados en el directorio de nuestro proyecto, debemos compilar as
javac fuente1.java paquete\fuente2.java paquete\subpaquete\fuente3.java

es decir, debemos compilar desde el directorio de nuestro proyecto y debemos poner, si


hace falta, los path para llegar desde ah a los fuentes. Esto generar los ficheros
fuente1.class, paquete\fuente2.class y paquete\subpaquete\fuente3.class
ejercicio2
/**
* Clase que pinta por consola "Hola mundo",
* utilizando un objeto de la propia clase.

Diseo y realizacin de servicios de presentacin de entornos grficos.

Colegio Montessori
* @author 2 DAM

Cuaderno de Prcticas 2013/2014


Bloque: JAVA

*/

public class ejercicio2{

public static void main (String args[]){


ejercicio2 obj = new ejercicio2();
obj.Saludar("Hola mundo");
//Version simple: System.out.println("Hola mundo");
}

private void Saludar(String saludo){


System.out.println(saludo);
}
}

ejercicio3.java

/**
* Clase que pinta por consola "Hola mundo",
* utilizando un objeto de otra clase.
* @author 2 DAM
*/
public class ejercicio3{
public static void main (String args[]){
pintar obj = new pintar();
obj.llamada("Hola mundo");
}
}
class pintar{
public void llamada(String dato){

Diseo y realizacin de servicios de presentacin de entornos grficos.

Colegio Montessori
Saludar(dato);
}
private void Saludar(String saludo){
System.out.println(saludo);
}
}

Ejercicio4
/**
* Clase que pinta por consola "Hola mundo",
* utilizando un objeto de otra clase con constructor.
* @author 2 DAM
*/

public class ejercicio4{

public static void main (String args[]){


escribir obj = new escribir("Hola mundo");
}
}

class escribir{
escribir(String dato){
Saludar(dato);
}
private void Saludar(String saludo){
System.out.println(saludo);
}
}

Ejecutar sin crear el .jar

Cuaderno de Prcticas 2013/2014


Bloque: JAVA

Diseo y realizacin de servicios de presentacin de entornos grficos.

Colegio Montessori

Cuaderno de Prcticas 2013/2014


Bloque: JAVA

Una vez que tenemos los .class generados, ya podemos ejecutar. Nuevamente debemos
estar situados en el directorio de nuestro proyecto y, segn cual sea la clase que contiene
el main, debemos ejecutar
java fuente1
java paquete.fuente2
java paquete.subpaquete.fuente3

Hay que fijarse en varias cosas importantes. La primera es que estamos en el directorio
de nuestro proyecto, no en los subdirectorios paquete ni subpaquete. Tambin es
importante ver que hemos separado paquete, subpaquete y el nombre de las clases con
puntos, y no con las barras \. Finalmente, es importante fijarse que no hemos aadido
.class detrs.

Crear un Fichero JAR


El formato bsico del comando para crear un fichero JAR es.
jar cvf fichero-jar fichero(s)-de entrada

Echemos un vistazo a las opciones y argumentos utilizados en este comando.


La opcin c indica que quieres crear un fichero JAR.
v - produce un salida verbosa en stderr (en versin 1.1) o stdout (en versin 1.2)
mientras se construye el fichero. La salida verbosa te dice el nombre de cada
fichero aadido al fichero JAR o los errores que se puedan producir.
La opcin f indica que quieres que la salida vaya a un fichero en vez de a stdout.
La opcin m indica que queremos usar nuestro fichero de manifiesto (el caso
contrario deberamos editar el *.jar y aadirle la lnea del fichero que contenga
el main).
fichero-file es el nombre que quieres para el fichero JAR resultante. Puedes
utilizar cualquier nombre de fichero. Por convencin, a los ficheros JAR se les
da la extensin .jar, aunque no es obligatorio.
El argumento fichero(s)-de entrada es una lista delimitada por espacios de uno
o ms ficheros que deben ser situados dentro de tu fichero JAR. Este argumento
puede tener simbolo del comodn *. Si alguno de los fichero(s)-de entrada, es un
directorio, el contenido de dicho directorio se aadir al fichero JAR
recursivamente.
Las opciones c, v, m y f pueden aparecer en cualquier orden, pero no debe existir
ningn espacio entre ellas.
Este comando generar un fichero JAR comprimido y lo situar en el directorio actual.
El comando tambin genera un fichero de manifiesto, por defecto. METAINF/MANIFEST.MF, para el archivo JAR.
Podras aadir cualquiera de estas opciones adicionales a las opciones cf del comando
bsico.

Diseo y realizacin de servicios de presentacin de entornos grficos.

Colegio Montessori

Cuaderno de Prcticas 2013/2014


Bloque: JAVA

0 - indica que no quieres que el fichero JAR sea comprimido.


M - indica que no se debera producir el fichero de manifiesto por defecto.
m - utilizada para incluir informacin de manifiesto desde un fichero de
manifiesto existente. El formato utilizado por esta opcin es
jar vcmf existing-manifest output-file input-file(s)

En la versin 1.1 el formato JAR slo soporta nombres de ficheros ASCII. La versin
1.2 aade soporte para nombres codificados en UTF8.
Un ejemplo de MANIFEST.MF para la versin 1.2 y posteriores sera el siguiente:

Manifest-Version:1.0
Created-By: 1.6.0_20 (Sun Microsystem Inc.)
Main-Class: App

NOTA: es muy importante colocar un salto de lnea despus de la ltima lnea.

Una vez creado un fichero JAR para ejecutarlo lo haremos con:


Java jar fichero.jar

Crear un Fichero JAR con paquetes y subpaquetes


Primero creamos las rutas de las carpetas, como en la imagen inferior:

Donde la carpeta raz es la jar en ella colocaremos el fichero que


contenga el main y en la carpeta secundario una clase llamada
pintar que ser invocada desde el main previo a su importacin.
mimain.java
/* package principal (no es necesaria por encontrarnos en el mismo
nivel que el main; */
import principal.secundario.*;
public class mimain{
public static void main(String [] args){
pintar pt = new pintar("Hola holita hola");
}
}

Diseo y realizacin de servicios de presentacin de entornos grficos.

Cuaderno de Prcticas 2013/2014


Bloque: JAVA

Colegio Montessori
pintar.java
package principal.secundario;
public class pintar{
public pintar(String dato){
System.out.println(dato);
}
}

Primero compilaremos los ficheros .java a .class, si compilamos


mimain.java como invoca a pintar.java este tambin ser compilado.
Despus deberemos crear el fichero jar, para ello usaremos la orden:
-

jar cvf mimain.jar mimain.class principal\secundario\pintar.class


jar cvf mimain.jar jar\*

Ahora deberemos modificar el MANISFEST.MF aadiendo la opcin MainClass: mimain.

Introduccin

Interfaces

Las interfaces Java son expresiones puras de diseo, se trata de autnticas


conceptualizaciones no implementadas (en la propia interfaz) que sirven de gua para
definir una determinada lnea de conceptos de clase, pero sin desarrollar un mecanismo
de solucin (cdigo).
Se trata de declarar mtodos abstractos y constantes que posteriormente puedan ser
implementados de diferentes maneras segn las necesidades de un programa en las
clases que lo implementen.
Por ejemplo: Un interfaz es una lista de acciones que puede llevar a cabo un
determinado objeto. Pero?, Eso no eran los mtodos ?, en una clase adems de
aparecer los mtodos apareca el cdigo de dichos mtodos, en cambio en un interfaz
slo existe la definicin del mtodo, no su cdigo.
Ejemplo: Un interfaz en el que existen una lista de mtodos despegar, aterrizar,
recogerTren y sacarTren. Cuando vemos esta interfaz intuimos un avin. El motivo es
que el avin es el concepto que engloba las acciones que hemos detallado antes, a pesar
que existan muchos objetos avin diferentes entre s, por ejemplo Airbus A340, Boeing
747, AirBus A300, ...
Aunque todos ellos, puedan pertenecer a clases distintas, si poseen el interfaz avin,
dispondrn de los mtodos detallados en la lista del interfaz avin.
Esto significa tambin que a cualquier avin le podemos pedir que vuele, sin
importarnos a que clase real pertenezca el avin, evidentemente cada clase especificar
como volar el avin (porque proporciona el cdigo de la funcin volar).

Diseo y realizacin de servicios de presentacin de entornos grficos.

Colegio Montessori

Cuaderno de Prcticas 2013/2014


Bloque: JAVA

Declaracin

Para declarar una interfaz se utiliza la sentencia interface, de la misma manera que se
usa la sentencia class:
interface MiInterfaz {
int CONSTANTE = 10;
int metodoAbstracto( int parametro );
}

Se observa en la declaracin que las variables adoptan la declaracin en maysculas,


pues en realidad actuarn como constantes final.
Los mtodos tras su declaracin tienen un punto y coma, en lugar de la declaracin de
su cuerpo entre llaves. Son mtodos abstractos, por tanto, mtodos sin implementacin.
Implementacin de una interfaz

Las interfaces carecen de cdigo (funcionalidad) por no estar implementados sus


mtodos.
La palabra reservada implements utilizada en la declaracin de una clase indica que la
clase implementa la interfaz, es decir, que asume las constantes de la interfaz, y sus
mtodos (sin codificar):
class ImplementaInterfaz implements MiInterfaz{
int multiplicando=CONSTANTE;
int metodoAbstracto( int parametro ){
return ( parametro * multiplicando );
}
}

En este ejemplo se observa que han de codificarse todos los mtodos que determina la
interfaz (metodoAbstracto()), y la validez de las constantes (CONSTANTE) que define
la interfaz durante toda la declaracin de la clase.
Herencia mltiple

Una interfaz no puede implementar otra interfaz, aunque s extenderla (extends)


amplindola.
Java es un lenguaje que incorpora herencia simple de implementacin pero que puede
aportar herencia mltiple de interfaz . Esto posibilita la herencia mltiple en el diseo
de los programas Java.
Una interfaz puede heredar de ms de una interfaz antecesora.
interface InterfazMultiple extends Interfaz1,Interfaz2{ }

Una clase no puede tener ms que una clase antecesora, pero puede implementar ms de
una interfaz:
class MiClase extends SuClasePadre implements Interfaz1,Interfaz2{ }

Ejercicio 1 Interfaces
Crear la interfaz PuedeContar (que es capaz de Contar), un interfaz muy simple que slo
posee un mtodo Contar.
PuedeContar.java

Diseo y realizacin de servicios de presentacin de entornos grficos.

Colegio Montessori
public interface PuedeContar {
public void Contar();
}

Cuaderno de Prcticas 2013/2014


Bloque: JAVA

Crear la clase Persona que implemente el interfaz PuedeContar y que cuando cuente
diga nmeros.
Espanol.java
public class Espanol implements PuedeContar {
public void Contar() {
System.out.println("uno dos tres cuatro cinco seis");
}
}

Crear la clase Ingls y Francs que implemente el interfaz PuedeContar y que muestre
como cuentan
Ingles.java
public class Ingles implements PuedeContar {
public void Contar() {
System.out.println("one two three four five six");
}
}

Frances.java
public class Frances implements PuedeContar {
public void Contar() {
System.out.println("un deux trois quatre cinq six sept huit");
}
}

Realizar el programa que haga Contar a un Ingls y a un Francs.


ProgramaInterfaz.java
public class ProgramaInterfaz {
public static void main(String arg[]) {
Espanol julio = new Espanol();
hacerContar(julio);
Ingles manolo = new Ingles();
hacerContar(manolo);
Frances claudio = new Frances();
hacerContar(claudio);
}
public static void hacerContar(PuedeContar contador) {
contador.Contar();
}
}

Ejercicio 2
Algunos seres pueden caminar y puede nadar estas dos capacidades son interfaces
(PuedeCaminar.java y PuedeNadar.java).
Los mamiferos son animales que pueden moverse (Mamifero.java). El gato es un
mamifero que puede nadar y moverse (Gato.java).
Un Loro puede caminar pero no puede nadar.
PuedeCaminar.java
public interface PuedeCaminar{
public void caminar();
}

Diseo y realizacin de servicios de presentacin de entornos grficos.

Colegio Montessori

Cuaderno de Prcticas 2013/2014


Bloque: JAVA

PuedeNadar.java
public interface PuedeNadar {
public void nadar();
}

Mamifero.java
public class Mamifero {
String especie, color;
public void caminar() {
System.out.println("El mamfero camina");
}
}

Gato.java
public class Gato extends Mamifero implements PuedeCaminar, PuedeNadar
{
private int numeroPatas = 4;
public void nadar() {
System.out.println("El gato nada");
}
}

Loro.java
public class Loro implements PuedeCaminar...
...System.out.println("El loro camina");
...

Interfaces.java
public class Interfaces {
public static void main(String[] args) {
Gato felix = new Gato();
felix.caminar();
felix.nadar();
Loro pepe = new Loro();
pepe.caminar();
}
}

Creacin de Interfaces Grficos de Usuario con la librera Swing

Ejercicios resueltos

Creacin de una ventana.


package dam; //a eleccin del alumno con package o sin el.
import javax.swing.*;
public class EjemploVentana2{
public static void main (String [] args) {
JFrame ven = new JFrame(); //crea la ventana en el objeto ven.
ven.setTitle("Ventanote"); //asigna rtulo a la ventana
ven.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE) ; //cierra
el objeto JFrame
ven.setSize(300,300); // define el tamao de la ventana
//ven.show(); //Se utilizo hasta la versin JDK 1.5
ven.setVisible(true); //importante colocar el setVisible() al
final de todos los metodos.
}
}
import javax.swing.JFrame;

Diseo y realizacin de servicios de presentacin de entornos grficos.

Cuaderno de Prcticas 2013/2014


Colegio Montessori
Bloque: JAVA
public class EjemploVentana2a {
public static void main (String [] args){
JFrame ventana = new JFrame();
ventana.setTitle("Pedazo ventana");
ventana.setDefaultCloseOperation(3); // el 3 equivale a
JFrame.EXIT_ON_CLOSE
ventana.setLocation(50,50); // Indica el punto de insercin de
la ventana
ventana.setSize(400,400);
ventana.setVisible(true);
}
}

Ubicacin de controles en un formulario utilizando FlowLayout y un Panel


package dam;

//a eleccin del alumno con package o sin el.

import javax.swing.*;
import java.awt.*;
import javax.swing.event.*;
public class EjemploVentana3 {
public static void main (String [] args){
JFrame ven =new JFrame(); //creamos la ventana
Container contenedor = new Container();
FlowLayout rejilla = new FlowLayout();
JPanel p = new JPanel();
JLabel etiqueta = new JLabel("Pedazo de etiqueta");
contenedor.setLayout(rejilla);
contenedor.add(p); //aadimos el panel al contenedor
ven.add (contenedor);
//p.setBackground(new Color(255,0,0));
p.add(etiqueta);
ven.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ven.setSize(200,200);
ven.setVisible(true);
}
}

Insercin de imgenes en un control Swing


package dam;

//a eleccin del alumno con package o sin el.

import javax.swing.*;
import java.awt.*;
import javax.swing.event.*;
public class EjemploVentana4 {
public static void main (String [] args){
JFrame ven =new JFrame(); //creamos la ventana
Container contenedor = new Container();
FlowLayout rejilla = new FlowLayout();
JLabel etiqueta = new JLabel("Pedazo de etiqueta");
JPanel p = new JPanel();
ImageIcon img = new ImageIcon("c:\\koala.jpg");
contenedor.setLayout(rejilla);
contenedor.add(p); //aadimos el panel al contenedor
contenedor.add(new JLabel(img));
ven.add (contenedor);
p.setBackground(new Color(255,0,0) );

Diseo y realizacin de servicios de presentacin de entornos grficos.

Cuaderno de Prcticas 2013/2014


Colegio Montessori
Bloque: JAVA
p.add(etiqueta);
ven.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ven.setSize(200,200);
ven.setVisible(true);
}
}

Botones
package dam;

//a eleccin del alumno con package o sin el.

import javax.swing.*;
import java.awt.*;
import javax.swing.event.*;
public class EjemploVentana7 {
public static void main (String [] args){
JFrame ven =new JFrame(); //creamos la ventana
Container contenedor = new Container();
FlowLayout rejilla = new FlowLayout();
JLabel etiqueta = new JLabel("Pedazo de etiqueta");
JPanel p = new JPanel();
JButton b1 = new JButton("Aceptar") ;
JButton b2 = new JButton("Cancelar");
contenedor.setLayout(rejilla);
contenedor.add(p); //aadimos el panel al contenedor
ven.add (contenedor);
contenedor.add(b1);
contenedor.add(b2);
ven.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ven.setSize(600,200);
ven.setVisible(true);
}
}

Control CheckBox (botn de chequeo)


package dam;

//a eleccin del alumno con package o sin el.

import javax.swing.*;
import java.awt.*;
import javax.swing.event.*;
public class EjemploVentana8 {
public static void main (String [] args){
JFrame ven =new JFrame(); //creamos la ventana
Container contenedor = new Container();
FlowLayout rejilla = new FlowLayout();
JLabel etiqueta = new JLabel("Pedazo de etiqueta");
JPanel p = new JPanel();
JCheckBox cb=new JCheckBox("Pizarra");
cb.setFont (new Font ("Arial",Font .PLAIN, 20));
contenedor.setLayout(rejilla);
contenedor.add(p); //aadimos el panel al contenedor
ven.add (contenedor);
contenedor.add(cb) ;
ven.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ven.setSize(300,200);
ven.setVisible(true);
}
}

Diseo y realizacin de servicios de presentacin de entornos grficos.

Colegio Montessori

Cuaderno de Prcticas 2013/2014


Bloque: JAVA

Control RadioButton (botn de radio)


package dam;

//a eleccin del alumno con package o sin el.

import javax.swing.*;
import java.awt.*;
import javax.swing.event.*;
public class EjemploVentana9 {
public static void main (String [] args){
JFrame ven =new JFrame(); //creamos la ventana
Container contenedor = new Container();
FlowLayout rejilla = new FlowLayout();
JPanel p = new JPanel();
JRadioButton rb=new JRadioButton("Pizarra");
rb.setFont (new Font ("Arial",Font .PLAIN, 20));
contenedor.setLayout(rejilla);
contenedor.add(p); //aadimos el panel al contenedor
ven.add (contenedor);
p.add(rb) ;
ven.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ven.setSize(300,200);
ven.setVisible(true);
}
}

Agrupacin de varios botones de radio


package dam;

//a eleccin del alumno con package o sin el.

import javax.swing.*;
import java.awt.*;
import javax.swing.event.*;
public class EjemploVentana10 {
public static void main (String [] args){
JFrame ven =new JFrame(); //creamos la ventana
Container contenedor = new Container();
GridLayout rejilla = new GridLayout(0,1);
Font fuente = new Font ( "Arial" ,Font .PLAIN, 18); //creamos
un objeto de atributos del texto (objeto fuente)
JPanel p = new JPanel();
contenedor.setLayout (rejilla);
JRadioButton naftero=new JRadioButton("Gasolina");
naftero.setFont (fuente);
JRadioButton gasolero=new JRadioButton("Diesel");
gasolero.setFont (fuente);
contenedor.add(p); //aadimos el panel al contenedor
ven.add (contenedor);
contenedor.add(new Label("Selecciona el tipo de
combustible"));
//Creamos la agrupacion de RadioButton
ButtonGroup GrupoBotones = new ButtonGroup();
GrupoBotones.add(naftero);
GrupoBotones.add(gasolero);
contenedor.add(naftero);
contenedor.add(gasolero);
ven.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ven.setSize(300,200);
ven.setVisible(true);

Diseo y realizacin de servicios de presentacin de entornos grficos.

Colegio Montessori
}

Cuaderno de Prcticas 2013/2014


Bloque: JAVA

Control ComboBox (Caja de texto desplegable)


package dai;

//a eleccin del alumno con package o sin el.

import javax.swing.*;
import java.awt.*;
import javax.swing.event.*;
public class EjemploVentana11 {
public static void main (String [] args){
JFrame ven =new JFrame(); //creamos la ventana
Container contenedor = new Container();
FlowLayout rejilla = new FlowLayout();
Font fuente = new Font ( "Arial" ,Font .PLAIN, 18); //creamos
un objeto de atributos del texto (objeto fuente)
JPanel p = new JPanel();
contenedor.setLayout(rejilla);
contenedor.add(p); //aadimos el panel al contenedor
ven.add (contenedor);
JComboBox cb = new JComboBox();
cb.setFont(fuente);
cb.addItem("pizarra");
cb.addItem("Pantalla");
cb.addItem("protector");
contenedor.add(cb);
ven.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ven.setSize(300,200);
ven.setVisible(true);
}
}

Carga de un ComboBox con los datos de un vector


package dai;

//a eleccin del alumno con package o sin el.

import java.awt.*;
import javax.swing.*;
import javax.swing.event.*;
public class EjemploVentana11a {
public static void main(String[] args) {
JFrame ven = new JFrame(); //creamos la ventana
Container contenedor = new Container();
FlowLayout rejilla = new FlowLayout();
Font fuente = new Font("Arial", Font.PLAIN, 18); //creamos un
objeto de atributos del texto (objeto fuente)
JPanel p = new JPanel();
contenedor.setLayout(rejilla);
contenedor.add(p); //aadimos el panel al contenedor
ven.add(contenedor);
String vector[] = {"uno","dos","tres","cuatro","cinco"};
JComboBox cb = new JComboBox();
cb.setFont(fuente);
for (int i=0; i <= (vector.length-1); i++)
cb.addItem(vector[i]);
contenedor.add(cb);
ven.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

Diseo y realizacin de servicios de presentacin de entornos grficos.

Colegio Montessori
ven.setSize(300, 200);
ven.setVisible(true);
}

Cuaderno de Prcticas 2013/2014


Bloque: JAVA

Uso y carga de un control JList con los datos de un vector


import
import
import
import
import

java.awt.Component;
java.awt.Container;
java.awt.FlowLayout;
java.awt.Font;
java.awt.Label;

import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
public class EjemploVentana12 {
public static void main (String [] args){
JFrame ven =new JFrame(); //creamos la ventana
Container contenedor = new Container();
FlowLayout rejilla = new FlowLayout();
Font fuente = new Font ( "Times" ,Font .PLAIN, 12); //creamos
un objeto de atributos del texto (objeto fuente)
JPanel p = new JPanel();
contenedor.setLayout(rejilla);
contenedor.add(p); //aadimos el panel al contenedor
String ElementosLista[] ={"ventana", "puerta", "pared",
"suelo"};
/*
String ElementosLista[];
ElementosLista[0] = "ventana";
ElementosLista[1] = "puerta";
ElementosLista[2] = "pared";
ElementosLista[3] = "suelo"; */
ven.add (contenedor);
JList lista = new JList(ElementosLista);
lista.setFont(fuente);
contenedor.add(lista);
ven.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ven.setSize(200,200);
ven.setVisible(true);
}
}

Uso de tablas y carga de datos desde un vector en JTable


import javax.swing.*;
import java.awt.*;
public class EjemploVentana13 {
public static void main( String[] args){
Container cp = new Container();
JFrame ventana = new JFrame();
cp.setLayout(new BorderLayout ( )) ;
ventana.add(cp);
// Nombres de las columnas
final String nombreCol[] = { "Sesion2" , "Tema" , "Fecha" ,
Aula" };
// Datos
Object datos[][] = {
{"1" , "MySQL" , "12/07/04" , "5" } ,
{"2" , "MySQL" , "13/07/04" , "5" } ,

Diseo y realizacin de servicios de presentacin de entornos grficos.

Cuaderno de Prcticas 2013/2014


Colegio Montessori
Bloque: JAVA
{"3" , "JDBC" , "14/07/04" , "5" } ,
{"4" , "GUI" , "15/07/04" , "5" } ,
{"5" , "Proyecto " , "16/07/04" , "5" }};
JTable tabla = new JTable(datos , nombreCol);
Font fuente =new Font ("Times",Font.BOLD,9);
tabla.setFont (fuente) ;
tabla.setRowHeight(24) ;
JScrollPane jsp=new
JScrollPane(tabla,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HO
RIZONTAL_SCROLLBAR_ALWAYS);
cp.add(jsp , BorderLayout .CENTER) ;
ventana.setSize(500,100) ;
ventana.setVisible(true ) ;
ventana.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}

Uso de JTable y pintado de filas en una tabla


MiTablaCeldasRedibujar.java
import javax.swing.*;
import javax.swing.table.*;
import java.awt.*;
class MiTablaCeldasRedibujar extends DefaultTableCellRenderer {
public MiTablaCeldasRedibujar() {
setOpaque(true);
}
public Component getTableCellRendererComponent(JTable table,
Object value,
boolean isSelected, boolean hasFocus, int row, int column)
{
/*En vez de modificar la tabla directamente, creamos otro
componente para pegarlo sobre la tabla,
pasndole todos los parmetros de la tabla original, los
cuales vienen en el constructor de este mtodo*/
final Component tabla =
super.getTableCellRendererComponent(table, value, isSelected,
hasFocus, row, column);
tabla.setBackground(Repintar.pintarFilas(row));
return tabla;
}
}
Repintar.java
import javax.swing.*;
import javax.swing.table.*;
import java.awt.*;
class Repintar{
public static Color pintarFilas(int row){

Diseo y realizacin de servicios de presentacin de entornos grficos.

Colegio Montessori

Cuaderno de Prcticas 2013/2014


Bloque: JAVA

if(row % 2 == 0){
return Color.red;
}else{
return Color.green;
}
}
public static void nuevaFila(JTable tabla, String[] coleccion){
DefaultTableModel model = (DefaultTableModel)
tabla.getModel();
model.addRow(coleccion);
}
}

test.java
import javax.swing.*;
import javax.swing.table.*;
public class test extends JFrame{
String[][] data = { {"0","0","5","1","0","12"},
{"5","0","2","8","0","0"},
{"50","5","0","8","0","0"},
{"8","0","0","0","5","0"},
{"0","0","8","9","0","10"},
{"0","0","8","9","0","10"}};
final Object[] titulos = {"Columna 1", "Columna 2", "Columna 3",
"Columna 4", "Columna 5", "Columna 6"};
String[] datos2= {"1", "2", "3", "4", "5", "6"};
public test() {
setSize(500,135);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLocation(200,200);
DefaultTableModel myModel = new DefaultTableModel(data, titulos);
JTable myTable = new JTable(myModel);
myTable.setDefaultRenderer(Object.class, new
MiTablaCeldasRedibujar());
Repintar.nuevaFila(myTable, datos2);
JScrollPane x = new JScrollPane(myTable);
getContentPane().add(x);
setVisible(true);
}
public static void main(String args[]) {
test t = new test();
}
}

Uso del control JTree (rbol)


package dai;

//a eleccin del alumno con package o sin el.

Diseo y realizacin de servicios de presentacin de entornos grficos.

Colegio Montessori

Cuaderno de Prcticas 2013/2014


Bloque: JAVA

import java.awt.BorderLayout;
import java.awt.Container;
import
import
import
import

javax.swing.JFrame;
javax.swing.JPanel;
javax.swing.JTree;
javax.swing.tree.DefaultMutableTreeNode;

public class EjemploVentana14 {


public static void main(String[] args) {
JTree arbol;
JFrame ventana = new JFrame();
JPanel panel = new JPanel();
Container contenedor = new Container();
contenedor.setLayout (new BorderLayout());
DefaultMutableTreeNode entrada = new
DefaultMutableTreeNode("Enlaces");
DefaultMutableTreeNode sub1;
DefaultMutableTreeNode sub2;
sub1 = new DefaultMutableTreeNode("Buscadores");
entrada.add(sub1);
sub2 = new DefaultMutableTreeNode("Google");
sub1.add(sub2);
sub2 = new DefaultMutableTreeNode("Yahoo");
sub1.add(sub2);
sub2 = new DefaultMutableTreeNode("Lycos");
sub1.add(sub2);
sub2 = new DefaultMutableTreeNode("Terra");
sub1.add(sub2);
sub1 = new DefaultMutableTreeNode("Java");
entrada.add(sub1);
sub2 = new DefaultMutableTreeNode("Sun");
sub1.add(sub2);
sub2 = new DefaultMutableTreeNode("IBM");
sub1.add(sub2);
sub2 = new DefaultMutableTreeNode("JavaWorld");
sub1.add(sub2);
sub2 = new DefaultMutableTreeNode("Hot Java");
sub1.add(sub2);
arbol = new JTree(entrada);
contenedor.add(arbol);
ventana.add(contenedor);
ventana.setSize(300,300);
ventana.setVisible(true);
ventana.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}

Mens desplegables
package dai;

//a eleccin del alumno con package o sin el.

import java.awt.*;
import javax.swing.*;
public class EjemploVentana15 {
public static void main(String[] args) {

Diseo y realizacin de servicios de presentacin de entornos grficos.

Cuaderno de Prcticas 2013/2014


Colegio Montessori
Bloque: JAVA
JFrame ventana = new JFrame();
JMenuBar mb;
JMenu archivo = new JMenu("Archivo");
JMenu editar = new JMenu("Editar");
JMenuItem nuevo = new JMenuItem("Nuevo");
JMenuItem abrir = new JMenuItem("Abrir");
JMenuItem ver = new JMenuItem("Ver");
JMenuItem copiar = new JMenuItem("copiar");
JMenuItem pegar = new JMenuItem("pegar");
JMenuItem borrar = new JMenuItem("borrar",2);
archivo.add(nuevo);
archivo.add(abrir);
archivo.add(ver);
editar.add(copiar);
editar.add(pegar);
editar.add(borrar);
mb = new JMenuBar();
mb.add(archivo);
mb.add(editar);
ventana.setJMenuBar(mb);
ventana.setSize(300,250);
ventana.setVisible(true);
ventana.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}

Layout
Uso Absolute Layout
/**
* Prepara y muestra una ventana cuyo contenedor principal no tiene ningn tipo de layout que maneje su contenido
* Cuando no se especifica un layout (se establece un valor null como layout), es necesario especificar la posicin de todos los
elementos dentro del contenedor con respecto a la esquina superior izquierda de su contenedor, as como el tamao que van a tener.
* Para posicionar dichos elementos se usa el mtodo setBounds(x, y, width, height) sobre cada uno de ellos.
* Cuando el contenedor es redimensionado, los elementos que contiene mantienen su posicin y tamao invariables, pudiendo
incluso quedar ocultos por estar "fuera" de dicho contenedor
*/
public class UsoAbsoluteLayout extends JFrame {
private JLabel lblEtiqueta;
private JButton btnNewButton;
private JTextField textField;
/**
* Mtodo principal que lanza la aplicacin
*/
public static void main(String[] args) {
//Preparar la tarea que debe ejecutarse en el Event Dispath Thread y que mostrar la ventana
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
UsoAbsoluteLayout frame = new UsoAbsoluteLayout();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Construye una nueva ventana
*/

Diseo y realizacin de servicios de presentacin de entornos grficos.

Colegio Montessori

Cuaderno de Prcticas 2013/2014


Bloque: JAVA

public UsoAbsoluteLayout() {
jbInit();
}
/**
* Inicializa y personaliza los componentes del GUI.
* La ventana contiene una etiqueta, un botn y un campo de texto cuyos tamaos y posiciones han sido especificados de
forma absoluta/manual
*/
private void jbInit() {
//Establecer ttulo para la ventana
setTitle("Ventana");
//Establecer tamao inicial de la ventana
setSize(new Dimension(500, 400));
//Establecer opcin de salida por defecto => Salir de la aplicacin al cerrar la ventana
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Mostrar la ventana centrada en la pantalla
setLocationRelativeTo(null);
//Establecemos el layout del contenedor principal a null
getContentPane().setLayout(null);
//Aadir al panel una etiqueta a 69 pxeles de la izquierda y 63 de la parte superior, y con un tamao de 46x14
pxeles
this.lblEtiqueta = new JLabel("Etiqueta");
this.lblEtiqueta.setBounds(69, 63, 46, 14);
getContentPane().add(this.lblEtiqueta);
//Aadir al panel un botn a 147 pxeles de la izquierda y 176 de la parte superior, y con un tamao de 89x23
pxeles
this.btnNewButton = new JButton("Botn");
this.btnNewButton.setBounds(147, 176, 89, 23);
getContentPane().add(this.btnNewButton);
//Aadir al panel un campo de texto a 321 pxeles de la izquierda y 263 de la parte superior, y con un tamao
de 109x20 pxeles
this.textField = new JTextField();
this.textField.setBounds(321, 263, 109, 20);
getContentPane().add(this.textField);
}
}

Border Layout
import java.awt.BorderLayout;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.Color;
import java.awt.Dimension;
/**
* Prepara y muestra una ventana cuyo contenedor principal es manejado por un BorderLayout
* El BorderLayout permite posicionar componentes en el elemento que los contiene de cinco formas diferentes, haciendo que estos
se comporten de diferentes maneras.
* Posiciones:
* -NORTH: El elemento posicionado con la propiedad NORTH se posicionar en la parte superior del componente que lo
contenga, ajustando su anchura a la de dicho componente. La altura de este elemento deber ser definida a mano
* -SOUTH: Similar al caso anterior solo que el elemento se posicionar en la parte inferior del componente que lo contenga
* -WEST: El elemento posicionado con la propiedad WEST se posicionar en la parte izquierda del componente que lo contenga,
ajustando su altura a la de dicho componente. La anchura de este elemento deber ser definida a mano
* -EAST: Similar al anterior solo que el elemento se posicionar en la parte derecha del componente que lo contenga.
* -CENTER: El elemento se posicionar en el centro del componente que lo contenga, y se expandir en ambos ejes para ocupar
todo el espacio libre dejado por el resto de elementos.
*/
public class UsoBorderLayout extends JFrame {
/** Panel posicionado como CENTER */
private JPanel panel;
/** Panel posicionado como EAST */
private JPanel panel_1;
/** Panel posicionado como WEST */
private JPanel panel_2;
/** Panel posicionado como SOUTH */

Diseo y realizacin de servicios de presentacin de entornos grficos.

Colegio Montessori

Cuaderno de Prcticas 2013/2014


Bloque: JAVA

private JPanel panel_3;


/** Panel posicionado como NORTH */
private JPanel panel_4;
/**
* Mtodo principal que lanza la aplicacin
*/
public static void main(String[] args) {
//Preparar la tarea que debe ejecutarse en el Event Dispath Thread y que mostrar la ventana
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
UsoBorderLayout frame = new UsoBorderLayout();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Construye una nueva ventana
*/
public UsoBorderLayout() {
jbInit();
}
/**
* Inicializa y personaliza los componentes del GUI.
* La ventana contiene un panel de color MAGENTA posiconado con la propiedad NORTH, un panel rojo posicionado
con la propiedad EAST, un panel cyan posicionado con la propiedad WEST, un panel naranja posicionado con la propiedad SOUTH
y un ultimpo panel posicionado con la propiedad CENTER
* Si se redimenciona la ventana el panel CENTER se redimensionara a lo ancho y a lo alto, los paneles NORTH y
SOUTH se redimensionarn a lo ancho y los paneles EAST y WEST se redimensionarn a lo alto
*/
private void jbInit() {
//Establecer ttulo para la ventana
setTitle("Ventana");
//Establecer tamao inicial de la ventana
setSize(new Dimension(500, 400));
//Establecer opcin de salida por defecto => Salir de la aplicacin al cerrar la ventana
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Mostrar la ventana centrada en la pantalla
setLocationRelativeTo(null);
//Generar panel NORTH, con color de fondo magenta y que ocupar 100 pixeles de altura y toda la anchura
del componente que lo contiene. Aparecer en la parte inferior
this.panel = new JPanel();
this.panel.setBackground(Color.MAGENTA);
//Establecer tamao del panel NORTH. La altura ser fija, pero la anchura ser ignorada, ya que se ajustar en
anchura al elemento padre
this.panel.setPreferredSize(new Dimension(10, 100));
//Aadir el panel al componente principal de la ventana especificando la propiedad NORTH para que se
posicione correctamente
getContentPane().add(this.panel, BorderLayout.NORTH);
//Generar panel EAST, con color de fondo rojo y que ocupar 20 pixeles de anchura y toda la altura del
componente que lo contiene. Aparecer en la parte derecha
this.panel_1 = new JPanel();
this.panel_1.setBackground(Color.RED);
//Establecer tamao del panel EAST. La anchura ser fija, pero la altura ser ignorada, ya que se ajustar en
altura al elemento padre
this.panel_1.setPreferredSize(new Dimension(20, 10));
//Aadir el panel al componente principal de la ventana especificando la propiedad EAST para que se
posicione correctamente
getContentPane().add(this.panel_1, BorderLayout.EAST);
//Generar panel WEST, con color de fondo cyan y que ocupar 30 pixeles de anchura y toda la altura del
componente que lo contiene. Aparecer en la parte izquierda
this.panel_2 = new JPanel();
this.panel_2.setBackground(Color.CYAN);
//Establecer tamao del panel WEST. La anchura ser fija, pero la altura ser ignorada, ya que se ajustar en
altura al elemento padre
this.panel_2.setPreferredSize(new Dimension(30, 10));
//Aadir el panel al componente principal de la ventana especificando la propiedad WEST para que se
posicione correctamente

Diseo y realizacin de servicios de presentacin de entornos grficos.

Colegio Montessori

Cuaderno de Prcticas 2013/2014


Bloque: JAVA

getContentPane().add(this.panel_2, BorderLayout.WEST);
//Generar panel SOUTH, con color de fondo naranja y que ocupar 10 pixeles de altura y toda la anchura del
componente que lo contiene. Aparecer en la parte inferior
this.panel_3 = new JPanel();
this.panel_3.setBackground(Color.ORANGE);
//Establecer tamao del panel SOUTH. La altura ser fija, pero la anchura ser ignorada, ya que se ajustar en
anchura al elemento padre
this.panel_3.setPreferredSize(new Dimension(10, 10));
//Aadir el panel al componente principal de la ventana especificando la propiedad SOUTH para que se
posicione correctamente
getContentPane().add(this.panel_3, BorderLayout.SOUTH);
//Generar panel CENTER, con color de fondo amarillo y que ocupar todo el espacio libre en el componente
que lo contiene
this.panel_4 = new JPanel();
this.panel_4.setBackground(Color.YELLOW);
//Aadir el panel al componente principal de la ventana especificando la propiedad CENTER para que se
posicione correctamente
getContentPane().add(this.panel_4, BorderLayout.CENTER);
}
}

Card Layout
import java.awt.Dimension;
import java.awt.EventQueue;
import javax.swing.JFrame;
import java.awt.CardLayout;
import java.awt.BorderLayout;
import javax.swing.JComboBox;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JPanel;
import javax.swing.JLabel;
import javax.swing.JButton;
import javax.swing.JTextField;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
/**
* Prepara y muestra una ventana donde se muestra el funcionamiento de un CardLayout
* El CardLayout nos permite agregar a un contenedor varios elementos, pero slo uno de ellos se mostrar a la vez.
* Cada uno de esos elementos tiene asociada una clave que lo identifica y que no puede repetirse, y mediante otro tipo de
componentes auxiliares iremos cambiando el elemento del CardLayout que se muestra en cada momento.
* En este ejemplo se usa una lista desplegable que va conmutando entre una etiqueta, un cuadro de texto y un botn cada vez que se
cambia la opcin seleccionada en dicha lista.
* Normalmente un contenedor cuyos elementos son manejados por un CardLayout se usa para aadir otros contenedores con sus
respectivos layouts, aunque en el ejemplo se ha simplificado a tres componentes bsicos
*/
public class UsoCardLayout extends JFrame {
private JComboBox comboBox;
private JPanel panel;
private JLabel lblNewLabel;
private JButton btnNewButton;
private JTextField textField;
/**
* Mtodo principal que lanza la aplicacin
*/
public static void main(String[] args) {
//Preparar la tarea que debe ejecutarse en el Event Dispath Thread y que mostrar la ventana
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
UsoCardLayout frame = new UsoCardLayout();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});

Diseo y realizacin de servicios de presentacin de entornos grficos.

Colegio Montessori

Cuaderno de Prcticas 2013/2014


Bloque: JAVA

}
/**
* Construye una nueva ventana
*/
public UsoCardLayout() {
jbInit();
}
/**
* Inicializa y personaliza los componentes del GUI.
* La ventana muestra una lista desplegable que al cambiar la opcin seleccionada cambia lo que se muestra en otro panel
contenedor
*/
private void jbInit() {
//Establecer ttulo para la ventana
setTitle("Ventana");
//Establecer tamao inicial de la ventana
setSize(new Dimension(500, 400));
//Establecer opcin de salida por defecto => Salir de la aplicacin al cerrar la ventana
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Mostrar la ventana centrada en la pantalla
setLocationRelativeTo(null);
//Establecer un BorderLayout como layout del contenedor principal, para aadir un desplebagle arriba y otro
panel que ocupe el resto del espacio
getContentPane().setLayout(new BorderLayout());
//Aadir un combobox a la parte superior del contenedor principal, de una altura de 40 pxeles y con tres
opciones
this.comboBox = new JComboBox();
//Aadir a la lista el manejador de eventos que nos permitir cambiar lo que se muestra en el CardLayout
this.comboBox.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
comboBox_ActionPerformed(e);
}
});
//Especificar las opciones a mostrar en la lista, que a su vez son las claves de cada uno de los elementos
gestionados por el CardLayout
this.comboBox.setModel(new DefaultComboBoxModel(new String[] {"Panel con etiqueta", "Panel con
boton", "Panel con cuadro de texto"}));
//Establecer el tamao del desplegable para especificar la altura.
this.comboBox.setPreferredSize(new Dimension(28, 40));
getContentPane().add(this.comboBox, BorderLayout.NORTH);
//Aadir al contenedor principal un nuevo panel ocupando el espacio libre
this.panel = new JPanel();
getContentPane().add(this.panel, BorderLayout.CENTER);
//Al nuevo panel le aadimos un CardLayout para manejar su contenido
this.panel.setLayout(new CardLayout());
//Aadir al nuevo panel una etiqueta y especificar la clave "Panel de etiqueta"
this.lblNewLabel = new JLabel("New label");
this.panel.add(this.lblNewLabel, "Panel con etiqueta");
//Aadir al nuevo panel un botn y especificar la clave "Panel de botn"
this.btnNewButton = new JButton("New button");
this.panel.add(this.btnNewButton, "Panel con boton");
//Aadir al nuevo panel un cuadro de texto y especificar la clave "Panel de cuadro de texto"
this.textField = new JTextField();
this.panel.add(this.textField, "Panel con cuadro de texto");
}
/**
* Cambia el elemento mostrado en el panel gestionado por el CardLayout cada vez que se cambia la opcin seleccionada
en la lista desplegable
* @param e Objeto asociado al ActionEvent
*/
protected void comboBox_ActionPerformed(ActionEvent e) {
//Extraer el nuevo elemento seleccionado en la lista desplegable que a su vez es la clave del elemento que se
va a mostrar
String key = this.comboBox.getSelectedItem().toString();
//Obtener el objeto del CardLayout del panel que lo contiene, haciendo una conversin de tipo previa
CardLayout layout = (CardLayout) this.panel.getLayout();
//Una vez tenemos el CardLayout le decimos qu elemento debe mostrar especificndole el contenedor de
dicho elemento y su clave

Diseo y realizacin de servicios de presentacin de entornos grficos.

Colegio Montessori

Cuaderno de Prcticas 2013/2014


Bloque: JAVA

layout.show(this.panel, key);
}
}

Flow Layout
import java.awt.Dimension;
import java.awt.EventQueue;
import javax.swing.JFrame;
import java.awt.FlowLayout;
import javax.swing.JButton;
/**
* Prepara y muestra una ventana cuyo contenedor principal es manejado por un FlowLayout
* El FlowLayout hace que los elementos posicionados dentro del contenedor "fluyan" en su interior, aadindose uno detrs de otro
hasta que no caben ms en una linea y saltan a la siguiente.
* Se puede hacer que los componentes fuyan de izquierda a derecha hasta completar una fila, de izquierda a derecha hasta
completar una fila o desde el centro hacia los extremos.
* Tambin se puede especificar qu separacin queremos que haya entre los elementos, tanto entre los elementos de una misma fila
como con las filas anteriores y posteriores
* Si el contenedor manejado por un FlowLayout es redimensionado, los elementos en su interior se recolocan para que siempre se
complete la anchura de una fila antes de que dichos componentes salten a la siguiente
*/
public class UsoFlowLayout extends JFrame {
private JButton btnNewButton;
private JButton btnNewButton_1;
private JButton btnNewButton_2;
private JButton btnNewButton_3;
private JButton btnNewButton_4;
/**
* Mtodo principal que lanza la aplicacin
*/
public static void main(String[] args) {
//Preparar la tarea que debe ejecutarse en el Event Dispath Thread y que mostrar la ventana
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
UsoFlowLayout frame = new UsoFlowLayout();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Construye una nueva ventana
*/
public UsoFlowLayout() {
jbInit();
}
/**
* Inicializa y personaliza los componentes del GUI.
* La ventana contiene cinco botones. Dichos botones aparecen flotando uno detrs de otro desde el centro del
contenedor principal hacia los lados. Si se reduce el tamao de la ventana, los botones que no quepan en la primera fila saltarn a la
siguiente repitiendo el mismo comportamiento
*/
private void jbInit() {
//Establecer ttulo para la ventana
setTitle("Ventana");
//Establecer tamao inicial de la ventana
setSize(new Dimension(500, 400));
//Establecer opcin de salida por defecto => Salir de la aplicacin al cerrar la ventana
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Mostrar la ventana centrada en la pantalla
setLocationRelativeTo(null);
//Aadir el FlowLayout al contenedor principal, especificando que los componentes en su interior deben de
fluir desde el centro hacia los extremos y con una separacin de 5 pxeles entre los componentes a los dos lados y 30 pxeles arriba y
abajo

Diseo y realizacin de servicios de presentacin de entornos grficos.

Colegio Montessori

Cuaderno de Prcticas 2013/2014


Bloque: JAVA

// Los valores para FloeLayout. son: CENTER, LEFT, RIGHT, TRAILING, LEADING
getContentPane().setLayout(new FlowLayout(FlowLayout.CENTER, 5, 30));
//Generar el botn que aparecer en primer lugar, y aadirlo al panel contenedor sin especificar nada ms. El
layout se encargar de posicionarlo
this.btnNewButton = new JButton("Botn");
getContentPane().add(this.btnNewButton);
//Generar el botn que aparecer en segundo lugar, y aadirlo al panel contenedor sin especificar nada ms. El
layout se encargar de posicionarlo
this.btnNewButton_1 = new JButton("Botn 1");
getContentPane().add(this.btnNewButton_1);
//Generar el botn que aparecer en tercer lugar, y aadirlo al panel contenedor sin especificar nada ms. El
layout se encargar de posicionarlo
this.btnNewButton_2 = new JButton("Botn 2");
getContentPane().add(this.btnNewButton_2);
//Generar el botn que aparecer en cuarto lugar, y aadirlo al panel contenedor sin especificar nada ms. El
layout se encargar de posicionarlo
this.btnNewButton_3 = new JButton("Botn 3");
getContentPane().add(this.btnNewButton_3);
//Generar el botn que aparecer en quinto lugar, y aadirlo al panel contenedor sin especificar nada ms. El
layout se encargar de posicionarlo
this.btnNewButton_4 = new JButton("Botn 4");
getContentPane().add(this.btnNewButton_4);
}
}

Grid Layout
import java.awt.Dimension;
import java.awt.EventQueue;
import javax.swing.JFrame;
import java.awt.GridLayout;
import javax.swing.JButton;
/**
* Prepara y muestra una ventana cuyo contenedor principal es manejado por un GridLayout
* El GridLayout nos permite dividir el contenedor en un nmero definido de filas y columnas, repartiendo todo el espacio
disponible por igual entre el nmero de celdas resultante.
* Una vez especificadas las filas y columnas necesarias, todos los elementos aadidos al contenedor se irn posicionando en las
celdas resultantes en orden, ocupando todo el epsacio en dicha celda.
* Si el contenedor es redimensionado, todos los elementos en las celdas se redimensionarn de forma proporcional
*/
public class UsoGridLayout extends JFrame {
private JButton btnNewButton;
private JButton btnNewButton_1;
private JButton btnNewButton_2;
private JButton btnNewButton_3;
private JButton btnNewButton_4;
private JButton btnNewButton_5;
/**
* Mtodo principal que lanza la aplicacin
*/
public static void main(String[] args) {
//Preparar la tarea que debe ejecutarse en el Event Dispath Thread y que mostrar la ventana
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
UsoGridLayout frame = new UsoGridLayout();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**

Diseo y realizacin de servicios de presentacin de entornos grficos.

Colegio Montessori

Cuaderno de Prcticas 2013/2014


Bloque: JAVA

* Construye una nueva ventana


*/
public UsoGridLayout() {
jbInit();
}
/**
* Inicializa y personaliza los componentes del GUI.
*/
private void jbInit() {
//Establecer ttulo para la ventana
setTitle("Ventana");
//Establecer tamao inicial de la ventana
setSize(new Dimension(500, 400));
//Establecer opcin de salida por defecto => Salir de la aplicacin al cerrar la ventana
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Mostrar la ventana centrada en la pantalla
setLocationRelativeTo(null);
//Aadir el GridLayout al contenedor principal, especificando que queremos que tenga tres filas y tres
columnas, y que la separacin entre las celdas resultantes sea de 10 pxeles en horizontal y en vertical
getContentPane().setLayout(new GridLayout(3, 3, 10, 10));
//Generar el primer botn y aadirlo al contenedor manejado por el GridLayout
this.btnNewButton = new JButton("Botn 1");
getContentPane().add(this.btnNewButton);
//Generar el segundo botn y aadirlo al contenedor manejado por el GridLayout
this.btnNewButton_1 = new JButton("Botn 2");
getContentPane().add(this.btnNewButton_1);
//Generar el tercer botn y aadirlo al contenedor manejado por el GridLayout
this.btnNewButton_2 = new JButton("Botn 3");
getContentPane().add(this.btnNewButton_2);
//Generar el cuarto botn y aadirlo al contenedor manejado por el GridLayout
this.btnNewButton_3 = new JButton("Botn 4");
getContentPane().add(this.btnNewButton_3);
//Generar el quinto botn y aadirlo al contenedor manejado por el GridLayout
this.btnNewButton_4 = new JButton("Botn 5");
getContentPane().add(this.btnNewButton_4);
//Generar el sexto botn y aadirlo al contenedor manejado por el GridLayout
this.btnNewButton_5 = new JButton("Botn 6");
getContentPane().add(this.btnNewButton_5);
}
}

Box Layout
import java.awt.Dimension;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import java.awt.Component;
/**
* Prepara y muestra una ventana cuyo contenedor principal es manejado por un BoxLayout
* El BoxLayout ordenar posicionar elementos dentro de su contenedor bien apilados uno encima de otro o bien en una fila
* Tambin nos permite definir la alineacin de cada una de las filas, y se queremos que los componentes ocupen todo el espacio
disponible dentro de una fila o no
*/
public class UsoBoxLayout extends JFrame {
private JButton btnNewButton;
private JButton btnNewButton_1;
private JButton btnNewButton_2;
/**
* Mtodo principal que lanza la aplicacin
*/
public static void main(String[] args) {
//Preparar la tarea que debe ejecutarse en el Event Dispath Thread y que mostrar la ventana
EventQueue.invokeLater(new Runnable() {

Diseo y realizacin de servicios de presentacin de entornos grficos.

Cuaderno de Prcticas 2013/2014


Bloque: JAVA

Colegio Montessori
public void run() {
try {

UsoBoxLayout frame = new UsoBoxLayout();


frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Construye una nueva ventana
*/
public UsoBoxLayout() {
jbInit();
}
/**
* Inicializa y personaliza los componentes del GUI.
* En la ventana aparecen tres botones alineados en el centro del contenedor principal y de arriba abajo
*/
private void jbInit() {
//Establecer ttulo para la ventana
setTitle("Ventana");
//Establecer tamao inicial de la ventana
setSize(new Dimension(500, 400));
//Establecer opcin de salida por defecto => Salir de la aplicacin al cerrar la ventana
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Mostrar la ventana centrada en la pantalla
setLocationRelativeTo(null);
//Establecer el BoxLayout para que maneje el contenedor principal de esta ventana. Especificamos que
queremos que los elementos se concatenen en el eje de las Y, es decir, que aparezcan apilados
getContentPane().setLayout(new BoxLayout(getContentPane(), BoxLayout.Y_AXIS));
//Aadimos el primer botn al contenedor manejado por el BoxLayout. No hay que especificar nada ms
this.btnNewButton = new JButton("Botn 1");
this.btnNewButton.setAlignmentX(Component.CENTER_ALIGNMENT);
getContentPane().add(this.btnNewButton);
//Aadimos el segundo botn al contenedor manejado por el BoxLayout. No hay que especificar nada ms
this.btnNewButton_1 = new JButton("Botn 2");
this.btnNewButton_1.setAlignmentX(Component.CENTER_ALIGNMENT);
getContentPane().add(this.btnNewButton_1);
//Aadimos el tercer botn al contenedor manejado por el BoxLayout. No hay que especificar nada ms
this.btnNewButton_2 = new JButton("Botn 3");
this.btnNewButton_2.setAlignmentX(Component.CENTER_ALIGNMENT);
getContentPane().add(this.btnNewButton_2);
}
}

JSplitPane
import java.awt.BorderLayout;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JSplitPane;
import javax.swing.JList;
import java.awt.Dimension;
import javax.swing.AbstractListModel;
import java.awt.CardLayout;
import javax.swing.JLabel;
import javax.swing.event.ListSelectionListener;
import javax.swing.event.ListSelectionEvent;
/**
* El JSplitPane es un tipo de contenedor especial que permite agregarle nicamente dos elementos, dividiendo el espacio entre los
dos y aadiendo una linea de divisin en medio que es redimensionable
* Cuando se arrastra dicha linea de divisin uno de los componentes aumenta de tamao y el otro disminuye. El espacio se puede
dividir en horizontal o en vertical

Diseo y realizacin de servicios de presentacin de entornos grficos.

Colegio Montessori

Cuaderno de Prcticas 2013/2014


Bloque: JAVA

*/
public class UsoJSplitPane extends JFrame {
private JSplitPane splitPane;
private JList list;
private JPanel cardLayoutPanel;
private JPanel panel_1;
private JLabel lblEsteEsEl;
private JPanel panel_2;
private JLabel lblEsteEsEl_1;
private JPanel panel_3;
private JLabel lblEsteEsEl_2;
/**
* Mtodo principal que lanza la aplicacin
*/
public static void main(String[] args) {
//Preparar la tarea que debe ejecutarse en el Event Dispath Thread y que mostrar la ventana
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
UsoJSplitPane frame = new UsoJSplitPane();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Construye una nueva ventana
*/
public UsoJSplitPane() {
jbInit();
}
/**
* Inicializa y personaliza los componentes del GUI.
* En la ventana aparece un JSplitPane con una lista en la parte izquierda y un panel en la derecha. Dentro del panel de la
derecha y otros paneles, y al seleccionar una opcin en la lista de la derecha, se va conmutando entre los distintos subpaneles
*/
private void jbInit() {
//Establecer ttulo para la ventana
setTitle("Ventana");
//Establecer tamao inicial de la ventana
setSize(new Dimension(500, 400));
//Establecer opcin de salida por defecto => Salir de la aplicacin al cerrar la ventana
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Mostrar la ventana centrada en la pantalla
setLocationRelativeTo(null);
//Establecer un BorderLayout como layout del panel principal
getContentPane().setLayout(new BorderLayout(0, 0));
//Generar el JSplitPane y aadirlo al centro del panel principal
this.splitPane = new JSplitPane();
getContentPane().add(this.splitPane, BorderLayout.CENTER);
//Generar una lista que aparecer en la parte izquierda del JSplitPane
this.list = new JList();
this.list.addListSelectionListener(new ListSelectionListener() {
public void valueChanged(ListSelectionEvent arg0) {
list_valueChanged(arg0);
}
});
//Rellenar la lista
this.list.setModel(new AbstractListModel() {
String[] values = new String[] {"Panel 1", "Panel 2", "Panel 3"};
public int getSize() {
return values.length;
}
public Object getElementAt(int index) {
return values[index];
}
});
//Establecer el tamao inicial de la lista, lo que har que el divisor del JSplitPane aparezca en esa posicin
this.list.setPreferredSize(new Dimension(150, 0));
this.splitPane.setLeftComponent(this.list);

Diseo y realizacin de servicios de presentacin de entornos grficos.

Colegio Montessori

Cuaderno de Prcticas 2013/2014


Bloque: JAVA

//Aadir un panel a la parte derecha del JSplitPane y agregarle un CardLayout


this.cardLayoutPanel = new JPanel();
this.splitPane.setRightComponent(this.cardLayoutPanel);
this.cardLayoutPanel.setLayout(new CardLayout(0, 0));
//Agregar un panel al panel de la derecha manejado por el CardLayout. Especificar una clave nica
this.panel_1 = new JPanel();
this.cardLayoutPanel.add(this.panel_1, "Panel 1");
this.panel_1.setLayout(null);
//Aadir una etiqueta al primero de los paneles de la derecha
this.lblEsteEsEl = new JLabel("Este es el panel 1");
this.lblEsteEsEl.setBounds(62, 121, 125, 28);
this.panel_1.add(this.lblEsteEsEl);
//Agregar un segundo panel al panel de la derecha manejado por el CardLayout. Especificar una clave nica
this.panel_2 = new JPanel();
this.cardLayoutPanel.add(this.panel_2, "Panel 2");
//Agregar una etiqueta al segundo panel de la derecha
this.lblEsteEsEl_1 = new JLabel("Este es el panel 2");
this.panel_2.add(this.lblEsteEsEl_1);
//Agregar un tercer panel al panel de la derecha manejado por el CardLayout. Especificar una clave nica
this.panel_3 = new JPanel();
this.cardLayoutPanel.add(this.panel_3, "Panel 3");
this.panel_3.setLayout(new BorderLayout(0, 0));
//Agregar una etiqueta al tercer panel de la derecha
this.lblEsteEsEl_2 = new JLabel("Este es el panel 3");
this.panel_3.add(this.lblEsteEsEl_2, BorderLayout.CENTER);
}
/**
* Cada vez que se cambia el elemento seleccionado en la lista, se carga el panel correspondiente
* @param arg0
*/
private void list_valueChanged(ListSelectionEvent arg0) {
String key = this.list.getSelectedValue().toString();
CardLayout layout = (CardLayout) this.cardLayoutPanel.getLayout();
layout.show(this.cardLayoutPanel, key);
}
}

JTablePane
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JTabbedPane;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JButton;
import java.awt.FlowLayout;
import javax.swing.JTextField;
/**
* Prepara y muestra una ventana en la que aparece como contenedor principal un JTabbedPane.
* El JTabbedPane es un contenedor que permite agrupar sus componentes en pestaas. Normalmente a cada una de las pestaas se
le agrega otro contenedor con ms componentes
* Las pestaas pueden mostrarse en cualquier posicin (arriba, abajo, izquierda o derecha) y pueden tener texto, imagen o ambos a
la vez.
*/
public class UsoJTabbedPane extends JFrame {
private JTabbedPane tabbedPane;
private JPanel panel;
private JPanel panel_1;
private JPanel panel_2;
private JLabel lblPrimeraPestaa;
private JButton btnNewButton;
private JButton btnNewButton_1;
private JTextField textField;

Diseo y realizacin de servicios de presentacin de entornos grficos.

Colegio Montessori

Cuaderno de Prcticas 2013/2014


Bloque: JAVA

/**
* Mtodo principal que lanza la aplicacin
*/
public static void main(String[] args) {
//Preparar la tarea que debe ejecutarse en el Event Dispath Thread y que mostrar la ventana
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
UsoJTabbedPane frame = new UsoJTabbedPane();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Construye una nueva ventana
*/
public UsoJTabbedPane() {
jbInit();
}
/**
* Inicializa y personaliza los componentes del GUI.
* La ventana contiene un panel de color MAGENTA posiconado con la propiedad NORTH, un panel rojo posicionado
con la propiedad EAST, un panel cyan posicionado con la propiedad WEST, un panel naranja posicionado con la propiedad SOUTH
y un ultimpo panel posicionado con la propiedad CENTER
* Si se redimenciona la ventana el panel CENTER se redimensionara a lo ancho y a lo alto, los paneles NORTH y
SOUTH se redimensionarn a lo ancho y los paneles EAST y WEST se redimensionarn a lo alto
*/
private void jbInit() {
//Establecer ttulo para la ventana
setTitle("Ventana");
//Establecer tamao inicial de la ventana
setSize(new Dimension(500, 400));
//Establecer opcin de salida por defecto => Salir de la aplicacin al cerrar la ventana
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Mostrar la ventana centrada en la pantalla
setLocationRelativeTo(null);
//Aadir un BorderLayout como el layout del contenedor principal
getContentPane().setLayout(new BorderLayout(0, 0));
//Aadir el JTabbedPane al contenedor principal y especificar que queremos que las pestaas aparezcan abajo
this.tabbedPane = new JTabbedPane(JTabbedPane.BOTTOM);
getContentPane().add(this.tabbedPane, BorderLayout.CENTER);
//Generar un nuevo JPanel y agregarlo como primera pestaa con el texto y el icono especificados
this.panel = new JPanel();
this.tabbedPane.addTab("Primera pestaa", new
ImageIcon(UsoJTabbedPane.class.getResource("/javax/swing/plaf/metal/icons/ocean/error.png")), this.panel, null);
this.panel.setLayout(null);
//Agregar una etiqueta al panel de la primera pestaa con posicionamiento absoluto
this.lblPrimeraPestaa = new JLabel("Primera pestaa");
this.lblPrimeraPestaa.setBounds(99, 71, 128, 21);
this.panel.add(this.lblPrimeraPestaa);
//Agregar un botn al panel de la primera pestaa con posicionamiento absoluto
this.btnNewButton = new JButton("New button");
this.btnNewButton.setBounds(280, 203, 89, 23);
this.panel.add(this.btnNewButton);
//Generar otro panel y agregarlo como segunda pestaa con el texto y el ToolTip especificados
this.panel_1 = new JPanel();
this.tabbedPane.addTab("Segunda pestaa", null, this.panel_1, "Este es el ToolTip de la segunda pestaa");
this.panel_1.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5));
//Generar un botn y agregarlo a la segunda pestaa
this.btnNewButton_1 = new JButton("Botn");
this.panel_1.add(this.btnNewButton_1);
//Generar un ultimo panel y agregarlo como tercera pestaa con la imagene especificada y sin texto
this.panel_2 = new JPanel();
this.tabbedPane.addTab(null, new
ImageIcon(UsoJTabbedPane.class.getResource("/javax/swing/plaf/metal/icons/ocean/info.png")), this.panel_2, null);
this.panel_2.setLayout(new BorderLayout(0, 0));
//Agregar un campo de texto al panel de la tercera pestaa

Diseo y realizacin de servicios de presentacin de entornos grficos.

Colegio Montessori

Cuaderno de Prcticas 2013/2014


Bloque: JAVA

this.textField = new JTextField();


this.textField.setText("Tercera pestaa");
this.panel_2.add(this.textField, BorderLayout.CENTER);
}
}

JScrollPane
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
/**
* Prepara y muestra una ventana en la que se muestra un JScrollPane.
* El JScrollPane nos permite incluir un componente que sea ms grande que el contenedor, y mediante barras de scroll desplazarnos
por su contenido.
* Es muy frecuente el uso de los JScrollPane junto con tablas o listas cuyo contenido sabemos que puede crecer por encima del
tamao de su contenedor, pero se puede usar con cualquier tipo de contenido.
* Adems, cuando se usoa junto con una tabla, es el propio JScrollPane el que muestra las cabeceras de dicha tabla, mantenindolas
siempre visibles aunque hagamos scroll
*/
public class UsoJScrollPane extends JFrame {
private JScrollPane scrollPane;
private JTable table;
/**
* Mtodo principal que lanza la aplicacin
*/
public static void main(String[] args) {
//Preparar la tarea que debe ejecutarse en el Event Dispath Thread y que mostrar la ventana
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
UsoJScrollPane frame = new UsoJScrollPane();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Construye una nueva ventana
*/
public UsoJScrollPane() {
jbInit();
}
/**
* Inicializa y personaliza los componentes del GUI.
* Muestra una ventana con una tabla con muchas filas. Si la ventana es demasiado pequea como para mostrarlas todas,
el JScrollPane hace su trabajo, cargando una barra de desplazamiento que nos permite ver el contenido que queda fuera.
*/
private void jbInit() {
//Establecer ttulo para la ventana
setTitle("Ventana");
//Establecer tamao inicial de la ventana
setSize(new Dimension(500, 400));
//Establecer opcin de salida por defecto => Salir de la aplicacin al cerrar la ventana
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Mostrar la ventana centrada en la pantalla
setLocationRelativeTo(null);
//Aadir un BorderLayout al contenedor principal
getContentPane().setLayout(new BorderLayout(0, 0));
//Generar un JScrollPane y aadirlo al contenedor principal
this.scrollPane = new JScrollPane();
getContentPane().add(this.scrollPane, BorderLayout.CENTER);

Diseo y realizacin de servicios de presentacin de entornos grficos.

Colegio Montessori

Cuaderno de Prcticas 2013/2014


Bloque: JAVA

//Generar una tabla y aadirla al JScrollPane. La aadimos con el mtodo setViewportView, que lo que hace
es especificar que la tabla va a ser el elemento del JScrollPane que se desplace con las barras de scroll
this.table = new JTable();
this.scrollPane.setViewportView(this.table);
generateTableContent(); //Rellenar la tabla con contenido al azar
}
//Genera las filas que van dentro de la tabla
private void generateTableContent() {
Object[] headers = new Object[] {"Columna 1", "Columna 2", "Columna 3", "Columna 4"}; //Vamos a
generar una tabla con 4 columnas
//Generamos una tabla de 30 filas, de forma que si aumentamos el tamao de la ventana vemos que la barra de
desplazamiento de la tabla desaparece
Object[][] content = new Object[30][4];
for(int i = 0; i < 30; i++) {
for(int j = 0; j < 4; j++) {
content[i][j] = "Celda [" + (i + 1) + ", " + (j + 1) + "]";
}
}
((DefaultTableModel) this.table.getModel()).setDataVector(content, headers);
}
}

JavaxSwing
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Font;
import javax.swing.ButtonGroup;
import javax.swing.JFrame;
import javax.swing.JTabbedPane;
import javax.swing.JPanel;
import javax.swing.ImageIcon;
import javax.swing.JComboBox;
import java.awt.CardLayout;
import javax.swing.JButton;
import javax.swing.border.TitledBorder;
import javax.swing.JRadioButton;
import javax.swing.BoxLayout;
import java.awt.Component;
import javax.swing.JCheckBox;
import java.awt.GridLayout;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JSlider;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.event.ChangeListener;
import javax.swing.event.ChangeEvent;
import javax.swing.JSplitPane;
import javax.swing.JList;
import javax.swing.AbstractListModel;
import javax.swing.event.ListSelectionListener;
import javax.swing.event.ListSelectionEvent;
import javax.swing.ListSelectionModel;
/**
* Prepara y muestra una ventana con varios componentes del package javax.swing
*/
public class UsoJavaxSwing extends JFrame {
private JTabbedPane tabbedPane;
private JPanel panel;
private JPanel panel_1;
private JPanel cardLayoutPanel;
private JComboBox comboBox;
private JPanel panel_3;
private JPanel gridLayoutPanel;
private JPanel borderLayoutPanel;
private JButton btnHola;

Diseo y realizacin de servicios de presentacin de entornos grficos.

Colegio Montessori

Cuaderno de Prcticas 2013/2014


Bloque: JAVA

private JPanel panel_6;


private ButtonGroup group;
private JRadioButton rdbtnNewRadioButton;
private JRadioButton rdbtnNewRadioButton_1;
private JRadioButton rdbtnNewRadioButton_2;
private JCheckBox chckbxNewCheckBox;
private JButton btnNewButton;
private JButton btnNewButton_1;
private JButton btnNewButton_2;
private JButton btnNewButton_3;
private JSlider slider;
private JScrollPane scrollPane;
private JTextArea textArea;
private JPanel panel_2;
private JSplitPane splitPane;
private JScrollPane scrollPane_1;
private JList list;
private JPanel panelBackground;
/**
* Mtodo principal que lanza la aplicacin
*/
public static void main(String[] args) {
//Preparar la tarea que debe ejecutarse en el Event Dispatch Thread y que mostrar la ventana
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
UsoJavaxSwing frame = new UsoJavaxSwing();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Construye una nueva ventana
*/
public UsoJavaxSwing() {
jbInit();
}
/**
* Inicializa y personaliza los componentes del GUI.
*/
private void jbInit() {
//Establecer ttulo para la ventana
setTitle("Ventana");
//Establecer tamao inicial de la ventana
setSize(new Dimension(757, 492));
//Establecer opcin de salida por defecto => Salir de la aplicacin al cerrar la ventana
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Mostrar la ventana centrada en la pantalla
setLocationRelativeTo(null);
//Aadir un BorderLayout que maneje el contenedor principal
getContentPane().setLayout(new BorderLayout(0, 0));
//Crear un panel de pestaas (JTabbedPane) y aadirlo al contenedor principal ocupando todo el espacio, ya
que es el nico componente
this.tabbedPane = new JTabbedPane(JTabbedPane.RIGHT);
getContentPane().add(this.tabbedPane, BorderLayout.CENTER);
//Generar un panel y aadirlo como primera pestaa, usando la imagen especificada y sin texto
this.panel = new JPanel();
this.tabbedPane.addTab("", new
ImageIcon(UsoJavaxSwing.class.getResource("/javax/swing/plaf/metal/icons/ocean/question.png")), this.panel, null);
this.panel.setLayout(new BorderLayout(0, 0));
//Generar un panel y aadirlo en la parte superior de la primera pestaa
this.panel_1 = new JPanel();
this.panel.add(this.panel_1, BorderLayout.NORTH);
//Generar un combobox y aadirlo al panel superior de la primera pestaa
this.comboBox = new JComboBox();
//Aadir un manejador de eventos al combobox, que se lance cada vez que se cambie la opcin seleccionada
this.comboBox.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {

Diseo y realizacin de servicios de presentacin de entornos grficos.

Cuaderno de Prcticas 2013/2014


Bloque: JAVA

Colegio Montessori
comboBox_actionPerformed(e);
}

});
//Definir las tres opciones del combobox, que mostraran un panel manejado por cada uno de los Layouts en la
lista
this.comboBox.setModel(new DefaultComboBoxModel(new String[] {"AbsoluteLayout", "GridLayout",
"BorderLayout"}));
this.comboBox.setPreferredSize(new Dimension(150, 30));
this.panel_1.add(this.comboBox);
//Generar un panel que ocupar todo el espacio restante de la primera pestaa. Le aadiremos un CardLayout
y otros tres paneles que sern conmutados mediante el combobox anterior
this.cardLayoutPanel = new JPanel();
this.panel.add(this.cardLayoutPanel, BorderLayout.CENTER);
this.cardLayoutPanel.setLayout(new CardLayout(0, 0));
//Generar un panel con el Layout a null como primero de los paneles del CardLayout. Definir una clave nica
this.panel_3 = new JPanel();
this.cardLayoutPanel.add(this.panel_3, "AbsoluteLayout");
this.panel_3.setLayout(null);
//Aadir al panel sin Layout un botn con la posicin y el tamao definidos
this.btnHola = new JButton("Hola");
this.btnHola.setBounds(61, 73, 89, 23);
this.panel_3.add(this.btnHola);
//Aadir al panel sin Layout otro panel manejado por un BoxLayout, con un borde y un ttulo en la parte
superior de dicho borde. Dentro aadiremos 3 radiobuttons
this.panel_6 = new JPanel();
this.panel_6.setBorder(new TitledBorder(null, "Grupo", TitledBorder.LEADING, TitledBorder.TOP, null,
null));
//Definir el tamao y la posicin de este panel
this.panel_6.setBounds(379, 73, 162, 142);
this.panel_3.add(this.panel_6);
this.panel_6.setLayout(new BoxLayout(this.panel_6, BoxLayout.Y_AXIS));
//Crear un grupo de botones. Necesario para que los radiobuttons sean excluyentes, sino se podran marcar
varios a la vez
this.group = new ButtonGroup();
//Generar el primero de los radiobuttons
this.rdbtnNewRadioButton = new JRadioButton("New radio button");
this.rdbtnNewRadioButton.setAlignmentX(Component.CENTER_ALIGNMENT);
this.panel_6.add(this.rdbtnNewRadioButton);
this.group.add(this.rdbtnNewRadioButton);
//Generar el segundo de los radiobuttons
this.rdbtnNewRadioButton_1 = new JRadioButton("New radio button");
this.rdbtnNewRadioButton_1.setAlignmentX(Component.CENTER_ALIGNMENT);
this.panel_6.add(this.rdbtnNewRadioButton_1);
this.group.add(this.rdbtnNewRadioButton_1);
//Generar el tercero de los radiobuttons
this.rdbtnNewRadioButton_2 = new JRadioButton("New radio button");
this.rdbtnNewRadioButton_2.setAlignmentX(Component.CENTER_ALIGNMENT);
this.panel_6.add(this.rdbtnNewRadioButton_2);
this.group.add(this.rdbtnNewRadioButton_2);
//Generar un checkbox y aadirlo al panel sin Layout
this.chckbxNewCheckBox = new JCheckBox("New check box");
this.chckbxNewCheckBox.setBounds(155, 314, 97, 23);
this.panel_3.add(this.chckbxNewCheckBox);
//Generar un panel gestionado por un GridLayout con dos filas y dos columnas, y una separacin de 5 pxeles
entre sus componentes. Aadirlo al panel del CardLayout
this.gridLayoutPanel = new JPanel();
this.cardLayoutPanel.add(this.gridLayoutPanel, "GridLayout");
this.gridLayoutPanel.setLayout(new GridLayout(2, 2, 5, 5));
//Generar 4 botones y aadirlos al panel del GridLayout
this.btnNewButton = new JButton("New button");
this.gridLayoutPanel.add(this.btnNewButton);
this.btnNewButton_2 = new JButton("New button");
this.gridLayoutPanel.add(this.btnNewButton_2);
this.btnNewButton_1 = new JButton("New button");
this.gridLayoutPanel.add(this.btnNewButton_1);
this.btnNewButton_3 = new JButton("New button");
this.gridLayoutPanel.add(this.btnNewButton_3);
//Generar un panel gestionado por un BorderLayout y aadirlo al panel del CardLayout
this.borderLayoutPanel = new JPanel();
this.cardLayoutPanel.add(this.borderLayoutPanel, "BorderLayout");

Diseo y realizacin de servicios de presentacin de entornos grficos.

Colegio Montessori

Cuaderno de Prcticas 2013/2014


Bloque: JAVA

this.borderLayoutPanel.setLayout(new BorderLayout(0, 0));


//Generar un JSlider y establecer su ToolTip, su valor inicial, su valor mnimo y su valor mximo
this.slider = new JSlider();
this.slider.setToolTipText("Aumentar tamao del texto"); //Tooltip
this.slider.setValue(13); //Valor inicial
this.slider.setMaximum(113); //Valor mximo
this.slider.setMinimum(13); //Valor mnimo
//Aadir un manejador de eventos que se lanzara cada vez que se desplaza el JSlider
this.slider.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent arg0) {
slider_stateChanged(arg0);
}
});
//Aadir el JSlider en la parte inferior del panel
this.borderLayoutPanel.add(this.slider, BorderLayout.SOUTH);
//Generar un JScrollPane y aadirlo al panel del BorderLayout, haciendo que ocupe todo el espacio libre
this.scrollPane = new JScrollPane();
this.borderLayoutPanel.add(this.scrollPane, BorderLayout.CENTER);
//Generar un JTextArea y aadirlo al scroll, de forma que si lo que se escribe ocupa ms que la parte visible, el
scroll nos permitir desplazarnos para ver las zonas ocultas del textarea
this.textArea = new JTextArea();
this.scrollPane.setViewportView(this.textArea);
//Generar un panel y aadirlo como segunda pestaa
this.panel_2 = new JPanel();
this.tabbedPane.addTab("Colores", null, this.panel_2, null);
this.panel_2.setLayout(new BorderLayout(0, 0));
//Generar un SPlitPane y aadirlo a la segunda pestaa ocupando todo el espacio
this.splitPane = new JSplitPane();
this.panel_2.add(this.splitPane, BorderLayout.CENTER);
//Generar un JScrollPane y aadirlo en la parte izquierda del JSplitPane. Establecer la anchura inicial de dicho
scroll
this.scrollPane_1 = new JScrollPane();
this.scrollPane_1.setPreferredSize(new Dimension(150, 2));
this.splitPane.setLeftComponent(this.scrollPane_1);
//Generar una lista y aadirla al scroll
this.list = new JList();
//Especificar que no se pueda seleccionar ms de un elemento a la vez
this.list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
//Aadir un manejador de eventos a la lista que se lanzar cada vez que se cambie el elemento seleccionado
this.list.addListSelectionListener(new ListSelectionListener() {
public void valueChanged(ListSelectionEvent arg0) {
list_valueChanged(arg0);
}
});
//Definir los elementos en la lista
this.list.setModel(new AbstractListModel() {
String[] values = new String[] {"WHITE", "GRAY", "LIGHT_GRAY", "DARK_GRAY",
"BLACK", "RED", "PINK", "ORANGE", "YELLOW", "GREEN", "MAGENTA", "CYAN", "BLUE"};
public int getSize() {
return values.length;
}
public Object getElementAt(int index) {
return values[index];
}
});
this.scrollPane_1.setViewportView(this.list);
//Generar un panel vaco y aadirlo como componente
this.panelBackground = new JPanel();
this.splitPane.setRightComponent(this.panelBackground);
}
/**
* Identifica el elemento seleccionado en el combobox y muestra el panel correspondiente
* @param e
*/
protected void comboBox_actionPerformed(ActionEvent e) {
String key = this.comboBox.getSelectedItem().toString();
CardLayout layout = (CardLayout) this.cardLayoutPanel.getLayout();
layout.show(this.cardLayoutPanel, key);
}
/**
* Establece el tamao de fuente del area de texto en base al valor actual del slider
* @param arg0
*/
protected void slider_stateChanged(ChangeEvent arg0) {

Diseo y realizacin de servicios de presentacin de entornos grficos.

Colegio Montessori

Cuaderno de Prcticas 2013/2014


Bloque: JAVA

int value = this.slider.getValue();


Font currentFont = this.textArea.getFont();
this.textArea.setFont(new Font(currentFont.getFamily(), currentFont.getStyle(), value));
}
/**
* Establece el color de fondo del panel derecho del JSplitPane en base a la opcin seleccionada en la lista de la derecha
* @param arg0
*/
protected void list_valueChanged(ListSelectionEvent arg0) {
String value = this.list.getSelectedValue().toString();
if(value.equalsIgnoreCase("white"))
this.panelBackground.setBackground(Color.WHITE);
else if(value.equalsIgnoreCase("gray"))
this.panelBackground.setBackground(Color.GRAY);
else if(value.equalsIgnoreCase("light_gray"))
this.panelBackground.setBackground(Color.LIGHT_GRAY);
else if(value.equalsIgnoreCase("dark_gray"))
this.panelBackground.setBackground(Color.DARK_GRAY);
else if(value.equalsIgnoreCase("black"))
this.panelBackground.setBackground(Color.BLACK);
else if(value.equalsIgnoreCase("red"))
this.panelBackground.setBackground(Color.RED);
else if(value.equalsIgnoreCase("pink"))
this.panelBackground.setBackground(Color.PINK);
else if(value.equalsIgnoreCase("orange"))
this.panelBackground.setBackground(Color.ORANGE);
else if(value.equalsIgnoreCase("yellow"))
this.panelBackground.setBackground(Color.YELLOW);
else if(value.equalsIgnoreCase("green"))
this.panelBackground.setBackground(Color.GREEN);
else if(value.equalsIgnoreCase("magenta"))
this.panelBackground.setBackground(Color.MAGENTA);
else if(value.equalsIgnoreCase("cyan"))
this.panelBackground.setBackground(Color.CYAN);
else if(value.equalsIgnoreCase("blue"))
this.panelBackground.setBackground(Color.BLUE);
}
}

Insercin de controles en un Formulario utilizando el Layout GridBagLayout


package dai; //a eleccin del alumno con package o sin el.
import java.awt.*;
import javax.swing.*;
class Ventana extends JFrame{
public Ventana() {
Container c = getContentPane();
JButton b1 = new JButton ( "A" ) ;
JButton b2 = new JButton ( "B" ) ;
JButton b3 = new JButton ( "C" ) ;
JButton b4 = new JButton ( "D" ) ;
JButton b5 = new JButton ( "E" ) ;
c.setLayout (new GridBagLayout());
c.add(b1);
c.add(b2);
c.add(b3);
c.add(b4);
c.add(b5);
}
public static void main ( String [] args) {
Ventana v = new Ventana () ;
v.setSize(300,300) ;
v.setVisible(true);
v.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}

Diseo y realizacin de servicios de presentacin de entornos grficos.

Colegio Montessori

Cuaderno de Prcticas 2013/2014


Bloque: JAVA

Gestin de eventos del ratn


package dai;

//a eleccin del alumno con package o sin el.

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class EventosRaton extends JFrame{
private JButton boton ;
private JTextField campoTexto ;
public EventosRaton () {
class ManipulaMouseEvent implements MouseListener {
public void mouseEntered (MouseEvent e ) {}
public void mouseExited (MouseEvent e ) {}
public void mouseClicked (MouseEvent e ) {}
public void mouseReleased (MouseEvent e ) {}
public void mousePressed (MouseEvent e )
{System.out.println(campoTexto.getText());}
}
Container cp = getContentPane() ;
cp.setLayout(new FlowLayout()) ;
cp.add(new JLabel ("Introduce precio: "));
campoTexto = new JTextField (20) ;
cp.add( campoTexto ) ;
boton=new JButton("Aceptar");
cp.add(boton);
boton.addMouseListener(new ManipulaMouseEvent ());
setSize(500 ,300);
}
public static void main ( String [] args ) {
EventosRaton ven = new EventosRaton();
ven.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ven.setVisible(true);
}
}

Gestin de eventos del ratn II


package dai;

//a eleccin del alumno con package o sin el.

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class EjemploVentana18a{
public static void main ( String [] args ) {
class EventosRaton {
private JButton boton ;
private JTextField campoTexto ;
private JLabel resultado;
public EventosRaton () {
class ManipulaMouseEvent implements MouseListener {
public void mouseEntered (MouseEvent e ) {}
public void mouseExited (MouseEvent e ) {}
public void mouseClicked (MouseEvent e ) {}
public void mouseReleased (MouseEvent e ) {}

Diseo y realizacin de servicios de presentacin de entornos grficos.

Cuaderno de Prcticas 2013/2014


Colegio Montessori
Bloque: JAVA
/* public void mousePressed (MouseEvent e )
{System.out.println(campoTexto.getText());
}*/
public void mousePressed (MouseEvent e ) {
String Texto;
Texto = campoTexto.getText();
resultado.setText(Texto);
}
}
JFrame ventana = new JFrame();
Container cp = new Container();
cp.setLayout(new FlowLayout()) ;
cp.add(new JLabel ("Introduce precio: "));
campoTexto = new JTextField (20);
cp.add(campoTexto) ;
boton=new JButton("Aceptar");
cp.add(boton);
boton.addMouseListener(new ManipulaMouseEvent ()) ;
resultado = new JLabel();
cp.add(resultado);
ventana.add(cp);
ventana.setSize(500 ,300);
ventana.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ventana.setVisible(true);
}
}
EventosRaton ventana = new EventosRaton();
}
}

Crear una ventana con rea de texto que visualice la tecla pulsada (incluida Enter,
Retroceso, ), tambin visualizar el cdigo de la tecla por consola.
package dai;

//a eleccin del alumno con package o sin el.

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class EventosTeclado1 {
static class EventosTeclado {
static JTextArea ta = new JTextArea();
static JTextArea ta1 = new JTextArea();//uno para escibir,
ser no editable.
static JScrollPane jsp;
static JFrame ven = new JFrame();
static Container c = new Container();
public EventosTeclado(){
class ManipulaKeyListener implements KeyListener{
public void keyTyped (KeyEvent k){}
public void keyPressed (KeyEvent k){
String letras = k.getKeyText(k.getKeyCode());
ta.append(letras + "\n");
System.out.println(letras);
}

Diseo y realizacin de servicios de presentacin de entornos grficos.

Colegio Montessori

Cuaderno de Prcticas 2013/2014


Bloque: JAVA
public void keyReleased (KeyEvent k){}

}
c.setLayout(null);
jsp = new JScrollPane(ta, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
ta1.setBounds(1, 1, 1, 1);
jsp.setBounds(5, 5, 200, 300);
ta1.setEditable(false);
ta.setEnabled(false);
ta1.addKeyListener(new ManipulaKeyListener());
c.add(jsp);
c.add(ta1);
ven.add(c);
ven.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ven.setSize(220, 340);
ven.setTitle("Eventos de Taclado");
ven.setVisible(true);
}
}
public static void main (String [] args){
new EventosTeclado();
}
}

Gestin de eventos de teclado y ratn (contador de letras y caracteres pulsados)


package dai;
import
import
import
import

//a eleccin del alumno con package o sin el.

java.awt.*;
java.awt.event.*;
javax.swing.*;
java.util.Calendar;

class EventosTeclado extends JFrame{


private JTextArea a ;
private int contadorLetras=0;
private int contadorOtros=0;
private long t1 ;
private long t2 ;
EventosTeclado ( ) {
a = new JTextArea ( ) ;
class ManipulaKeyEvent implements KeyListener{
public void keyPressed(KeyEvent e ){
char car;
car = e.getKeyChar ( ) ;
if (!(Character.isLetter(car))&!(Character.isDigit(car))){
String tecla = e.getKeyText (e.getKeyCode()) ;
if (tecla.compareTo ("Retroceso")==0)
contadorLetras--;
System.out.print(tecla) ;
contadorOtros++;
}
}
public void keyReleased (KeyEvent e ) {}
public void keyTyped (KeyEvent e ) {
char car ;
car = e.getKeyChar() ;

Diseo y realizacin de servicios de presentacin de entornos grficos.

Cuaderno de Prcticas 2013/2014


Colegio Montessori
Bloque: JAVA
if ((Character.isLetter(car))|(Character.isDigit(car))) {
System.out.print(car);
contadorLetras++;
}
}
}
class ManipulaMouseEventInicio implements MouseListener {
public void mouseEntered (MouseEvent e ) {}
public void mouseExited (MouseEvent e ) {}
public void mouseClicked (MouseEvent e ) {}
public void mouseReleased (MouseEvent e ) {}
public void mousePressed (MouseEvent e ) {
contadorLetras=0;
contadorOtros=0;
t1 = Calendar.getInstance().getTimeInMillis();
}
}
class ManipulaMouseEventFin implements MouseListener {
public void mouseEntered (MouseEvent e ) {}
public void mouseExited (MouseEvent e ) {}
public void mouseClicked (MouseEvent e ) {}
public void mouseReleased (MouseEvent e ) {}
public void mousePressed (MouseEvent e ) {
a.setText ( "" ) ;
t2 = Calendar.getInstance().getTimeInMillis();
long tiempo = t2-t1;
System.out.println ( "\n Letras y numeros : " + contadorLetras ) ;
System.out.println ( "Otras t e c l a s : " + contadorOtros ) ;
System.out.println ( "Tiempo ( mi l i s e gundo s ) : " + tiempo ) ;
}
}
ManipulaKeyEvent mce = new ManipulaKeyEvent();
a.addKeyListener (mce);
getContentPane().add(a, BorderLayout .CENTER) ;
JButton botonInicio = new JButton ( " I n i c i o " ) ;
getContentPane().add(botonInicio, BorderLayout.NORTH) ;
botonInicio.addMouseListener ( new ManipulaMouseEventInicio()) ;
JButton botonFin = new JButton ( "Resultado " );
botonFin.addMouseListener ( new ManipulaMouseEventFin ( ) ) ;
getContentPane( ).add ( botonFin , BorderLayout.SOUTH) ;
setSize(400 ,400) ;
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) ;
show();
}
public static void main ( String [ ] args ) {
new EventosTeclado() ;
}
}

Diseo y realizacin de servicios de presentacin de entornos grficos.

Cuaderno de Prcticas 2013/2014


Bloque: JAVA

Colegio Montessori

Gestin de Ficheros de texto y binarios

Ejercicios resueltos

Lectura de un fichero de texto


import java.io.*;
class Fichero1 {
public static void main(String[] arg) {
File archivo = null;
FileReader fr = null;
try {
archivo = new File("C:\\archivo.txt");
String linea;
fr = new FileReader(archivo);
BufferedReader br = new BufferedReader(fr);
while ((linea = br.readLine()) != null)
System.out.println(linea);
} catch (IOException e) {
System.out.println(e);
} finally {
try { //el bloque finally se ejecuta siempre, por eso, si se
cierra el fichero
if (fr!=null){ //al final del primer try, y ha dado un
error antes, pasara
fr.close(); //al 1er catch y luego saldra, dejndolo
abierto. Es conveniente
} //cerrarlo aqu, comprobando que no sea -por un error
anterior, como
} catch (IOException e) { // no tener permisos de lectura o
que no exista - de valor null.
System.out.println(e);
}
}
}

Escritura de un fichero de texto (sobreescribiendo el contenido actual)


import java.io.*;
public class EscribeFichero {
public static void main(String[] args) {
try {
FileWriter fichero = new FileWriter("c:/prueba.txt");
PrintWriter pw = new PrintWriter(fichero);
for (int i = 0; i < 10; i++)
pw.println("Linea " + i);
pw.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}

Aadir texto al final de un fichero de texto


FileWriter fichero = new FileWriter("c:/prueba.txt",true);

Ficheros de texto INI.


Los ficheros *.INI son ficheros escritos en texto plano que leen y
modifican las aplicaciones, en ellos se contiene usualmente
informacin para la configuracin de las aplicaciones o parmetros
iniciales de la mismas.
Para nuestro curso lo utilizaremos como fichero donde se guardarn los
valores de conexin a la bases de datos MySQL.

Diseo y realizacin de servicios de presentacin de entornos grficos.

Cuaderno de Prcticas 2013/2014


Colegio Montessori
Bloque: JAVA
Todos los ficheros INI responden al mismo formato, primero es una
etiqueta que informa del valor que vendr a continuacin, despus un
igual (en la mayora de los casos) y por ltimo el valor que loe
queremos asignar a la etiqueta.
Un ejemplo de estos ficheros podra ser:
[MySQL]
servidor=127.0.0.1
usuario=root
clave=micontrasea

NOTA: Es recomendable no utilizar caracteres fuera del ASCII bsico.

Copia de un fichero binario en otro (Lectura y Escritura)


import
import
import
import

java.io.BufferedInputStream;
java.io.BufferedOutputStream;
java.io.FileInputStream;
java.io.FileOutputStream;

public class CopiaFicheros {


public static void main(String[] args) {
copia ("c:/ficheroOrigen.bin", "c:/ficheroDestino.bin");
}
public static void copia (String ficheroOriginal, String
ficheroCopia)
{
try
{
// Se abre el fichero original para lectura
FileInputStream fileInput = new
FileInputStream(ficheroOriginal);
BufferedInputStream bufferedInput = new
BufferedInputStream(fileInput);
// Se abre el fichero donde se har la copia
FileOutputStream fileOutput = new
FileOutputStream (ficheroCopia);
BufferedOutputStream bufferedOutput = new
BufferedOutputStream(fileOutput);
// Bucle para leer de un fichero y escribir en el otro.
byte [] array = new byte[1000];
int leidos = bufferedInput.read(array);
while (leidos > 0) {
bufferedOutput.write(array,0,leidos);
leidos=bufferedInput.read(array);
}
// Cierre de los ficheros
bufferedInput.close();
bufferedOutput.close();
}
catch (Exception e) {
e.printStackTrace();
}
}
}

Diseo y realizacin de servicios de presentacin de entornos grficos.

Colegio Montessori

Cuaderno de Prcticas 2013/2014


Bloque: JAVA

Conexin a Bases de Datos (Access y MySQL)

Ejercicios resueltos

Conexin con Microsoft Access a travs de JDBC utilizando un Origen de Datos


Supongamos ahora que necesita conectar una aplicacin en Java con Access, sea porque
es su primer pinino o porque realmente los requerimientos de su sistema se adaptan a
esta base de datos. Para este ejemplo, supongamos que la base de datos de Access se
crea en el siguiente directorio:
C:\proyecto\bd1.mdb
Antes de mostrar el cdigo en java para conectar la aplicacin a esta base de datos, se
mostrar la forma de crear el driver u origen de datos (DSN) de la base de datos, para
ello se procede de la siguiente manera (Windows 2000, XP).
1. Hacer click en el botn inicio.
2.
Seleccionar Panel de Control.
3.
Hacer doble click en el icono de Herramientas administrativas.
4.
Hacer doble click en orgenes de datos (ODBC). Aparecer la pantalla
Administrador de orgenes de datos ODBC.

5.

De la pantalla anterior elija la pestaa DSN de usuario y posteriormente


oprima el botn Agregar
6.
Elija de la lista de drivers desplegada, el driver Microsoft Access Driver
(*.mdb) y enseguida oprima el botn finalizar.

Diseo y realizacin de servicios de presentacin de entornos grficos.

Colegio Montessori

7.

8.

Cuaderno de Prcticas 2013/2014


Bloque: JAVA

Aparecer la pantalla de Configuracin de ODBC Microsoft Access, llene


los campos de esta pantalla como se muestra a continuacin. En esta misma
pantalla, en el apartado Base de datos oprima el botn Seleccionar y seleccione
el directorio de la base de datos (C:proyectobd1.mdb). Oprima enseguida el
botn Avanzadas

En la pantalla de opciones avanzadas debe crear un Nombre de inicio de


sesin y Contrasea . En nuestro caso el inicio de sesin ser cvazquez y la
contrasea vazquez. En el apartado Opciones, seleccione el campo Driver y
establezca el Valor de Driver como PDRV o como lo haya llamado.

Diseo y realizacin de servicios de presentacin de entornos grficos.

Cuaderno de Prcticas 2013/2014


Bloque: JAVA

Colegio Montessori

Oprima el botn Aceptar. Oprima a su vez los botones aceptar de las pantallas
subsecuentes. Con esto el driver ya ha sido creado y puede ser accedido desde nuestra
aplicacin.
El resultado de la creacin del driver de la base de datos que se usa en este proyecto de
ejemplo es el siguiente:
Nombre de driver: PDRV
Nombre de inicio de sesin: cvazquez
Contrasea: vazquez
Estos campos sern utilizados desde la aplicacin en Java para conectarse a la base de
datos.
La siguiente clase en Java, contiene los mtodos necesarios para conectar nuestra
aplicacin con la base de datos Access.
package jdbc01;
import java.sql.*;
import java.lang.ClassNotFoundException;
public class jdbc01_conexion_access {
public static void main(String[] args) {
try {
/*** Registro de driver y conexin a base de datos ****/
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con = DriverManager.getConnection(
"jdbc:odbc:PDRV", "cvazquez", "vazquez");
/***** Ejecutar sentencias ********/
Statement sentencia = con.createStatement();
sentencia.executeUpdate( "INSERT INTO persona (nif, nombre)
VALUES ('76237006P', 'paco')");
ResultSet rs = sentencia.executeQuery( "SELECT nif, nombre, edad
FROM persona" );
/*** Recorrer fila a fila el resultado ****/
while ( rs.next() ) {
String res = rs.getString("nif") +" "+ rs.getString("nombre")
+ ", " + rs.getInt("edad");
System.out.println( res );
}
/*** Cerramos ***/
sentencia.close();
con.close();
}
catch( ClassNotFoundException e ) {
e.printStackTrace(); }
catch (SQLException e) {
e.printStackTrace(); }
}
}

Conexin directa con Microsoft Access a travs de JDBC (Listando los datos en
pantalla)

Diseo y realizacin de servicios de presentacin de entornos grficos.

Colegio Montessori

Cuaderno de Prcticas 2013/2014


Bloque: JAVA

package dai;
import java.sql.*;
import javax.swing.*;
import java.awt.*;
public class ConexionAccess2 {
public static void main(String[] args) {
DefaultListModel datos = new DefaultListModel();
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
String db = "jdbc:odbc:Driver={Microsoft Access Driver
(*.mdb)};DBQ=C:\\centro.mdb";
Connection con = DriverManager.getConnection(db);
Statement sentencia = con.createStatement();
ResultSet rs = sentencia.executeQuery("SELECT * FROM
Alumnos");
while (rs.next()) {
datos.addElement(rs.getString("DNI") + " " +
rs.getString("nombre") + " " +
rs.getString("apellidos") + " " +
rs.getString("poblacion") + ", " +
rs.getString("provincia") + " - " +
rs.getString("cp") + "\n");
}
sentencia.close();
con.close();
} catch (Exception e) {
e.printStackTrace();
;
}
JFrame ven = new JFrame();
Container c = new Container();
c.setLayout(null);
JList lista = new JList(datos);
lista.setBounds(10,10,475,480);
c.add(lista);
ven.add(c);
ven.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ven.setSize(500,500);
ven.setVisible(true);
}
}

Conectar con una Base de Datos MySQL a travs de JDBC


import java.sql.*;
public class Conexion {
public static void main(String args[]) {
try {
//Cargamos el puente JDBC => Mysql
System.out.println("Intentando cargar el conector...");
Class.forName("com.mysql.jdbc.Driver");
//Intentamos conectarnos a la base de Datos en este caso
una base llamada temp
System.out.println("Conectando a la base...");

Diseo y realizacin de servicios de presentacin de entornos grficos.

Cuaderno de Prcticas 2013/2014


Colegio Montessori
Bloque: JAVA
Connection con = DriverManager.getConnection(
"jdbc:mysql://localhost/temp", "root", ""
);
System.out.println("Conexion a BD establecida");
} catch(SQLException ex) {
System.out.println("Error de mysql");
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch(Exception e) {
System.out.println("Se produjo un error inesperado:
"+e.getMessage());
}
}
}
/* Debe producir una salida como esta:
Intentando cargar el conector...
Conectando a la base...
Conexion a BD establecida
*/

Listar los datos de una tabla en un JTable


package dai;
import java.awt.*;
import java.sql.*;
import javax.swing.*;
public class ConexionAccess4 {
public static void main(String[] args) {
String data[][] = new String [50][6];
try {
int i=0;
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
String db = "jdbc:odbc:Driver={Microsoft Access Driver
(*.mdb)};DBQ=C:\\centro.mdb";
Connection con = DriverManager.getConnection(db);
Statement sentencia = con.createStatement();
ResultSet rs = sentencia.executeQuery("SELECT * FROM
Alumnos");
while (rs.next()) {
data[i][0] = (rs.getString("DNI"));
data[i][1] = (rs.getString("nombre"));
data[i][2] = (rs.getString("apellidos"));
data[i][3] = (rs.getString("poblacion"));
data[i][4] = (rs.getString("provincia"));
data[i][5] = (rs.getString("cp"));
i++;
}
sentencia.close();
con.close();
} catch (Exception e) {
e.printStackTrace();
}
String cabecera[] = {"DNI", "Nombre", "Apellidos",
"Poblacin", "Provincia", "CP"};
JTable tabla = new JTable(data, cabecera);
JFrame ven = new JFrame();

Diseo y realizacin de servicios de presentacin de entornos grficos.

Cuaderno de Prcticas 2013/2014


Colegio Montessori
Bloque: JAVA
// Creamos la ventana y visualizamos la Tabla
Container c = new Container();
c.setLayout(null);
tabla.setBounds(10, 10, 475, 480);
c.add(tabla);
ven.add(c);
ven.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ven.setSize(500, 500);
ven.setVisible(true);
}
}

Diseo y realizacin de servicios de presentacin de entornos grficos.

Cuaderno de Prcticas 2013/2014


Bloque: JAVA

Colegio Montessori

JFreeChart
Introduccin
JFreeChart es una biblioteca de cdigo abierto disponible para Java que
permite a los usuarios generar fcilmente grficos y listas. Es particularmente
eficaz para cuando un usuario necesita para generar los grficos que cambian
en un con frecuencia. En estos apuntes se estudiar la manera de crear
imgenes a partir de estas grficas que luego pueden ser visualizadas en Java.

Instalacin
1. Inicie Eclipse.
2. Ir a Archivo -> Nuevo -> Proyecto ....
3. Seleccionar "Java Project" y haga clic en Siguiente. Escriba un nombre de
proyecto y haga clic en Finalizar.
4. Seleccionar el proyecto en la vista Explorador de paquetes. Ir a Proyecto ->
Propiedades.
5. Hacer clic en "Java Build Path" en el lado izquierdo del cuadro de dilogo y
en el lado derecho hacer clic en "Bibliotecas" ficha.
6. Hacer clic en "Aadir JAR externos ..." y buscar JFreeChart-1.0.0.jar y
jcommon-1.0.0.jar. Hacer clic en Aceptar.
7. Seleccionar el proyecto en la vista Explorador de paquetes. Ir a Archivo ->
Nuevo -> Paquete. Dale el paquete un nombre y haga clic en Finalizar.
8. Seleccionar el paquete que acaba de crear en la vista Explorador de
paquetes. Ir a Archivo -> Nuevo -> Clase. dar el clase un nombre y haga clic en
Finalizar.
9. Ahora est listo para comenzar a usar la biblioteca JFreeChart!

Tipos de grficos Construido con JFreeChart


Tendremos en cuenta los siguientes grficos que se pueden crear usando
JFreeChart:

Pie Chart

XY Chart

Bar Chart

Time Series Chart

Ejemplo

de Pie Chart:

Supongamos que queremos construir un grfico circular que refleja el


porcentaje de marcas que se encuentran en el Un rango, B, C, y D. y un ttulo
"CSC408 Mark Distribution"
package dam;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.ChartUtilities;

Diseo y realizacin de servicios de presentacin de entornos grficos.

Colegio Montessori

Cuaderno de Prcticas 2013/2014


Bloque: JAVA

import org.jfree.chart.ChartFactory;
import org.jfree.data.general.DefaultPieDataset;
import java.io.File;
public class PieChartExample {
public static void main(String[] args) {
// Create a simple pie chart
try{
DefaultPieDataset pieDataset = new DefaultPieDataset();
pieDataset.setValue("A", new Integer(75));
pieDataset.setValue("B", new Integer(10));
pieDataset.setValue("C", new Integer(10));
pieDataset.setValue("D", new Integer(50));
JFreeChart chart = ChartFactory.createPieChart
("CSC408 Mark Distribution", // Ttulo
pieDataset, // Datos
true, // Mostrar leyenda
true, // Usar tooltips
false // Configurar el chart para generar URLs?
);
ChartUtilities.saveChartAsJPEG(new File("C:\\chart.jpg"), chart, 500, 300);
} catch (Exception e) {
System.out.println("Ha ocurrido un problema durante la creacin del chart.");
}
}
}

El ejercicio anterior genera un grfico en un fichero jpg en el


directorio raz que posteriormente tendremos que visualizar con algn
visor de grficos.

import
import
import
import
import

org.jfree.chart.*;
org.jfree.data.general.*;
java.awt.*;
java.io.File;
javax.swing.*;

public class PieChartExample2 extends JFrame {


public static void main(String[] args) {
try {
DefaultPieDataset pieDataset = new DefaultPieDataset();
pieDataset.setValue("Luis", new Integer(75));
pieDataset.setValue("Antonio", new Integer(10));
pieDataset.setValue("Mara", new Integer(100));
pieDataset.setValue("Luisa", new Integer(5));
JFreeChart chart = ChartFactory.createPieChart("Distribucin Ventas", pieDataset, true,
true, false);
ChartUtilities.saveChartAsJPEG(new File("chart.jpg"), chart, 500, 300);
ImageIcon img = new ImageIcon("chart.jpg");
JFrame ventana = new JFrame("Grafica Pie Chart");
ventana.setBounds(100, 100, 700, 500);
ventana.setDefaultCloseOperation(3);
JLabel etiqueta = new JLabel(img);
ventana.getContentPane().add(etiqueta,BorderLayout.CENTER);
ventana.setVisible(true);
} catch (Exception e) {
System.out.println("Ha ocurrido un problema durante la creacin del chart.");
}
}
}

Diseo y realizacin de servicios de presentacin de entornos grficos.

Colegio Montessori

Cuaderno de Prcticas 2013/2014


Bloque: JAVA

En el siguiente ejemplo creamos un grfico PIE CHART en dos clases.


package dam;
import
import
import
import
import

javax.swing.JFrame;
org.jfree.chart.*;
org.jfree.chart.plot.PiePlot3D;
org.jfree.data.general.*;
org.jfree.util.Rotation;

class PieChart extends JFrame {


private static final long serialVersionUID = 1L; //Constante que usa PeChart
public PieChart(String applicationTitle, String chartTitle) {
super(applicationTitle);
PieDataset dataset = createDataset();
JFreeChart chart = createChart(dataset, chartTitle);
ChartPanel chartPanel = new ChartPanel(chart);
chartPanel.setPreferredSize(new java.awt.Dimension(500, 270));
setContentPane(chartPanel);
}
private PieDataset createDataset() {
DefaultPieDataset result = new DefaultPieDataset();
result.setValue("Linux", 2.9);
result.setValue("Mac", 2.0);
result.setValue("Windows", 5.1);
result.setValue("Android",1.7);
return result;
}
private JFreeChart createChart(PieDataset dataset, String title) {
JFreeChart chart = ChartFactory.createPieChart3D(title,
dataset,true,true,false);
PiePlot3D plot = (PiePlot3D) chart.getPlot();
plot.setStartAngle(290); //angulo de giro del PIE respecto al eje
plot.setDirection(Rotation.ANTICLOCKWISE); // Direccin de giro del PIE, la otra
opcin es Rotation.CLOCKWISE
plot.setForegroundAlpha(0.45f); // Indica el grado del opacidad del PI siendo 1
el 100%, 0.5f el 50% y 0f el 0%
return chart;
}
}
public class PieChart3D {
public static void main(String[] args) {
PieChart demo = new PieChart("Titulo Ventana", "Cual es el
sistema operative ms usado?");
demo.pack(); // Calcula el tamao del frame para dibujar el PIE
demo.setVisible(true);

Diseo y realizacin de servicios de presentacin de entornos grficos.

Cuaderno de Prcticas 2013/2014


Bloque: JAVA

Colegio Montessori
}
}

Ejemplo XY Chart

Construir una lnea con el siguiente conjunto de (x, y) las coordenadas: {(1, 1),
(1, 2), (2, 1), (3, 9), (4, 10)}.
public class XYChartExample {
public static void main(String[] args) {
// Crear un simple XY chart
XYSeries series = new XYSeries("XYGraph");
series.add(1, 1);
series.add(1, 2);
series.add(2, 1);
series.add(3, 9);
series.add(4, 10);
// Aadir la serie para el conjunto de datos
XYSeriesCollection dataset = new XYSeriesCollection();
dataset.addSeries(series);
// Generar el grfico
JFreeChart chart = ChartFactory.createXYLineChart(
"XY Chart", // Titulo
"x-axis", // Etiqueta del eje X
"y-axis", // Etiqueta del eje y
dataset, // Datos
PlotOrientation.VERTICAL, // Orientacin
true, // Mostrar leyenda
true, // Usar tooltips
false // Configurar el chart para generar URLs?
);
try {
ChartUtilities.saveChartAsJPEG(new File("C:\\chart.jpg"), chart, 500, 300);
} catch (IOException e) {
System.err.println("Ha existido un error durante la creacin del grfico);
}
}
}

Diseo y realizacin de servicios de presentacin de entornos grficos.

Colegio Montessori

Cuaderno de Prcticas 2013/2014


Bloque: JAVA

Modificacin:

En el cdigo actual, hemos utilizado el mtodo


createXYLineChart () para mostrar una lnea de
datos en el grfico. Como alternativa, el mtodo
createXYAreaChart () podra ser utilizado para
pintar el rea bajo la lnea de datos.
Podemos modificar el grfico para mostrar cada uno de los 5 puntos de datos:
XYItemRenderer rend = chart.getXYPlot().getRenderer();
StandardXYItemRenderer rr = (StandardXYItemRenderer)rend;
rr.setPlotShapes(true);

Ejemplo Bar Chart

Construir un grfico de barras que compara las ganancias tomadas en por los
vendedores siguientes: Jane, Tom, Jill, John, Fred.:
public class BarChartExample {
public static void main(String[] args) {
// Crear un grfico Bar chart simple
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.setValue(6, "Profit", "Jane");
dataset.setValue(7, "Profit", "Tom");
dataset.setValue(8, "Profit", "Jill");
dataset.setValue(5, "Profit", "John");
dataset.setValue(12, "Profit", "Fred");
JFreeChart chart = ChartFactory.createBarChart("Comparison between Salesman",
"Salesman", "Profit", dataset, PlotOrientation.VERTICAL,
false, true, false);
try {
ChartUtilities.saveChartAsJPEG(new File("C:\\chart.jpg"), chart, 500, 300);
} catch (IOException e) {
System.err.println("Problem occurred creating chart.");
}
}
}

Diseo y realizacin de servicios de presentacin de entornos grficos.

Colegio Montessori

Cuaderno de Prcticas 2013/2014


Bloque: JAVA

Crear un grfico desde una base de datos en MySQL.


Necesitamos una base de datos en MySQL.
CREATE DATABASE piechart;
USE piechart;
CREATE TABLE `datos` ( `nombre` varchar(20) DEFAULT NULL, `porcentaje` float
DEFAULT NULL) ENGINE=MyISAM DEFAULT CHARSET=latin1;
INSERT INTO `datos` (`nombre`, `porcentaje`) VALUES ('linux', 2.9), ('mac', 2),
('windows', 5.1), ('android', 1.7);

Creamos una clase en un package y definimos la clase Datos


package com.dam.basedatospie.base;
public class Datos {
String nombre;
float porcentaje;
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public float getPorcentaje() {
return porcentaje;
}
public void setPorcentaje(float porcentaje) {
this.porcentaje = porcentaje;
}
}

Conectamos a la BBDD y dibujamos el grfico.

package com.dai.basedatospie.base;
import java.sql.*;
import java.util.ArrayList;
import javax.swing.JFrame;
import org.jfree.chart.*;
import org.jfree.chart.plot.PiePlot3D;
import org.jfree.data.general.*;
import org.jfree.util.Rotation;
class PieChart extends JFrame {

Diseo y realizacin de servicios de presentacin de entornos grficos.

Cuaderno de Prcticas 2013/2014


Bloque: JAVA

Colegio Montessori

private static final long serialVersionUID = 1L; //Constante que usa PeChart
public PieChart(String applicationTitle, String chartTitle) {
super(applicationTitle);
PieDataset dataset = createDataset();
JFreeChart chart = createChart(dataset, chartTitle);
ChartPanel chartPanel = new ChartPanel(chart);
chartPanel.setPreferredSize(new java.awt.Dimension(500, 270));
setContentPane(chartPanel);
}
private

PieDataset createDataset() {

ArrayList<Datos> datos;
datos = new ArrayList<Datos>();
try {
Class.forName("com.mysql.jdbc.Driver");
System.out.println("Conectando a la base...");
Connection con = DriverManager.getConnection(
"jdbc:mysql://localhost/piechart", "root",
""
);
System.out.println("Conexion a BD establecida");
Statement sentencia = con.createStatement();
ResultSet rs = sentencia.executeQuery("SELECT * FROM
datos");
while (rs.next()) {
Datos dato = new Datos();
dato.setNombre(rs.getString("nombre"));
dato.setPorcentaje(rs.getFloat("porcentaje"));
datos.add(dato);
}
sentencia.close();
con.close();
} catch (Exception e) {
e.printStackTrace();
};
DefaultPieDataset result = new DefaultPieDataset();
for(Datos dato : datos){
result.setValue(dato.getNombre(),dato.getPorcentaje());
}
return result;
}
private JFreeChart createChart(PieDataset dataset, String title) {
JFreeChart chart = ChartFactory.createPieChart3D(title,
dataset,true,true,false);
PiePlot3D plot = (PiePlot3D) chart.getPlot();
plot.setStartAngle(290); //angulo de giro del PIE respecto al eje
plot.setDirection(Rotation.ANTICLOCKWISE); // Direccin de giro del PIE, la otra
opcin es Rotation.CLOCKWISE
plot.setForegroundAlpha(0.45f); // Indica el grado del opacidad del PI siendo 1
el 100%, 0.5f el 50% y 0f el 0%
return chart;
}
}
public class PieChart3D {
public static void main(String[] args) {
PieChart demo = new PieChart("Titulo Ventana", "Cual es el
sistema operativo ms usado?");

Diseo y realizacin de servicios de presentacin de entornos grficos.

Colegio Montessori

Cuaderno de Prcticas 2013/2014


Bloque: JAVA
demo.pack(); // Calcula el tamao del frame para dibujar el PIE
demo.setVisible(true);

}
}

Potrebbero piacerti anche