Diseño y realización de servicios de presentación de entornos gráficos.
Cuaderno de Prácticas – Prácticas – 2013/2014 2013/2014 Bloque: JAVA
Colegio Montessori
Bloque: JAVA
Diseño y realización de servicios de presentación de entornos gráficos.
Cuaderno de Prácticas – Prácticas – 2013/2014 2013/2014 Bloque: JAVA
Colegio Montessori
Introducción 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 tenemos recien instalado java. Los números del nombre de la carpeta corresponderán siempre a la versión de Java que hayamos instalado, por lo que podrán 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, todavía no podemos 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 pat h de búsqueda de ejecutables el directorio C:\Archivos de programa\Java\jdk1.5.0_06\bin, programa\Java\jdk1.5.0_06\bin , que es el directorio donde se encuentran los programas javac.exe y jar.exe. Para poner est e directorio en el path de búsqueda de ejecutables hacemos lo siguiente En Windows 2000, XP,vista o Windows 7 vamos al icono "mi pc", le damos con el botón derecho de ratón para sacar el menú, elegimos "propiedades", "propiedades", pestaña "opciones avanzadas" y luego el botón "variables de entorno". Buscamos la variable "Pat h" y la editamos. Al final de lo que tenga en ese momento, añadimos 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", "configuración avanzada del sistema", "variables de entorno" y seguimos como en Windows 2000/XP. En mi caso, después de añadir, quedaría algo como esto: C:\Windows\system32;C:\Windows;C:\A r chi vos de Progr ama\Java\jdk1.5.0_06 ama\Java\jdk1.5.0_06\bin \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 después de haber hecho los cambios. En esa ventana de ms-dos ya deberíamos 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:
Diseño y realización de servicios de presentación de entornos gráficos.
Colegio Montessori
Cuaderno de Prácticas – Prácticas – 2013/2014 2013/2014 Bloque: JAVA
Los ficheros .java que dentro no ponen package, deben colocarse en el directorio
de nuestro proyecto. El siguiente fuente debería 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 debería 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 deberí a 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 directori o 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.
Diseño y realización de servicios de presentación de entornos gráficos.
Colegio Montessori * @author 2º DAM
Cuaderno de Prácticas – Prácticas – 2013/2014 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){
Diseño y realización de servicios de presentación de entornos gráficos.
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 Prácticas – Prácticas – 2013/2014 2013/2014 Bloque: JAVA
Diseño y realización de servicios de presentación de entornos gráficos.
Colegio Montessori
Cuaderno de Prácticas – 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, según cual sea la cla se 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. También es importante ver que hemos separado paquete, subpaquete y el nombre de las cla ses con puntos, y no con las barras \. Finalmente, es importante fijarse que no hemos añadido .class detrás.
Crear un Fichero JAR El formato básico 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 es te comando. La opción c indica que quieres crear un fichero JAR. v - produce un salida verbosa en stderr (en versión 1.1) o stdout (en versión 1.2) mientras se construye el fichero. La salida verbosa te dice el nombre de cada fichero añadido al fichero JAR o los errores que se puedan producir. La opción f indica que quieres que la salida vaya a un fichero en vez de a stdout. La opción m indica que queremos usar nuestro fichero de manifiesto (el caso contrario deberíamos editar el *.jar y añadirle la línea 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 convención, a los ficheros JAR se les da la extensión .jar, aunque no es obligatorio. El argumento fichero(s)-de entrada es una lista delimitada por espacios de uno o más ficheros que deben ser situados dentro de tu fichero JAR. Este argumento puede tener simbolo del comodín *. Si alguno de los fichero(s)-de entrada, es un directorio, el contenido de dicho directorio se añadirá al fichero JAR recursivamente. Las opciones c, v, m y f pueden aparecer en cualquier orden, pero no debe existir ningún espacio entre ellas. Este comando generará un fichero JAR comprimido y lo situará en el dir ectorio actual. El comando también genera un fichero de manifiesto, por defecto. METAINF/MANIFEST.MF, para el archivo JAR. Podrías añadir cualquiera de estas opciones adicionale s a las opciones cf del comando básico.
Diseño y realización de servicios de presentación de entornos gráficos.
Colegio Montessori
Cuaderno de Prácticas – 2013/2014 Bloque: JAVA
0 - indica que no quieres que el fichero JAR sea comprimido. M - indica que no se debería producir el fichero de manifiesto por defecto. m - utilizada para incluir información de manifiesto desde un fichero de manifiesto existente. El formato utilizado por esta opción es
jar vcmf existing-manifest output-file input-file(s)
En la versión 1.1 el formato JAR sólo soporta nombres de ficheros ASCII. La versión 1.2 añade soporte para nombres codificados en UTF8. Un ejemplo de MANIFEST.MF para la versión 1.2 y posteriores sería 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 línea después de la última línea.
Una vez creado un fichero JAR para ejecutarlo l o 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 raíz 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 importación.
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"); } }
Diseño y realización de servicios de presentación de entornos gráficos.
Cuaderno de Prácticas – 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 también será compilado. Después 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 añadiendo la opción “Main Class: mimain”.
Interfaces Introducción
Las interfaces Java son expresiones puras de diseño, se trata de auténticas conceptualizaciones no implementadas (en la propia interfaz) que sirven de guía para definir una determinada línea de conceptos de clase, pero sin desarrollar un mecanismo de solución (código). Se trata de declarar métodos abstractos y constantes que posteriormente puedan ser implementados de diferentes maneras según 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 métodos ?, en una clase además de aparecer los métodos aparecía el código de dichos métodos, en cambio en un interfaz sólo existe la definición del método, no su código. Ejemplo: Un interfaz en el que existen una lista de métodos despegar, aterrizar, recogerTren y sacarTren. Cuando vemos esta interfaz intuimos un avión. El motivo es que el avión es el concepto que engloba las acciones que hemos detallado antes, a pesar que existan muchos objetos avión diferentes entre sí, por eje mplo Airbus A340, Boeing 747, AirBus A300, ... Aunque todos ellos, puedan pertenecer a clases disti ntas, si poseen el interfaz avión, dispondrán de los métodos detallados en la lista del interfaz avión. Esto significa también que a cualquier avión le podemos pedir que vuele, sin importarnos a que clase real pertenezca el avión, evidentemente cada clase especificará como volará el avión (porque proporciona el código de la función volar).
Diseño y realización de servicios de presentación de entornos gráficos.
Colegio Montessori
Cuaderno de Prácticas – 2013/2014 Bloque: JAVA
Declaración
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 declaración que las variables adoptan la declaración en mayúsculas, pues en realidad actuarán como constantes final . Los métodos tras su declaración tienen un punto y coma, en lugar de la de claración de su cuerpo entre llaves. Son métodos abstractos, por tanto, métodos sin implementación. Implementación de una interfaz
Las interfaces carecen de código (funcionalidad) por no estar implementados sus métodos. La palabra reservada implements utilizada en la declaración de una clase indica que la clase implementa la interfaz, es decir, que asume las constantes de la interfaz, y sus métodos (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 métodos que determina la interfaz (metodoAbstracto()), y la validez de las constantes (CONSTANTE ) que define la interfaz durante toda la declaración de la clase. Herencia múltiple
Una interfaz no puede implementar otra interfaz, aunque sí extenderla (extends) ampliándola. Java es un lenguaje que incorpora herencia simple de implementación pero que puede aportar herencia múltiple de interfaz . Esto posibilita la herencia múltiple en el diseño de los programas Java. Una interfaz puede heredar de más de una interfaz antecesora. interface InterfazMultiple extends Interfaz1,Interfaz2{ }
Una clase no puede tener más que una clase antecesora, pero puede implementar más de una interfaz: class MiClase extends SuClasePadre implements Interfaz1,Interfaz2{ }
Ej ercici o 1 I nter faces Crear la interfaz PuedeContar (que es capaz de Contar), un interfaz muy simple que sólo posee un método Contar.
PuedeContar.java
Diseño y realización de servicios de presentación de entornos gráficos.
Colegio Montessori
Cuaderno de Prácticas – 2013/2014 Bloque: JAVA
public interface PuedeContar { public void Contar(); }
Crear la clase Persona que implemente el interfaz PuedeContar y que cuando cuente diga números.
Espanol.java public class Espanol implements PuedeContar { public void Contar() { System.out.println("uno dos tres cuatro cinco seis"); } }
Crear la clase Inglés y Francés que implemente el interfaz PuedeContar y que muestre como cuentan I ngl es.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 Inglés y a un Francés.
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(); } }
Ej ercici o 2 Algunos seres pueden caminar y puede nadar estas dos capacidades s on 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(); }
Diseño y realización de servicios de presentación de entornos gráficos.
Colegio Montessori
Cuaderno de Prácticas – 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 mamífero 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"); ...
I nterf aces.java public class Interfaces { public static void main(String[] args) { Gato felix = new Gato(); felix.caminar(); felix.nadar(); Loro pepe = new Loro(); pepe.caminar(); } }
Creación de Interfaces Gráficos de Usuario con la librería Swing Ejercicios resueltos
Cr eación de un a ventana. package dam; //a elección 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 rótulo a la ventana ven.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE) ; //cierra el objeto JFrame ven.setSize(300,300); // define el tamaño de la ventana //ven.show(); //Se utilizo hasta la versión JDK 1.5 ven.setVisible(true); //importante colocar el setVisible() al final de todos los metodos. } } import javax.swing.JFrame;
Diseño y realización de servicios de presentación de entornos gráficos.
Cuaderno de Prácticas – 2013/2014 Bloque: JAVA
Colegio Montessori
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 inserción de la ventana ventana.setSize(400,400); ventana.setVisible(true); } }
Ubi cación de contr oles en u n f ormul ari o util izando Fl owLayout y un Panel package dam;
//a elección 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); //añadimos 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); } }
I nserción de im ágenes en un contr ol Swing package dam;
//a elección 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); //añadimos el panel al contenedor contenedor.add(new JLabel(img)); ven.add (contenedor); p.setBackground(new Color(255,0,0) );
Diseño y realización de servicios de presentación de entornos gráficos.
Colegio Montessori
Cuaderno de Prácticas – 2013/2014 Bloque: JAVA
p.add(etiqueta); ven.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); ven.setSize(200,200); ven.setVisible(true); } }
Botones package dam;
//a elección 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); //añadimos 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); } }
Contr ol CheckB ox (botón de chequeo) package dam;
//a elección 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); //añadimos el panel al contenedor ven.add (contenedor); contenedor.add(cb) ; ven.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); ven.setSize(300,200); ven.setVisible(true); } }
Diseño y realización de servicios de presentación de entornos gráficos.
Colegio Montessori
Cuaderno de Prácticas – 2013/2014 Bloque: JAVA
Control RadioBu tton (botón de radio) package dam;
//a elección 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); //añadimos el panel al contenedor ven.add (contenedor); p.add(rb) ; ven.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); ven.setSize(300,200); ven.setVisible(true); } }
Agrupaci ón de vari os botones de radio package dam;
//a elección 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); //añadimos 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);
Diseño y realización de servicios de presentación de entornos gráficos.
Colegio Montessori
Cuaderno de Prácticas – 2013/2014 Bloque: JAVA
} }
Contr ol ComboBox ( Caja de texto desplegable) package dai;
//a elección 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); //añadimos 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); } }
Car ga de un ComboBox con l os datos de un vector package dai;
//a elección 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); //añadimos 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);
Diseño y realización de servicios de presentación de entornos gráficos.
Colegio Montessori
Cuaderno de Prácticas – 2013/2014 Bloque: JAVA
ven.setSize(300, 200); ven.setVisible(true); } }
Uso y carga de un control JL ist 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); //añadimos 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 tabl as 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" } ,
Diseño y realización de servicios de presentación de entornos gráficos.
Colegio Montessori
Cuaderno de Prácticas – 2013/2014 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 pin tado de fi las en un a 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, pasándole todos los parámetros de la tabla original, los cuales vienen en el constructor de este método*/
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){
Diseño y realización de servicios de presentación de entornos gráficos.
Colegio Montessori
Cuaderno de Prácticas – 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 contr ol JT ree (Árbol ) package dai;
//a elección del alumno con package o sin el.
Diseño y realización de servicios de presentación de entornos gráficos.
Colegio Montessori
Cuaderno de Prácticas – 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); } }
M enús despl egables package dai;
//a elección del alumno con package o sin el.
import java.awt.*; import javax.swing.*; public class EjemploVentana15 { public static void main(String[] args) {
Diseño y realización de servicios de presentación de entornos gráficos.
Colegio Montessori
Cuaderno de Prácticas – 2013/2014 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 Absolu te L ayout /** * Prepara y muestra una ventana cuyo contenedor principal no tiene ningún tipo de layout que maneje su contenido * Cuando no se especifica un layout (se establece un valor null c omo layout), es necesario especificar la posición de todos los elementos dentro del contenedor con respecto a la esquina superior izquierda de su contenedor, así como el tamaño que van a tener. * Para posicionar dichos elementos se usa el método setBounds(x, y, width, height) sobre cada uno de ellos. * Cuando el contenedor es redimensionado, los elementos que contiene mantienen su posición y tamaño 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; /** * Método principal que lanza la aplicación */ 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 */
Diseño y realización de servicios de presentación de entornos gráficos.
Colegio Montessori
Cuaderno de Prácticas – 2013/2014 Bloque: JAVA
public UsoAbsoluteLayout() { jbInit(); } /** * Inicializa y personaliza los componentes del GUI. * La ventana contiene una etiqueta, un botón y un campo de texto cuyos tamaños y posiciones han sido especificados de forma absoluta/manual */ private void jbInit() { //Establecer título para la ventana setTitle("Ventana"); //Establecer tamaño inicial de la ventana setSize(new Dimension(500, 400)); //Establecer opción de salida por defecto => Salir de la aplicación 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); //Añadir al panel una etiqueta a 69 píxeles de la izquierda y 63 de la parte superior, y con un tamaño de 46x14 píxeles this.lblEtiqueta = new JLabel("Etiqueta"); this.lblEtiqueta.setBounds(69, 63, 46, 14); getContentPane().add(this.lblEtiqueta); //Añadir al panel un botón a 147 píxeles de la izquierda y 176 de la parte superior, y c on un tamaño de 89x23 píxeles this.btnNewButton = new JButton("Botón"); this.btnNewButton.setBounds(147, 176, 89, 23); getContentPane().add(this.btnNewButton); //Añadir al panel un campo de texto a 321 píxeles de la izquierda y 263 de la parte superior, y con un tamaño de 109x20 píxeles this.textField = new JTextField(); this.textField.setBounds(321, 263, 109, 20); getContentPane().add(this.textField); } }
Bor der L ayout import java.awt.BorderLayout; import java.awt.EventQueue; import j avax.swing.JFrame; import j avax.swing.JPanel; import java.awt.Color; import j ava.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 est os 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 */
Diseño y realización de servicios de presentación de entornos gráficos.
Colegio Montessori
Cuaderno de Prácticas – 2013/2014 Bloque: JAVA
private JPanel panel_3; /** Panel posicionado como NORTH */ private JPanel panel_4; /** * Método principal que lanza la aplicación */ 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 redimensionarán a lo ancho y los paneles EAST y WEST se r edimensionarán a lo alto */ private void jbInit() { //Establecer título para la ventana setTitle("Ventana"); //Establecer tamaño inicial de la ventana setSize(new Dimension(500, 400)); //Establecer opción de salida por defecto => Salir de la aplicación 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 tamaño 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)); //Añadir 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 tamaño 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)); //Añadir 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 tamaño 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)); //Añadir el panel al componente principal de la ventana especificando la propiedad WEST para que se posicione correctamente
Diseño y realización de servicios de presentación de entornos gráficos.
Colegio Montessori
Cuaderno de Prácticas – 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 tamaño del panel SOUTH. La altura será fija, pero la anchura será i gnorada, ya que se ajustará en anchura al elemento padre this.panel_3.setPreferredSize(new Dimension(10, 10)); //Añadir 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); //Añadir 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 L ayout import j ava.awt.Dimension; import java.awt.EventQueue; import j avax.swing.JFrame; import java.awt.CardLayout; import java.awt.BorderLayout; import javax.swing.JComboBox; import javax.swing.DefaultComboBoxModel; import j avax.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 sólo 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 botón cada vez que se cambia la opción seleccionada en dicha lista. * Normalmente un contenedor cuyos elementos son manejados por un CardLayout se usa para añadir otros contenedores con sus respectivos layouts, aunque en el ejemplo se ha simplificado a tres componentes básicos */ public class UsoCardLayout extends JFrame { private JComboBox comboBox; private JPanel panel; private JLabel lblNewLabel; private JButton btnNewButton; private JTextField textField; /** * Método principal que lanza la aplicación */ 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(); } } });
Diseño y realización de servicios de presentación de entornos gráficos.
Colegio Montessori
Cuaderno de Prácticas – 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 opción seleccionada cambia lo que se muestra en otro panel contenedor */ private void jbInit() { //Establecer título para la ventana setTitle("Ventana"); //Establecer tamaño inicial de la ventana setSize(new Dimension(500, 400)); //Establecer opción de salida por defecto => Salir de la aplicación 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 añadir un desplebagle arriba y otro panel que ocupe el resto del espacio getContentPane().setLayout(new BorderLayout()); //Añadir un combobox a la parte superior del contenedor principal, de una altura de 40 píxeles y con tres opciones this.comboBox = new JComboBox(); //Añadir 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 tamaño del desplegable para especificar la altura. this.comboBox.setPreferredSize(new Dimension(28, 40)); getContentPane().add(this.comboBox, BorderLayout.NORTH); //Añadir al contenedor principal un nuevo panel ocupando el espacio libre this.panel = new JPanel(); getContentPane().add(this.panel, BorderLayout.CENTER); //Al nuevo panel le a ñadimos un CardLayout para manejar su contenido this.panel.setLayout(new CardLayout()); //Añadir 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"); //Añadir al nuevo panel un botón y especificar la clave "Panel de botón" this.btnNewButton = new JButton("New button"); this.panel.add(this.btnNewButton, "Panel c on boton"); //Añadir 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 c ambia la opción 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 conversión de tipo previa CardLayout layout = (CardLayout) this.panel.getLayout(); //Una vez tenemos el CardLayout le decimos qué elemento debe mostrar especificándole el contenedor de dicho elemento y su clave
Diseño y realización de servicios de presentación de entornos gráficos.
Colegio Montessori
Cuaderno de Prácticas – 2013/2014 Bloque: JAVA
layout.show(this.panel, key); } }
F low L ayout import j ava.awt.Dimension; import java.awt.EventQueue; import j avax.swing.JFrame; import j ava.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, añadiéndose uno detrás de otr o hasta que no caben más en una linea y saltan a la siguiente. * Se puede hacer que los c omponentes fuyan de izquierda a derecha h asta completar una fila, de izquierda a derecha hasta completar una fila o desde el c entro hacia los extremos. * También se puede especificar qué separación 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; /** * Método principal que lanza la aplicación */ 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 detrás de otro desde el centro del contenedor principal hacia los lados. Si se reduce el ta maño de la ventana, los botones que no quepan en la primera fila saltarán a la siguiente repitiendo el mismo comportamiento */ private void jbInit() { //Establecer título para la ventana setTitle("Ventana"); //Establecer tamaño inicial de la ventana setSize(new Dimension(500, 400)); //Establecer opción de salida por defecto => Salir de la aplicación al cerrar la ventana setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //Mostrar la ventana centrada en la pantalla setLocationRelativeTo(null); //Añadir el FlowLayout al contenedor principal, especificando que los componentes en su interior deben de fluir desde el centro hacia los extremos y con una separación de 5 píxeles entre los componentes a los dos lados y 30 píxeles arriba y abajo
Diseño y realización de servicios de presentación de entornos gráficos.
Colegio Montessori
Cuaderno de Prácticas – 2013/2014 Bloque: JAVA
// Los valores para FloeLayout. son: CENTER, LEFT, RIGHT, TRAILING, LEADING getContentPane().setLayout(new FlowLayout(FlowLayout.CENTER, 5, 30)); //Generar el botón que aparecerá en primer lugar, y añadirlo al panel contenedor sin especificar nada más. El layout se encargará de posicionarlo this.btnNewButton = new JButton("Botón"); getContentPane().add(this.btnNewButton); //Generar el botón que aparecerá en segundo lugar, y añadirlo al panel contenedor sin especificar nada más. El layout se encargará de posicionarlo this.btnNewButton_1 = new JButton("Botón 1"); getContentPane().add(this.btnNewButton_1); //Generar el botón que aparecerá en tercer lugar, y añadirlo al panel contenedor sin especificar nada más. El layout se encargará de posicionarlo this.btnNewButton_2 = new JButton("Botón 2"); getContentPane().add(this.btnNewButton_2); //Generar el botón que aparecerá en cuarto lugar, y añadirlo al panel contenedor sin especificar nada más. El layout se encargará de posicionarlo this.btnNewButton_3 = new JButton("Botón 3"); getContentPane().add(this.btnNewButton_3); //Generar el botón que aparecerá en quinto lugar, y a ñadirlo al panel contenedor sin especificar nada más. El layout se encargará de posicionarlo this.btnNewButton_4 = new JButton("Botón 4"); getContentPane().add(this.btnNewButton_4); } }
Gri d Layout import j ava.awt.Dimension; import java.awt.EventQueue; import j avax.swing.JFrame; import j ava.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 número definido de filas y columnas, repartiendo todo el espacio disponible por igual entre el número de celdas resultante. * Una vez especificadas las filas y columnas necesarias, todos los elementos añadidos al contenedor se irán 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 redimensionarán 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; /** * Método principal que lanza la aplicación */ 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(); } } }); } /**
Diseño y realización de servicios de presentación de entornos gráficos.
Colegio Montessori
Cuaderno de Prácticas – 2013/2014 Bloque: JAVA
* Construye una nueva ventana */ public UsoGridLayout() { jbInit(); } /** * Inicializa y personaliza los componentes del GUI. */ private void jbInit() { //Establecer título para la ventana setTitle("Ventana"); //Establecer tamaño inicial de la ventana setSize(new Dimension(500, 400)); //Establecer opción de salida por defecto => Salir de la aplicación al cerrar la ventana setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //Mostrar la ventana centrada en la pantalla setLocationRelativeTo(null); //Añadir el GridLayout al contenedor principal, especificando que queremos que tenga tres filas y tres columnas, y que la separación entre las celdas resultantes sea de 10 píxeles en horizontal y en vertical getContentPane().setLayout(new GridLayout(3, 3, 10, 10)); //Generar el primer botón y añadirlo al contenedor manejado por el GridLayout this.btnNewButton = new JButton("Botón 1"); getContentPane().add(this.btnNewButton); //Generar el segundo botón y añadirlo al contenedor manejado por el GridLayout this.btnNewButton_1 = new JButton("Botón 2"); getContentPane().add(this.btnNewButton_1); //Generar el tercer botón y añadirlo al contenedor manejado por el GridLayout this.btnNewButton_2 = new JButton("Botón 3"); getContentPane().add(this.btnNewButton_2); //Generar el cuarto botón y añadirlo al contenedor manejado por el GridLayout this.btnNewButton_3 = new JButton("Botón 4"); getContentPane().add(this.btnNewButton_3); //Generar el quinto botón y añadirlo al contenedor manejado por el GridLayout this.btnNewButton_4 = new JButton("Botón 5"); getContentPane().add(this.btnNewButton_4); //Generar el sexto botón y añadirlo al contenedor manejado por el GridLayout this.btnNewButton_5 = new JButton("Botón 6"); getContentPane().add(this.btnNewButton_5); } }
Box L ayout import j ava.awt.Dimension; import java.awt.EventQueue; import j avax.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 c ontenedor bien apilados uno encima de otro o bien en una fila * También nos permite definir la alineación de cada una de las filas, y se queremos que los c omponentes 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; /** * Método principal que lanza la aplicación */ 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() {
Diseño y realización de servicios de presentación de entornos gráficos.
Cuaderno de Prácticas – 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 título para la ventana setTitle("Ventana"); //Establecer tamaño inicial de la ventana setSize(new Dimension(500, 400)); //Establecer opción de salida por defecto => Salir de la aplicación 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)); //Añadimos el primer botón al contenedor manejado por el BoxLayout. No hay que especificar nada más this.btnNewButton = new JButton("Botón 1"); this.btnNewButton.setAlignmentX(Component.CENTER_ALIGNMENT); getContentPane().add(this.btnNewButton); //Añadimos el segundo botón al contenedor manejado por el BoxLayout. No hay que especificar nada más this.btnNewButton_1 = new JButton("Botón 2"); this.btnNewButton_1.setAlignmentX(Component.CENTER_ALIGNMENT); getContentPane().add(this.btnNewButton_1); //Añadimos el tercer botón al contenedor manejado por el BoxLayout. No hay que especificar nada más this.btnNewButton_2 = new JButton("Botón 3"); this.btnNewButton_2.setAlignmentX(Component.CENTER_ALIGNMENT); getContentPane().add(this.btnNewButton_2); } }
JSplitPane import java.awt.BorderLayout; import java.awt.EventQueue; import j avax.swing.JFrame; import j avax.swing.JPanel; import javax.swing.border.EmptyBorder; import javax.swing.JSplitPane; import j avax.swing.JList; import j ava.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 añadiendo una linea de división en medio que es redimensionable * Cuando se arrastra dicha linea de división uno de los componentes aumenta de tamaño y el otro disminuye. El espacio se puede dividir en horizontal o en vertical
Diseño y realización de servicios de presentación de entornos gráficos.
Colegio Montessori
Cuaderno de Prácticas – 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; /** * Método principal que lanza la aplicación */ 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 opción en la lista de la derecha, se va conmutando entre los distintos subpaneles */ private void jbInit() { //Establecer título para la ventana setTitle("Ventana"); //Establecer tamaño inicial de la ventana setSize(new Dimension(500, 400)); //Establecer opción de salida por defecto => Salir de la aplicación 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 añadirlo 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 tamaño inicial de la lista, lo que hará que el divisor del JSplitPane aparezca en esa posición this.list.setPreferredSize(new Dimension(150, 0)); this.splitPane.setLeftComponent(this.list);
Diseño y realización de servicios de presentación de entornos gráficos.
Colegio Montessori
Cuaderno de Prácticas – 2013/2014 Bloque: JAVA
//Añadir 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); //Añadir 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 ca mbia 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 j ava.awt.Dimension; import java.awt.EventQueue; import j avax.swing.JFrame; import j avax.swing.JPanel; import javax.swing.border.EmptyBorder; import javax.swing.JTabbedPane; import javax.swing.ImageIcon; import javax.swing.JLabel; import javax.swing.JButton; import j ava.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 pestañas. Normalmente a cada una de las pestañas se le agrega otro contenedor con más componentes * Las pestañas pueden mostrarse en cualquier posición (arriba, abajo, izquierda o derecha) y pueden tener texto, imagen o amb os 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;
Diseño y realización de servicios de presentación de entornos gráficos.
Colegio Montessori
Cuaderno de Prácticas – 2013/2014 Bloque: JAVA
/** * Método principal que lanza la aplicación */ 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 redimensionarán a lo ancho y los paneles EAST y WEST se redimensionarán a lo alto */ private void jbInit() { //Establecer título para la ventana setTitle("Ventana"); //Establecer tamaño inicial de la ventana setSize(new Dimension(500, 400)); //Establecer opción de salida por defecto => Salir de la aplicación al cerrar la ventana setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //Mostrar la ventana centrada en la pantalla setLocationRelativeTo(null); //Añadir un BorderLayout como el layout del contenedor principal getContentPane().setLayout(new BorderLayout(0, 0)); //Añadir el JTabbedPane al contenedor principal y especificar que queremos que las pestañas aparezcan abajo this.tabbedPane = new JTabbedPane(JTabbedPane.BOTTOM); getContentPane().add(this.tabbedPane, BorderLayout.CENTER); //Generar un nuevo JPanel y agregarlo como primera pestaña con el texto y el icono especificados this.panel = new JPanel(); this.tabbedPane.addTab("Primera pestaña", 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 pestaña con posicionamiento absoluto this.lblPrimeraPestaa = new JLabel("Primera pestaña"); this.lblPrimeraPestaa.setBounds(99, 71, 128, 21); this.panel.add(this.lblPrimeraPestaa); //Agregar un botón al panel de la primera pestaña 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 pestaña con el texto y el ToolTip especificados this.panel_1 = new JPanel(); this.tabbedPane.addTab("Segunda pestaña", null, this.panel_1, "Este es el ToolTip de la segunda pestaña"); this.panel_1.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5)); //Generar un botón y agregarlo a la segunda pestaña this.btnNewButton_1 = new JButton("Botón"); this.panel_1.add(this.btnNewButton_1); //Generar un ñultimo panel y agregarlo como tercera pestaña 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 pestaña
Diseño y realización de servicios de presentación de entornos gráficos.
Colegio Montessori
Cuaderno de Prácticas – 2013/2014 Bloque: JAVA
this.textField = new JTextField(); this.textField.setText("Tercera pestaña"); this.panel_2.add(this.textField, BorderLayout.CENTER); } }
JScrollPane import java.awt.BorderLayout; import j ava.awt.Dimension; import java.awt.EventQueue; import j avax.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 más grande que el contenedor, y mediante barras de scroll desplaza rnos 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 tamaño de su contenedor, pero se puede usar con cualquier tipo de contenido. * Además, cuando se usoa junto con una tabla, es el propio JScrollPane el que muestra las cabeceras de dicha tabla, manteniéndolas siempre visibles aunque hagamos scroll */ public class UsoJScrollPane extends JFrame { private JScrollPane scrollPane; private JTable table; /** * Método principal que lanza la aplicación */ 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 pequeña 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 título para la ventana setTitle("Ventana"); //Establecer tamaño inicial de la ventana setSize(new Dimension(500, 400)); //Establecer opción de salida por defecto => Salir de la aplicación al cerrar la ventana setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //Mostrar la ventana centrada en la pantalla setLocationRelativeTo(null); //Añadir un BorderLayout al contenedor principal getContentPane().setLayout(new BorderLayout(0, 0)); //Generar un JScrollPane y añadirlo al contenedor principal this.scrollPane = new JScrollPane(); getContentPane().add(this.scrollPane, BorderLayout.CENTER);
Diseño y realización de servicios de presentación de entornos gráficos.
Colegio Montessori
Cuaderno de Prácticas – 2013/2014 Bloque: JAVA
//Generar una tabla y añadirla al JScrollPane. La añadimos con el método 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 tamaño 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 j ava.awt.Dimension; import java.awt.EventQueue; import java.awt.Font; import javax.swing.ButtonGroup; import j avax.swing.JFrame; import javax.swing.JTabbedPane; import j avax.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 j ava.awt.GridLayout; import javax.swing.DefaultComboBoxModel; import j avax.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 j avax.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;
Diseño y realización de servicios de presentación de entornos gráficos.
Colegio Montessori
Cuaderno de Prácticas – 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; /** * Método principal que lanza la aplicación */ 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 título para la ventana setTitle("Ventana"); //Establecer tamaño inicial de la ventana setSize(new Dimension(757, 492)); //Establecer opción de salida por defecto => Salir de la aplicación al cerrar la ventana setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //Mostrar la ventana centrada en la pantalla setLocationRelativeTo(null); //Añadir un BorderLayout que maneje el contenedor principal getContentPane().setLayout(new BorderLayout(0, 0)); //Crear un panel de pestañas (JTabbedPane) y añadirlo 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 añadirlo como primera pestaña, 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 añadirlo en la parte superior de la primera pestaña this.panel_1 = new JPanel(); this.panel.add(this.panel_1, BorderLayout.NORTH); //Generar un combobox y añadirlo al panel superior de la primera pestaña this.comboBox = new JComboBox(); //Añadir un manejador de eventos al combobox, que se lance cada vez que se c ambie la opción seleccionada this.comboBox.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) {
Diseño y realización de servicios de presentación de entornos gráficos.
Cuaderno de Prácticas – 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 pestaña. Le añadiremos un CardLayout y otros tres paneles que serán 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); //Añadir al panel sin Layout un botón con la posición y el tamaño definidos this.btnHola = new JButton("Hola"); this.btnHola.setBounds(61, 73, 89, 23); this.panel_3.add(this.btnHola); //Añadir al panel sin Layout otro panel manejado por un BoxLayout, con un borde y un título en la parte superior de dicho borde. Dentro añadiremos 3 radiobuttons this.panel_6 = new JPanel(); this.panel_6.setBorder(new TitledBorder(null, "Grupo", TitledBorder.LEADING, TitledBorder.TOP, null, null)); //Definir el tamaño y la posición 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 podrían 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 radi obuttons 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 añadirlo 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 separación de 5 píxeles entre sus componentes. Añadirlo 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 añadirlos 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 añadirlo al panel del CardLayout this.borderLayoutPanel = new JPanel(); this.cardLayoutPanel.add(this.borderLayoutPanel, "BorderLayout");
Diseño y realización de servicios de presentación de entornos gráficos.
Colegio Montessori
Cuaderno de Prácticas – 2013/2014 Bloque: JAVA
this.borderLayoutPanel.setLayout(new BorderLayout(0, 0)); //Generar un JSlider y establecer su ToolTip, su valor inicial, su valor mínimo y su valor máximo this.slider = new JSlider(); this.slider.setToolTipText("Aumentar tamaño del texto"); //Tooltip this.slider.setValue(13); //Valor inicial this.slider.setMaximum(113); //Valor máximo this.slider.setMinimum(13); //Valor mínimo //Añadir 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); } }); //Añadir el JSlider en la parte inferior del panel this.borderLayoutPanel.add(this.slider, BorderLayout.SOUTH); //Generar un JScrollPane y añadirlo 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 añadirlo al scroll, de forma que si lo que se escribe ocupa más 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 añadirlo como segunda pestaña 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 añadirlo a la segunda pestaña ocupando todo el espacio this.splitPane = new JSplitPane(); this.panel_2.add(this.splitPane, BorderLayout.CENTER); //Generar un JScrollPane y añadirlo en la parte i zquierda 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 añadirla al scroll this.list = new JList(); //Especificar que no se pueda seleccionar más de un elemento a la vez this.list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); //Añadir 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 vacío y añadirlo 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 tamaño de fuente del area de texto en base a l valor actual del slider * @param arg0 */ protected void slider_stateChanged(ChangeEvent arg0) {
Diseño y realización de servicios de presentación de entornos gráficos.
Colegio Montessori
Cuaderno de Prácticas – 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 opción 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); } }
I nserci ón de contr oles en u n F ormul ari o util izando el L ayout Gri dBagLayout package dai; //a elección 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); } }
Diseño y realización de servicios de presentación de entornos gráficos.
Colegio Montessori
Cuaderno de Prácticas – 2013/2014 Bloque: JAVA
Gesti ón de eventos del r atón package dai;
//a elección 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); } }
Gesti ón de eventos del r atón I I package dai;
//a elección 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 ) {}
Diseño y realización de servicios de presentación de entornos gráficos.
Cuaderno de Prácticas – 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(); } }
Cr ear u na ventana con área de texto que visual ice la tecla pulsada (in clu ida Enter, Retroceso, …), también visualizará el código de la tecla por consola. package dai;
//a elección 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); }
Diseño y realización de servicios de presentación de entornos gráficos.
Cuaderno de Prácticas – 2013/2014 Colegio Montessori 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(); } }
Gesti ón de eventos de teclado y r atón (contador de letras y caracter es pulsados) package dai; import import import import
//a elección 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() ;
Diseño y realización de servicios de presentación de entornos gráficos.
Cuaderno de Prácticas – 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() ; } }
Diseño y realización de servicios de presentación de entornos gráficos.
Cuaderno de Prácticas – 2013/2014 Bloque: JAVA
Colegio Montessori
Gestión de Ficheros de texto y binarios Ejercicios resueltos
L ectur a de un fi chero 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, pasaría fr.close(); //al 1er catch y luego saldría, dejándolo 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); } } }
Escritur a de un fi cher o de texto (sobreescri biendo el conteni do 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(); } } }
Añ adir texto al f inal de un fichero de texto FileWriter fichero = new FileWriter("c:/prueba.txt",true);
F icheros de texto I NI . Los ficheros *.INI son ficheros escritos en texto plano que leen y modifican las aplicaciones, en ellos se contiene usualmente información para la configuración de las aplicaciones o parámetros iniciales de la mismas. Para nuestro curso lo utilizaremos como fichero donde se guardarán los valores de conexión a la bases de datos MySQL.
Diseño y realización de servicios de presentación de entornos gráficos.
Cuaderno de Prácticas – 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 continuación, después un igual (en la mayoría de los casos) y por último el valor que loe queremos asignar a la etiqueta. Un ejemplo de estos ficheros podría ser:
[MySQL] servidor=127.0.0.1 usuario=root clave=micontraseña
NOTA: Es recomendable no utilizar caracteres fuera del ASCII básico.
Copia de un fi chero bin ari o en otr o (Lectur a y Escri tur a) 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(); } } }
Diseño y realización de servicios de presentación de entornos gráficos.
Colegio Montessori
Cuaderno de Prácticas – 2013/2014 Bloque: JAVA
Conexión a Bases de Datos (Access y MySQL) Ejercicios resueltos
Conexi ón con M icrosoft A ccess a tr avé s de JDB C u ti li zando u n Or igen de Datos Supongamos ahora que necesita conectar una aplicación en Java con Acces s, 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 s e crea en el siguiente directorio:
C:\proyecto\bd1.mdb Antes de mostrar el código en java para conectar la aplicación 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 botón inicio. 2. Seleccionar Panel de Control. 3. Hacer doble click en el icono de Herramientas administrativas. 4. Hacer doble click en orígenes de datos (ODBC). Aparecerá la pantalla Administrador de orígenes de datos ODBC.
5.
De la pantalla anterior elija la pestaña DSN de usuario y posteriormente oprima el botón Agregar… 6. Elija de la lista de drivers desplegada, el driver “Microsoft Access Driver (*.mdb)” y enseguida oprima el botón finalizar.
Diseño y realización de servicios de presentación de entornos gráficos.
Colegio Montessori
Cuaderno de Prácticas – 2013/2014 Bloque: JAVA
7.
Aparecerá la pantalla de Configuración de ODBC Microsoft Access, llene los campos de esta pantalla como se muestra a continuación. En esta misma pantalla, en el apartado Base de datos oprima el botón Seleccionar y seleccione el directorio de la base de datos (C:proyectobd1.mdb). Oprima enseguida el botón Avanzadas…
8.
En la pantalla de opciones avanzadas debe crear un Nombre de inicio de sesión y Contraseña . En nuestro caso el inicio de s esión será cvazquez y la contraseña vazquez. En el apartado Opciones, seleccione el campo Driver y establezca el Valor de Driver como PDRV o como lo haya llamado.
Diseño y realización de servicios de presentación de entornos gráficos.
Cuaderno de Prácticas – 2013/2014 Bloque: JAVA
Colegio Montessori
Oprima el botón Aceptar. Oprima a su vez los botones aceptar de las pantallas subsecuentes. Con esto el driver ya ha sido cre ado y puede ser accedido desde nuestra aplicación. El resultado de la creación 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 sesión: cvazquez Contraseña: vazquez Estos campos serán utilizados desde la aplicación en Java para conectarse a la base de datos. La siguiente clase en Java, contiene los métodos necesarios para conectar nuestra aplicación 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 conexión 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(); } } }
Conexión di recta con M icrosoft A ccess a tr avé s de JD BC (L istan do los datos en pantalla)
Diseño y realización de servicios de presentación de entornos gráficos.
Colegio Montessori
Cuaderno de Prácticas – 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 u na Base de Datos M ySQL a tr avé s 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...");
Diseño y realización de servicios de presentación de entornos gráficos.
Cuaderno de Prácticas – 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 */
L istar l os datos de un a tabla en u n J Table 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", "Población", "Provincia", "CP"}; JTable tabla = new JTable(data, cabecera); JFrame ven = new JFrame();
Diseño y realización de servicios de presentación de entornos gráficos.
Cuaderno de Prácticas – 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); }
}
Diseño y realización de servicios de presentación de entornos gráficos.
Cuaderno de Prácticas – 2013/2014 Bloque: JAVA
Colegio Montessori
JFreeChart Introducción JFreeChart es una biblioteca de código abierto disponible para Java que permite a los usuarios generar fácilmente gráficos y listas. Es particularmente eficaz para cuando un usuario necesita para generar los gráficos que cambian en un con frecuencia. En estos apuntes se estudiará la manera de crear imágenes a partir de estas gráficas que luego pueden ser visualizadas en Java.
Instalación 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 diálogo y en el lado derecho hacer clic en "Bibliotecas" ficha. 6. Hacer clic en "Añadir 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 gráficos Construido con JFreeChart Tendremos en cuenta los siguientes gráficos que se pueden crear usando JFreeChart:
Pie Chart
XY Chart
Bar Chart
Time Series Chart
Ejemplo
de Pie Chart:
Supongamos que queremos construir un gráfico circular que refleja el porcentaje de marcas que se encuentran en el Un rango, B, C, y D. y un título "CSC408 Mark Distribution" package dam; import org.jfree.chart.JFreeChart; import org.jfree.chart.ChartUtilities;
Diseño y realización de servicios de presentación de entornos gráficos.
Colegio Montessori
Cuaderno de Prácticas – 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", // Título 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 creación del chart."); } } }
El ejercicio anterior genera un gráfico en un fichero jpg en el directorio raíz que posteriormente tendremos que visualizar con algún visor de gráficos.
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("María", new Integer(100)); pieDataset.setValue("Luisa", new Integer(5)); JFreeChart chart = ChartFactory.createPieChart("Distribución 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 creación del chart."); } } }
Diseño y realización de servicios de presentación de entornos gráficos.
Colegio Montessori
Cuaderno de Prácticas – 2013/2014 Bloque: JAVA
En el siguiente ejemplo creamos un gráfico 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); // Dirección de giro del PIE, la otra opción 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 más usado?"); demo.pack(); // Calcula el tamaño del frame para dibujar el PIE demo.setVisible(true);
Diseño y realización de servicios de presentación de entornos gráficos.
Cuaderno de Prácticas – 2013/2014 Bloque: JAVA
Colegio Montessori } }
Ejemplo XY Chart
Construir una línea 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); // Añadir la serie para el conjunto de datos XYSeriesCollection dataset = new XYSeriesCollection(); dataset.addSeries(series); // Generar el gráfico JFreeChart chart = ChartFactory.createXYLineChart( "XY Chart", // Titulo "x-axis", // Etiqueta del eje X "y-axis", // Etiqueta del eje y dataset, // Datos PlotOrientation.VERTICAL, // Orientación 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 creaci ón del gráfico”); } } }
Diseño y realización de servicios de presentación de entornos gráficos.
Colegio Montessori
Cuaderno de Prácticas – 2013/2014 Bloque: JAVA
Modificación:
En el código actual, hemos utilizado el método createXYLineChart () para mostrar una línea de datos en el gráfico. Como alternativa, el método createXYAreaChart () podría ser utilizado para pintar el área bajo la línea de datos. Podemos modificar el gráfico 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 gráfico 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 gráfico 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."); } } }
Diseño y realización de servicios de presentación de entornos gráficos.
Colegio Montessori
Cuaderno de Prácticas – 2013/2014 Bloque: JAVA
Crear un gráfico 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`) VA LUES ('linux', 2.9), ('mac', 2), ('windows', 5.1), ('android', 1.7);
Creamos una clase en un package y definimos la cl ase 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 gráfico.
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 {
Diseño y realización de servicios de presentación de entornos gráficos.
Cuaderno de Prácticas – 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 = new ArrayList(); 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); // Dirección de giro del PIE, la otra opción 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 más usado?");