Quantcast
Channel: CoDejaVu
Viewing all 129 articles
Browse latest View live

Ejemplo Eventos del Teclado en Java

$
0
0
En la entrada anterior tocamos el tema de los eventos del Mouse, en esta ocasión continuaremos trabajando con Eventos pero ahora del Teclado...

Vamos a hacer un ejemplo muy simple teniendo en cuenta que ya sabemos lo que es un evento (si no lo sabes, revisa el articulo anterior).....
en el ejemplo escribiremos en un área de texto y mediante eventos del teclado identificaremos y contaremos la cantidad de vocales escritas...

Este ejemplo es muy similar al anterior ya que también es necesario implementar una interface, en este caso la elegida es la KeyListener, que nos provee los métodos para controlar los eventos del teclado...

Al implementar la interface debemos implementar también los métodos que la componen, veamos cuales son y su funcionamiento básico:

keyPressed(KeyEvent e): Se ejecuta cuando el usuario presiona una tecla.
keyReleased(KeyEvent e): Se ejecuta cuando el usuario libera una tecla
keyTyped(KeyEvent e): Se ejecuta cuando el usuario presiona una tecla, pero solo cuando la tecla corresponde a caractéres, teclas especiales como F1, F2 entre otras no son identificadas.

Por lo regular el uso de estos métodos es muy especifico todo depende de lo que necesitemos ya que el evento de presionar y soltar pasa muy rápido y casi nunca nos damos cuenta cual evento se ejecutó, estos métodos son usados básicamente cuando queremos controlar al detalle lo que queremos que suceda si se hace una u otra acción...... mas abajo veremos esto en el ejemplo.....bueno ahora si a lo que vinimos.....

El Ejemplo.
Ventana Principal
Como se mencionó para este ejemplo vamos a trabajar con 2 JTextArea, una donde introduciremos el texto y otra donde veremos las vocales presionadas, así mismo podremos saber la cantidad de vocales que contiene el texto escrito.........adicionalmente agregaremos un evento a la tecla Esc para indicarle al sistema que el usuario quiere cerrar la aplicación....

Clase Aplicacion.

Esta clase es muy conocida pero nunca sobra ponerla, simplemente desde aquí por medio del método main() hacemos el llamado a la ventana principal...
public class Aplicacion {
public static void main(String args[]) {
Ventana ventana;
ventana = new Ventana();
ventana.setVisible(true);
}
}

Clase Ventana.

Esta clase corresponde a la interfaz gráfica de nuestro sistema, podemos ver que implementa la interface por medio del implementsKeyListener,  sin esto no podríamos capturar los eventos......veamos
class Ventana extends JFrame implements KeyListener {
JLabel labelTitulo;
JLabel labelAreaEntrada;
JLabel labelAreaSalida;
JLabel labelSalida;
JLabel labelContadorVocales;
JTextArea areaEntradaDeTexto;
JScrollPane scrollPaneAreaEntrada;
JTextArea areaSalidaDeTexto;
JScrollPane scrollPaneAreaSalida;

int cantidadVocales=0;
String vocales="";

public Ventana() {
setLayout(null);
iniciaComponentes();
//Asigna un titulo a la barra de titulo
setTitle("CoDejaVu : Ventana Eventos del Teclado");
//tamaño de la ventana
setSize(550,350);
//pone la ventana en el Centro de la pantalla
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

private void iniciaComponentes() {
labelTitulo= new JLabel();
labelTitulo.setFont(new java.awt.Font("Comic Sans MS", 0, 28));
labelTitulo.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
labelTitulo.setText("Eventos del Teclado");
labelTitulo.setBorder(javax.swing.BorderFactory.
createBevelBorder(javax.swing.border.BevelBorder.RAISED));
labelTitulo.setBounds(110, 20, 300, 40);

labelAreaEntrada= new JLabel();
labelAreaEntrada.setBounds(10, 70, 180, 40);
labelAreaEntrada.setText("Area Entrada de Texto");

areaEntradaDeTexto = new JTextArea();
areaEntradaDeTexto.setLineWrap(true);
areaEntradaDeTexto.addKeyListener(this);

scrollPaneAreaEntrada = new JScrollPane();
scrollPaneAreaEntrada.setBounds(10, 100, 513, 70);
scrollPaneAreaEntrada.setViewportView(areaEntradaDeTexto);

labelAreaSalida= new JLabel();
labelAreaSalida.setBounds(10, 170, 180, 40);
labelAreaSalida.setText("Area Salida de Texto");

areaSalidaDeTexto = new JTextArea();
areaSalidaDeTexto.setLineWrap(true);
areaSalidaDeTexto.addKeyListener(this);

scrollPaneAreaSalida = new JScrollPane();
scrollPaneAreaSalida.setBounds(10, 200, 513, 70);
scrollPaneAreaSalida.setViewportView(areaSalidaDeTexto);

labelContadorVocales = new JLabel();
labelContadorVocales.setBounds(380, 280, 190, 20);

labelSalida = new JLabel();
labelSalida.setText("Para salir presione la tecla Escape");
labelSalida.setBounds(10, 280, 210, 20);

add(labelTitulo);
add(labelSalida);
add(labelContadorVocales);
add(labelAreaEntrada);
add(labelAreaSalida);
add(scrollPaneAreaEntrada);
add(scrollPaneAreaSalida);

}

/**Este metodo se ejecuta cuando se presiona una tecla*/
@Override
public void keyPressed(KeyEvent e) {

if (e.getSource()==areaEntradaDeTexto)
{
if (e.VK_A==e.getKeyCode())
{
vocales+="a ";
cantidadVocales++;
}
if (e.VK_E==e.getKeyCode())
{
vocales+="e ";
cantidadVocales++;
}
if (e.VK_I==e.getKeyCode())
{
vocales+="i ";
cantidadVocales++;
}
if (e.VK_O==e.getKeyCode())
{
vocales+="o ";
cantidadVocales++;
}
if (e.VK_U==e.getKeyCode())
{
vocales+="u ";
cantidadVocales++;
}
}
areaSalidaDeTexto.setText(vocales);
labelContadorVocales.setText("Numero Vocales: "+cantidadVocales);
}

/**Este metodo se ejecuta cuando se suelta una tecla*/
@Override
public void keyReleased(KeyEvent e) {
System.out.println("Soltó la tecla: "+e.getKeyText(e.getKeyCode()));
if (e.getSource()==areaEntradaDeTexto)
{
if (e.VK_ESCAPE==e.getKeyCode())
{
int respuesta = JOptionPane.showConfirmDialog(this,
"Esta seguro que desea salir?", "Confirmación",
JOptionPane.YES_NO_OPTION);
if (respuesta == JOptionPane.YES_NO_OPTION)
{
System.exit(0);
}
}
}
}

/**Este metodo funcionará solo cuando se presionan caracteres,
*si se presionan teclas como F1, F2, inicio etc no ejecutará
*ningun evento*/
@Override
public void keyTyped(KeyEvent e) {
}
}

Es importante recalcar que también es de suma importancia indicarle al sistema cual es el componente que va a escuchar los eventos del teclado, en este caso vamos a escribir en un área de texto, si no se hace aunque tengamos la interface, no se reconocerán los eventos.... para eso se debe indicar agregando el addKeyListener(this) así:

areaSalidaDeTexto.addKeyListener(this);

Bueno teniendo esto mas claro ahora vamos a centrarnos en los métodos keyPressed(KeyEvent e) y keyReleased(KeyEvent e)...

En keyPressed validamos cuando se presionan las vocales para ir asignando los valores correspondientes al área de texto y a la variable que las cuenta......

En KeyReleased lo que hacemos es validar el evento cuando se presiona la tecla Escape para salir del sistema, al presionar la tecla se carga el mensaje....

Adicional a esto también imprimimos en consola cual es la tecla presionada, de esta manera nos damos cuenta cada espacio, enter, delete y cualquier tecla que utilicemos....


Viendo el código podríamos preguntarnos el porque hicimos el evento de salir en el KeyReleased, si esto también lo podríamos haber hecho sin problemas en el
KeyPresed.......o no?

Simplemente lo hicimos ahí para ver el ejemplo del que hablamos al principio..... cual método usar depende básicamente de lo que necesitemos.... los eventos suceden muy rápido pero en este caso, como queremos imprimir que tecla se liberó.... si hubiéramos puesto la validación de la tecla Escape al presionar el botón, entonces se cargaría el dialogo de confirmación y si es afirmativo se cerraría la aplicación, sin darnos tiempo de ver en consola que la tecla Escape fue liberada.... mientras que en el KeyReleased si alcanzamos a ver en consola que el escape se presionó....... en este caso no es algo tan grave, pero supongamos que eso sea algo muy importante y que no solo es mostrarse en consola sino almacenarse esa información en un archivo de texto siendo necesaria toda la información posible......

También es importante saber que aunque no utilicemos el método keyTyped, se debe dejar enunciado, ya que es un principio del trabajo con interfaces y debemos implementar todos los métodos de esta.... si no sabes a que me refiero te invito a leer esta entrada sobre interfaces...

Y listo aquí termina nuestro ejemplo, espero que les pueda servir y sea de fácil entendimiento...


También te podría Interesar.


¿Hay algo que quieras anexar o comentar sobre esta entrada?  no dudes en hacerlo.....y si te gustó...... te invito a compartir
 y Suscribirte ingresando al botón "Participar en este sitio" para darte cuenta de mas entradas como esta ;)

Botones Dinamicos en Java

$
0
0
En este ejemplo vamos a crear unos botones dinamicos que cambiarán de tamaño cada vez que pasemos el mouse por encima o se haga clic en ellos, para eso vamos a aplicar conceptos anteriores como los eventos del mouse...

Hace unos dias publiqué una entrada donde simulabamos un template usando para eso paneles independientes, en esta oportunidad vamos a reutilizar la aplicación personalizando los botones para que tengan un estilo mas dinamico, tambien aplicaremos otras cosas ya vistas como el trabajo con imagenes..... veamos.

El Ejemplo.

Para este ejemplo como ya lo mencionamos reutilizamos el ejemplo anterior que vemos aquí y tan solo vamos a enfocarnos en los botones.


Como queremos simular un botón, necesitaremos simular sus estados cada vez que se ingresa o se presiona, para eso necesitaremos 3 imagenes por cada botón con un tamaño diferente, estas imagenes las meteremos en el mismo paquete donde guardamos el resto de imagenes de la aplicación.......

Para que el efecto de botón sea mas real se recomienda utilizar imagenes PNG con fondo transparente para que el cambio se note mas dínamico........ si no tienes imagenes que se ajusten puedes hacerlas tu mismo (en Paint por ejemplo) y quitarles el fondo como muestro en este video y luego cambiarle el tamaño a una mas grande y una mas pequeña.

El Codigo.

En la aplicación anterior usabamos componentes JButton, sin embargo para este vamos a utilizar componentes JLabel que simularán botones por medio de imagenes, asignandole una imagen diferente al mismo botón por cada evento del mouse ejecutado.

Como vimos en la entrada sobre eventos del mouse, tenemos que implementar la interface MouseListener adicional a la ActionListener que ya teniamos.
public class VentanaPrincipal extends JFrame implements ActionListener, MouseListener {

Luego reemplazamos los componentes JButton por JLabel
private JLabel botonLabelPanel1,botonLabelPanel2;

Despues inicializamos los componentes, definiendo la imagen y las propiedades necesarias para simular el botón.... es importante no olvidar el addMouseListener para capturar el evento del boton....
botonLabelPanel1= new JLabel();
botonLabelPanel1.setBounds(20, 65, 200, 90);
botonLabelPanel1.setHorizontalAlignment(SwingConstants.CENTER);
botonLabelPanel1.setIcon(new ImageIcon(
getClass().getResource("/imagenes/imagen1Boton1.png")));
botonLabelPanel1.addMouseListener(this);
getContentPane().add(botonLabelPanel1);

botonLabelPanel2= new JLabel();
botonLabelPanel2.setBounds(220, 65, 200, 90);
botonLabelPanel2.setHorizontalAlignment(SwingConstants.CENTER);
botonLabelPanel2.setIcon(new ImageIcon(
getClass().getResource("/imagenes/imagen1Boton2.png")));
botonLabelPanel2.addMouseListener(this);
getContentPane().add(botonLabelPanel2);


Al final debemos implementar los metodos necesarios de la interface MouseListener, en cada evento del mouse codificamos la logica que consistirá en verificar donde ha ingresado el mouse y que evento ha ejecutado...... por cada evento cambiamos la imagen asignada al JLabel correspondiente.....
@Override
public void mouseClicked(MouseEvent e) {

if (e.getSource()==botonLabelPanel1){
botonLabelPanel1.setIcon(new javax.swing.ImageIcon(
getClass().getResource("/imagenes/imagen2Boton1.png")));
miCoorDinador.cargarPaneles(1);
}

if (e.getSource()==botonLabelPanel2){
botonLabelPanel2.setIcon(new javax.swing.ImageIcon(
getClass().getResource("/imagenes/imagen2Boton2.png")));
miCoorDinador.cargarPaneles(2);
}
}

@Override
public void mouseEntered(MouseEvent e) {

if (e.getSource()==botonLabelPanel1){
botonLabelPanel1.setIcon(new ImageIcon(
getClass().getResource("/imagenes/imagen2Boton1.png")));
}
if (e.getSource()==botonLabelPanel2){
botonLabelPanel2.setIcon(new ImageIcon(
getClass().getResource("/imagenes/imagen2Boton2.png")));
}
}

@Override
public void mouseExited(MouseEvent e) {
if (e.getSource()==botonLabelPanel1){
botonLabelPanel1.setIcon(new ImageIcon(
getClass().getResource("/imagenes/imagen1Boton1.png")));
}
if (e.getSource()==botonLabelPanel2){
botonLabelPanel2.setIcon(new ImageIcon(
getClass().getResource("/imagenes/imagen1Boton2.png")));
}

}

@Override
public void mousePressed(MouseEvent e) {
if (e.getSource()==botonLabelPanel1){
botonLabelPanel1.setIcon(new ImageIcon(
getClass().getResource("/imagenes/imagen3Boton1.png")));
}

if (e.getSource()==botonLabelPanel2){
botonLabelPanel2.setIcon(new ImageIcon(
getClass().getResource("/imagenes/imagen3Boton2.png")));
}
}

@Override
public void mouseReleased(MouseEvent e) {
if (e.getSource()==botonLabelPanel1){
botonLabelPanel1.setIcon(new ImageIcon(
getClass().getResource("/imagenes/imagen1Boton1.png")));
}
if (e.getSource()==botonLabelPanel2){
botonLabelPanel2.setIcon(new ImageIcon(
getClass().getResource("/imagenes/imagen1Boton2.png")));
}
}


Y Listo de esa manera podemos ver como asignamos una de las 3 imagenes de cada botón para simular el ingreso y clic en el botón, así podemos ver un ejemplo simple de la aplicación de los eventos del Mouse en Java.....

Descarga.

El ejemplo es muy básico y simple, para entenderlo les dejo el link de descarga para que lo prueben ;).....está en Eclipse pero si usas NetBeans te interesará esta entrada con un vídeo paso a paso de como abrirlo en el........ [recuerden que es gratis.....nada cuesta opinar, compartir o agradecer :)]


También te podría Interesar.  


¿Hay algo que quieras anexar o comentar sobre esta entrada?  no dudes en hacerlo.....y si te gustó, te invito a compartir y Suscribirte ingresando al botón "Participar en este sitio" para darte cuenta de mas entradas como esta ;) 

Sobreescritura y SobreCarga de Métodos en Java ( Overriding y Overloading )

$
0
0
Después de un tiempo sin publicar debido a problemas técnicos (Casi muere mi PC) regreso con 2 conceptos de POO que me han pedido que aborde..... me refiero a la sobreescritura y sobrecarga de métodos...........2 conceptos que pueden parecer confusos pero veremos que en sí representan algo muy simple.........

Debemos saber que estas propiedades de la Programación Orientada a Objetos nos traen algunas ventajas como por ejemplo la facilidad, extensibilidad y flexibilidad en el código......

Pero que son?

La sobrecarga y sobreescritura no son mas que dos conceptos aplicados al trabajo con métodos, específicamente en el uso que le queremos dar...... estos conceptos dependen principalmente de nuestra lógica de programación y el enfoque o forma de trabajo.... depende de lo que queremos hacer....... ¿Como así?...... veamos de forma mas clara cada concepto....

Sobrecarga de métodos (Overloading)

En java sabemos que si ya declaramos una variable o un método con un nombre en especifico, no podemos declarar otra variable o método que se llame igual..... sin embargo esta regla no aplica cuando usamos la Sobrecargade métodos, ya que esta permite usar el mismo nombre del método pero solo si se tiene diferente firma..... ¿firma?....... cuando hablamos de la firma de un método, nos referimos a sus parámetros......

en resumen la sobrecarga permite declarar métodos que se llamen igual pero que reciban parámetros diferentes (no pueden haber 2 métodos con el mismo nombre y los mismos parámetros), por esta razón lo que define a que método se ingresa, son los argumentos que se envían como parámetros....

Anteriormente mencioné algo sobre la forma de trabajo o lógica de programación, esto es porque supongamos que yo quiero hacer sumas, pero mi programa debe sumar por aparte 2 números enteros o 2 números doubles.... para esto tengo 2 opciones.

1. crear 2 métodos, uno llamado sumaEnteros(int a, int b) y otro sumaDoubles(double a, double b)

2. Aplicar el concepto de sobrecarga, donde aunque también vamos a crear 2 metodos, los vamos a llamar con el mismo nombre pero con diferentes parametros....sumar(int a, int b) y sumar(double a, double b) quedando algo como esto:
public void sumar(int a, int b)
{
int suma=a+b;
System.out.println("la suma es: "+suma);
}

public void sumar(double a, double b)
{
double suma=a+b;
System.out.println("la suma es: "+suma);
}

podemos ver que los 2 métodos se llaman igual pero poseen parámetros diferentes, así cuando sean llamados, dependiendo del parámetro enviado se accede al método.

Y No es igual? para que sobrecargar si en ultimas se crea el mismo numero de métodos?  

La pregunta anterior es muy valida y tiene mucha lógica, pero como en otros casos la respuesta también gira en torno a la facilidad, las buenas practicas y la búsqueda de aplicaciones optimizadas..... el ejemplo es muy simple y poco complejo.... pero imaginemos una aplicación donde se tenga la misma acción pero con procesos diferentes? 

Por ejemplo encender un motor..... y si tenemos diferentes tipos de encendido como el eléctrico, encendido térmico, encendido de combustión etc etc... donde los procesos son muy diferentes pero en ultimas el objetivo es el mismo, pero cada uno necesita ciertas características únicas para encender.... aquí podríamos aplicar la sobrecarga para no preocuparnos por llamar los métodos por su nombre sino tan solo llamando al mismo pero enviando los parámetros (características) propios de cada tipo de motor y listo, dependiendo de lo que mandemos java sabrá que motor queremos iniciar.....

Sobreescritura de métodos (Overriding)

La Sobreescritura es la forma por la cual una clase que hereda puede re-definir los métodos de su clase Padre, de esta manera puede crear nuevos métodos con el mismo nombre de su superClase....(si no conoces la herencia deberías ver este ejemplo...)

es decir, si tengo una clase padre con el método ingresar() yo puedo crear en la clase hija un método que también se llame ingresar() pero implementándolo según lo que necesite (siguiendo obviamente unas reglas que veremos mas adelante)....  a esto se le llama sobreescritura.....

Y para que? si cuando se hereda se pueden usar los métodos de la superClase sin tener que declararlos otra vez, entonces porque sobreescribirlos?

Esta pregunta es muy común, la respuesta es que también depende de lo que queremos hacer.... si lo que queremos es extender una funcionalidad por medio de la herencia y si bien, en la clase padre existe el método ingresar(), el método y la lógica que tenga es propia de esa clase.... si yo quiero vincularle algo mas a ese método pero que sea especifico para la clase hija, no podría, ya que tendría que modificarlo en la clase padre y de esta manera ya se perdería el enfoque como tal, pues dicha funcionalidad sería común para todas las clases hijas que hereden de la superClase.... 

por la razón anterior, la sobreescritura nos permite extender la funcionalidad de un método heredado para hacerlo especifico a lo que necesitemos, pudiendo implementar la lógica que queramos en nuestras clases hijas para el mismo método......

y cuales son las reglas?

Así como en la sobrecarga nos fijamos en los parámetros, en la sobreescritura nos debemos fijar en que la estructura del método sea igual a la de su superClase, no solo el mismo nombre sino el mismo numero de argumentos y tipo de retorno (o al menos un subtipo de este), así como no tener un nivel de acceso mas restrictivo que el original (que en la clase padre sea protected y en la hija sea private por ejemplo).... tampoco se pueden sobreescribir métodos static ni final.... (ya que static representa métodos globales y final constantes...)

Algo que también debemos mencionar es que podemos identificar un método sobreescrito cuando tiene la anotación @override, esto es muy común encontrarlo cuando trabajamos con clases abstractas o interfaces, donde se obliga a implementar los métodos de estas si son heredadas o implementadas respectivamente...... sin embargo no es obligatorio ponerlo pero si  es recomendable (tal como lo menciona "David" en un comentario de esta entrada sobre el polimorfismo) pues de esta manera el compilador reconoce que se están sobreescribiendo los métodos ayudando a que si nos equivocamos al crear un método distinto, el compilador nos avisaría....... adicionalmente si tenemos la anotación inmediatamente podremos saber que se está aplicando el concepto, algo muy útil cuando trabajamos con código de otras personas...

Veamos un ejemplo donde se sobreescribe el método tocar()

Public class Instrumento{

public String tipo;

public abstract void tocar()
{
System.out.println("Tocar un Instrumento");
}
}


class Guitarra extends Instrumento {
 
 @Override         
public void tocar() {
System.out.println("Tocar La Guitarra");
}

}

Como vemos la clase Guitarra hereda de la clase Instrumento, esta ultima tiene el método tocar() con una implementación diferente a la del método en la clase Guitarra (el mensaje es distinto), al tener la anotación @Override nos damos cuenta que se está sobreescribiendo dicho método y se le puede dar la lógica que queramos especifica para la clase Guitarra.... 

Ingresar a uno u otro método depende de la lógica del llamado.... también es algo muy ligado al polimorfismo donde por medio de este se puede acceder a uno u otro método..... por ejemplo si queremos acceder al método tocar() de la clase guitarra aplicando la sobreescritura y el polimorfismo tendríamos que hacer una instancia de la clase padre con un objeto de la clase hija así:
Instrumento miGuitarra=new Guitarra();
miGuitarra.tocar();

con esto accederíamos al método tocar de la clase guitarra...... (si te queda confuso este concepto te invito a ver estas entradas sobre el polimorfismo aquí y aquí.....)


Conclusiones!!!

Como pudimos ver los 2 conceptos son muy similares pero con enfoques totalmente diferentes, en sí el concepto como tal no es confuso y a medida que se va conociendo de a pocos su aplicación tampoco lo será.....

Y Listo!!!!! con esto vimos a nivel general lo que representan la sobrecarga y sobreescritura de métodos........ recuerden que la forma de dominarles es la práctica y ver su comportamiento con diferentes ejercicios......  un saludo y nos vemos en una próxima entrada ;)



También te podría Interesar. 


¿Hay algo que quieras anexar o comentar sobre esta entrada?  no dudes en hacerlo.....y si te gustó, te invito a compartir y Suscribirte ingresando al botón "Participar en este sitio" para darte cuenta de mas entradas como esta ;)

Ejemplo Look and Feel en Java

$
0
0
Hola, en esta ocasión y por cuestiones de tiempo quiero compartirles un tema de los rápidos y básicos, algo que no puedo dejar pasar cuando se trabaja con Interfaces Graficas de Usuario........ en este post veremos muy rápido el tema de los Look And Feel en java!!!

Las interfaces gráficas son algo fundamental cuando desarrollamos pensando en el usuario y en la experiencia que este pueda tener al manejar nuestra aplicación (Relacionado a la Usabilidad...)no vamos a profundizar en esto, tan solo veremos unas opciones que java nos provee para cambiar un poco el aspecto visual al que estamos acostumbrados.....la intención es brindar otras opciones tal vez mas llamativas........ veamos....

Que es?

Cuando hablamos de Look And Feel, estamos hablando de la apariencia de nuestra aplicación, como se van a presentar los diferentes componentes como botones, campos de texto, combos, pestañas, texto entre otros, buscando dar otras opciones visuales.......

El Ejemplo.


En esta entrada voy a tomar el ejemplo básico del post sobre JOptionPane y le vincularé Look And Feel para que podamos ver los diferentes temas que java nos provee....como vemos la imagen anterior corresponde a la misma ventana principal pero con estilos distintos....

La Aplicación...

Los estilos se pueden aplicar a cualquier aplicación, lo único necesario es adicionar las siguientes lineas de código en el método main...

try{

JFrame.setDefaultLookAndFeelDecorated(true);
JDialog.setDefaultLookAndFeelDecorated(true);
UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
//UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
//UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
//UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel");
}
catch (Exception e)
{
e.printStackTrace();
}

En el código usamos unos métodos por defecto de java encargados de modificar la decoración de las ventanas, vemos que se invocan mediante las clases JFrame y JDialog, ya que estos son los 2 contenedores principales de Java Swing (si quieres saber mas sobre esto, te invito a visitar esta entrada).... el UIManager se encarga de definir cual es el estilo a utilizar....

(Para este ejemplo rápido, comentamos los otros estilos que java brinda, para una próxima entrada compartiré otro ejemplo donde veamos el cambio de forma dinámica.....por ahora si quieren ver los estilos deberán comentar uno y decomentar el que deseen.....)

Los Estilos...

Veamos los estilos que encontramos en el JDK, estas imagenes corresponden a la misma aplicación con el tema definido y vemos como se muestran las ventanas de dialogo y algunos componentes como combos, JTexField, botones etc.

NimbusLookAndFeel

Personalmente el nimbus es el que mas me gusta, brinda un estilo mas suavisado, redondeado y agradable a la vista.... para tenerlo usamos UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");

MetalLookAndFeel

El metal provee un estilo mas colorido, le da un toque rustico y llamativo a las aplicaciones.... para tenerlo usamos UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");

WindowsLookAndFeel

Este estilo es el mas conocido por los usuarios windows, si vemos la imagen donde están las ventanas principales, nos daremos cuenta que este tema es muy similar a las aplicaciones que no usan Look And Feel, tan solo cambian algunos detalles como el tamaño de sus botones y texto.... para tenerlo usamos UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");

MotifLookAndFeel

Por ultimo tenemos el tema motif, este tema es mucho mas rustico que los anteriores pero con aspectos llamativos, similar a las primeras GUI de versiones iniciales del JDK..... para tenerlo usamos UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel");
Y Listo, esta entrada fue muy rápida y básica tan solo como introducción a este tema que todos deberíamos conocer........


Descarga.

Como es costumbre en el enlace de descarga se encuentra el archivo .rar con la aplicación, solo es cuestión de descomprimir y abrir con Eclipse y listo.......si usas NetBeans te interesará esta entrada con un vídeo paso a paso de como abrirlo en el......... recuerden que es gratis, nada cuesta opinar, compartir o agradecer :) 




También te podría Interesar.


¿Hay algo que quieras anexar o comentar sobre esta entrada?  no dudes en hacerlo.....y si te gustó...... te invito a compartir
 y Suscribirte ingresando al botón "Participar en este sitio" para darte cuenta de mas entradas como esta ;)

VideoTutoriales CoDejaVu

$
0
0
Hola, hace mucho que no publico por razones laborales, sin embargo he estado trabajando en otro espacio donde compartir lecciones aprendidas.........

Desde hace un tiempo vengo con la idea de ir subiendo vídeos a youtube sobre diferentes temas en torno al desarrollo de software, por eso de a pocos he compartido algunos vídeos que podrían ser de interés......... estoy buscando continuar con secuencias tal como se ha venido haciendo con el blog por esta razón y gracias a la recomendación de un visitante de CoDejaVu decidí iniciar un curso básico de Java que iré alimentando paso a paso.....

Crearé una nueva pestaña en el blog donde iré publicando los vídeos para un mayor acceso :)

Por el momento les comparto oficialmente la bienvenida a los VideoTutoriales CoDejaVu!!!!

 


Les comparto el índice de contenido de los vídeos, que también pueden consultar en el botón correspondiente del menú del blog  ;)

Un Saludo y los invito a visitarlo, suscribirse y comentar, para que CoDejaVu pueda llegar a muchos mas ;)


También te podría Interesar.

¿Hay algo que quieras anexar o comentar sobre esta entrada?  no dudes en hacerlo.....y si te gustó...... te invito a compartir y Suscribirte ingresando al botón "Participar en este sitio" para darte cuenta de mas entradas como esta ;)

Gyffu el buscador web Colombiano

$
0
0
Desde hace un tiempo quería compartir en el blog una noticia que me llena de orgullo, hoy quiero hacer un break para compartirles a Gyffu.com.... el primer motor de búsqueda en Internet desarrollado en Colombia.... 

Pero eso no es todo, el orgullo no va solamente ahí, por si fuera poco esta gran herramienta nació en Armenia Quindío gracias al empuje y tenacidad de 2 amigos míos.... Juan Sebastian HenaoMadrigal (ex compañero de Universidad, y de trabajo) y Darwin Tusarma, 2 jóvenes Ingenieros de la Universidad del Quindío que lucharon por su idea y que a pesar de las puertas cerradas y comentarios desmotivantes, siguieron adelante y dieron vida a está gran herramienta que ya se posiciona como nueva opción cuando de encontrar información puntual se trata....

Pero que es Gyffu?

Gyffu es un buscador web, pero no un buscador cualquiera como google, yahoo, altavista..... Gyffu pretende centrarse mas en las necesidades del usuario a la hora de realizar las búsquedas, enfocándose en lo que el usuario necesita, arrojando información puntual, evitando (como ellos lo mencionan) la infoxificación (Saturación de Información) a la que nos tienen acostumbrados otros buscadores.... o a quien no le ha pasado que se queda gran cantidad de tiempo buscando en Internet sin encontrar lo que realmente necesita, pero si llenándose de publicidad o mucha información distinta???

Pero lo mejor es que con Gyffu nuestra información está segura, pues este motor no espía al usuario como es normal con otros grandes buscadores que si lo hacen para llenarnos de molesta publicidad o vender nuestra información a grandes multinacionales (Sabían eso?)


Búsquedas Seguras!!!

Gracias a su enfoque hacia la seguridad del usuario, la fundación Linux apoyó a Gyffucertificandolo a nivel internacional como un buscador seguro, por eso hoy en día se encuentra certificado bajo las normas internacionales de seguridad informática RFC2196, abriendo con esto las puertas a nuevas alianzas estratégicas con la posibilidad de vincularlo como el buscador por defecto en distribuciones Linux...

En Gyffu Encuentras lo que Buscas!!!

Actualmente Gyffuse encuentra en su versión Beta, sin embargo ya ha tenido gran acogida generando una enorme cantidad de consultas desde diferentes partes del mundo.

El equipo de desarrollo de Gyffu(todos amigos míos :D ) se encuentra trabajando en las funcionalidades de búsqueda de imágenes, vídeos y una herramienta de resumen que facilitará aún mas la exactitud en los resultados de consulta...... definitivamente el crecimiento de este buscador viene acompañado de grandes beneficios para nosotros los usuarios....

Para finalizar les comparto algunos artículos donde pueden conocer un poco mas sobre Gyffu, su historia, sus inconvenientes y el nacimiento de esta loca idea!!!


CoDejaVu ya está Gyffiando....... y tú, que esperas para Gyffiar?


También te podría Interesar.


¿Hay algo que quieras anexar o comentar sobre esta entrada?  no dudes en hacerlo.....y si te gustó...... te invito a compartir
 y Suscribirte ingresando al botón "Participar en este sitio" para darte cuenta de mas entradas como esta ;)

Como abrir archivos externos desde java (doc,xls,pdf, txt...)

$
0
0
Muchas veces nos encontramos con la necesidad de abrir documentos de Word, PDF, Excel u otro archivo de ofimática directamente desde nuestra aplicación (Ojo, no cargarlo en nuestra aplicación, sino ejecutarlo desde ella), ya sea para modificarlo o simplemente revisar su contenido....

En esta entrada veremos de forma simple como realizar este proceso, primero veremos la manera de ejecutarlo desde cualquier carpeta de nuestro pc y luego cargándolo desde nuestro propio proyecto......

Para este ejemplo trabajaremos con un archivo de Excel, aunque el proceso funciona igual con cualquier tipo de archivo...........veamos.

Cargando Archivos desde el PC.

Para cargar archivos desde nuestro computador debemos conocer exactamente la ubicación o ruta donde se encuentre.....


Posteriormente creamos un proyecto Java, para este ejemplo crearemos una clase Principal que solo tendrá el método main(), y se encargará de llamar a una clase Procesos que llama al archivo que necesitamos abrir...

Clase Principal.
public class Principal {

public static void main(String[] args) {
Procesos misProcesos=new Procesos();
misProcesos.cargarArchivo();
}
}

Clase Procesos.
import java.io.IOException;

public class Procesos {

public void cargarArchivo() {
abrir();
}

private void abrir() {
//ruta del archivo en el pc
String file = new String("E:\\pruebaArchivo\\ArchivoPrueba.xlsx");

try{
//definiendo la ruta en la propiedad file
Runtime.getRuntime().exec("cmd /c start "+file);

}catch(IOException e){
e.printStackTrace();
}
}
}

Como vemos esta clase tiene un método abrir() donde creamos la lógica que permite ejecutar el archivo, la ruta completa se almacena en una variable String que luego será usada para encontrarlo.....

Luego dentro de un try-catch usamos el llamado al archivo por medio de Runtime.getRuntime().exec("cmd /c start "+file);(Si no sabes que es Try- Catch revisa está entrada sobre el manejo de excepciones en java)......... ejecutamos nuestra aplicación y listo!!!! inmediatamente se abre el archivo en nuestro computador.... 



Cargando Archivos desde el src del Proyecto.

Muchas veces queremos tener archivos definidos en nuestros proyectos, puede ser un manual de usuario de la aplicación en formato pdf o tal vez un documento sobre la licencia del sistema, para esto podemos tener almacenado el archivo en un paquete del proyecto como se ve aquí...


Como vemos tenemos las mismas clases solo que agregamos el paquete y ahí el archivo prueba que estamos trabajando...... vamos a modificar el método abrir() de nuestra clase Procesos para agregar la ruta del archivo....

Clase Procesos.
private void abrir() {

//ruta del archivo en el pc
//String file = new String("E:\\pruebaArchivo\\ArchivoPrueba.xlsx");

//rutal del archivo desde el src del proyecto
String fileLocal = new String("src/archivos/ArchivoPrueba.xlsx");
try{

Runtime.getRuntime().exec("cmd /c start "+fileLocal);

}catch(IOException e){
e.printStackTrace();
}
}
 
En este caso tan solo comentamos la variable file y le agregamos una nueva variable llamada fileLocal que contendrá la ruta del archivo en nuestro proyecto, cambiamos el llamado enviándole al fileLocal y listo!!! cargamos el archivo de forma local.....



También te podría Interesar.


¿Hay algo que quieras anexar o comentar sobre esta entrada?  no dudes en hacerlo.....y si te gustó...... te invito a compartir
 y Suscribirte ingresando al botón "Participar en este sitio" para darte cuenta de mas entradas como esta ;)

Ejemplo Simple Usando Programación Orientada a Objetos en Java

$
0
0
Llevo bastante tiempo sin publicar nada por motivos laborales, pero traté de no desperdiciar las oportunidades y por eso estuve haciendo una serie de vídeos sobre temas en torno a la programación en Java.......

En esta entrada quiero compartir un vídeo con un ejemplo simple sobre la programación orientada a objetos, como complemento a esta sobre los conceptos Básicos de la POO........ publicada hace un buen tiempo en CoDejaVu......

El vídeo es el numero 18 y hace parte de una serie de videoTutoriales pertenecientes a un curso de Java Básico que inicié en youtube y el cual pueden consultar en el botón VideoTutoriales CoDejaVu (arriba)..... estos vídeos son una mezcla de tutoriales enfocados solo para youtube y otros como parte de clases de programación que dicto en mi trabajo.......espero que les puedan servir.....




Nuevamente un Saludo y los invito a visitarlo, suscribirse y comentar, para que CoDejaVu pueda llegar a muchos mas ;)


También te podría Interesar.

¿Hay algo que quieras anexar o comentar sobre esta entrada?  no dudes en hacerlo.....y si te gustó...... te invito a compartir y Suscribirte ingresando al botón "Participar en este sitio" para darte cuenta de mas entradas como esta ;)

Que son los Arreglos en Java?

$
0
0
Hasta el momento se ha trabajado con variables de tipo primitivas (byte, short, int, long, float, double…) las cuales como característica principal solo permiten almacenar un único valor cada vez (int x=9: x almacena solo el valor 9)...

En esta entrada trabajaremos con algo fundamental en terminos de programación y trabajo con datos, vamos a ver que son los arreglos y como trabajar con ellos...

Que son?

Un array (arreglo) es una estructura de datos que contiene una colección de datos del  mismo tipo, estas son usadas como contenedores que almacenan uno o más datos relacionados, en lugar de declarar cada dato de manera independiente.


Por medio de los arreglos veremos cómo crear un elemento que nos permite definir una “variable” que contenga diferentes datos del mismo tipo asociados al mismo identificador.


Básicamente se tienen 3 categorías de arreglos, los arreglos unidimensionales (vectores), los arreglos bidimensionales (matrices) y los arreglos multidimensionales (varias dimensiones), hoy nos vamos a enfocar en los arreglos unidimencionales....


Arreglos Unidimensionales.

Aunque ya se mencionó que los arreglos unidimensionales también son conocidos como vectores, es muy común que estos sean conocidos solo como arreglos simplemente refiriéndose a ellos como los de una sola dimensión, se componen de una fila y una o más columnas, las cuales representan espacios de memoria donde se pueden almacenar datos.

Para poder trabajar con arreglos, se debe crear el arreglo definiendo cual es el tipo de datos que va a contener y cuál es el tamaño del mismo (cantidad de datos que puede almacenar), de ese modo si definimos que el arreglo va a ser de tipo byte, solo podrá almacenar datos de tipo byte, no se puede mesclar en dicho arreglo datos int, short o long por ejemplo.

La creación de un arreglo se realiza en 3 pasos básicos: Declaración, construcción e inicialización.

Declaración de arrays.

Los arreglos se identifican porque al momento de su creación se utilizan corchetes ( [ ] ), al usarlos java automáticamente identifica que se va a trabajar con arrays, teniéndose 2 formas generales para su creación.

<tipoDato>  identificador[ ];           Ej:  int arregloDeEnteros[ ];

O también...

<tipoDato> [ ]  identificador;         Ej:  int[ ] arregloDeEnteros;

Donde tipoDato define el tipo de dato de cada uno de los valores que puede contener el arreglo.

Construcción del array.

Después de haber declarado el array se puede construir e inicializar de 2 maneras.

Forma1.
la primera se usa cuando inicialmente no sabemos cuáles son los valores que va a contener el arreglo, ya que luego serán ingresados, se crea con la siguiente estructura:

Identificador = new <tipoDato> [ tamaño];       Ej. arregloDeEnteros = new int[5];

En el ejemplo anterior se puede observar como el arregloDeEnteros declarado previamente, ahora es creado con un tamaño de 5 posiciones de memoria, estas posiciones corresponden a un espacio donde se pueden almacenar 5 datos de tipo int, iniciando desde la posición 0 a la posición tamaño-n, para este caso siendo el tamaño 5, entonces se inicia de la posición 0 hasta 4, siendo cada posición una columna del arreglo.




Inicialización del array.

Para llenar el arreglo se debe tener presente el tamaño asignado pues cada posición almacenará un valor del tipo de dato del arreglo, el llenado se realiza de la siguiente manera:

identificador[posición ]=dato;         

Sabemos que el identificador corresponde al nombre del arreglo, posición a alguna de las casillas del arreglo y dato el valor a asignar, que debe ser del tipo de dato del arreglo.

Ej:  arregloDeEnteros[0]=1;
      arregloDeEnteros[1]=5;
      arregloDeEnteros[2]=8;
      arregloDeEnteros[3]=9;
      arregloDeEnteros[4]=12;


Como se mencionó, es muy importante tener presente tanto el tipo de dato como el tamaño del arreglo, ya que es muy común que se presenten los siguientes errores:

- Almacenar otros tipos de datos diferentes al tipo de dato del arreglo

  • arregloDeEnteros[0]=”1”; //Error, si es numérico no puede estar como String
  • arregloDeEnteros[1]=”hola”; //Error, el arreglo es de tipo int, y se quiere almacenar  un String

- Almacenar datos en una posición diferente al tamaño del arreglo, esto indicaría que hay error en el índice del arreglo.

  •  arregloDeEnteros[-1]=3; //Error, el tamaño del arreglo es de 5 pero las posiciones van de 0 a 4
  •  arregloDeEnteros[5]=8; //Error, el tamaño del arreglo es de 5 pero las posiciones van hasta 4
  •  arregloDeEnteros[8]=8; //Error, el tamaño del arreglo es de 5 pero las posiciones van hasta 4

Forma 2.
Esta forma se usa cuando sabemos con exactitud cuáles son los valores que va a contener el arreglo, aquí el proceso de construcción e inicialización se hace directo y se realiza de la siguiente manera:

tipoDato[ ] Identificador = {valor1, valor2, valor3, valor4};   

El identificador corresponde al nombre del arreglo, las llaves corresponden a lo que va a contener el arreglo, cada posición se identifica separada por comas (,) y los valores corresponden a los datos que se van a almacenar.

Ej:  int[ ] arregloDeEnteros= {2, 3, 6, 8,3}; 



Como se puede observar no fue necesario indicar cuál es el tamaño del arreglo, ya que java identifica el tamaño gracias a las posiciones y cantidad de valores separados por coma.

Acceso a los datos de un arreglo.

Para acceder a la información almacenada dentro de un arreglo se debe tener presente el nombre del arreglo, tamaño y el tipo de datos que contiene.

Por ejemplo, si queremos almacenar un dato de un arreglo en una variable, la forma de acceder es por medio de un índice que corresponde a la posición del valor a obtener:

variable = Identificador[posición];

donde la variable corresponde a una variable del tipo de dato que se quiere almacenar, el identificador corresponde al nombre del arreglo y la posición a alguno de los valores entre 0 y tamaño-1

Tomando el arreglo anterior como ejemplo, queremos obtener el valor en la posición 3 del arreglo.



Entonces:

 int dato=arregloDeEnteros[3];

Por lo tanto dato, almacenará el valor 8.


Ejemplo Forma 1:


String arregloA[];//Declaración del arreglo
arregloA=new String[4];//Creación o construcción del arreglo

//Llenado del arreglo
arregloA[0]="hola";//inicialización arreglo en la posición 0
arregloA[1]="casa";//inicialización arreglo en la posición 1
arregloA[2]="perro";//inicialización arreglo en la posición 2
arregloA[3]="oso";//inicialización arreglo en la posición 3

//Obteniendo información del arreglo
System.out.println("Valor arreglo en la posición 0: "+arregloA[0]);
System.out.println("Valor arreglo en la posición 1: "+arregloA[1]);
System.out.println("Valor arreglo en la posición 2: "+arregloA[2]);
System.out.println("Valor arreglo en la posición 3: "+arregloA[3]);

El ejemplo anterior crea un arreglo de tipo String y tamaño 4 con posiciones de 0 a 3



Ejemplo Forma 2:

String arregloA[];//Declaración del arreglo
//Declaración, Inicialización y Creación del arreglo
String nombres[]={"Carlos","Julian","Cristian","Miguel"};

//Obteniendo información del arreglo
System.out.println("Valor arreglo en la posición 0: "+nombres[0]);
System.out.println("Valor arreglo en la posición 1: "+nombres[1]);
System.out.println("Valor arreglo en la posición 2: "+nombres[2]);
System.out.println("Valor arreglo en la posición 3: "+nombres[3]);

El ejemplo anterior crea un arreglo de tipo String y tamaño 4 con posiciones de 0 a 3

Llenado y consulta de datos del arreglo por medio de ciclos.

Cuando se desea llenar un arreglo de muchas posiciones, los ciclos juegan un papel muy importante ya que nos permitirán hacer este proceso más dinámico, pues podemos recorrer cada posición usando la variable de incremento, tanto para asignar como para obtener.

Teniendo en cuenta que siempre cuando asignamos o consultamos datos del arreglo, debemos indicar cuál es la posición o índice que vamos a usar, la posición podemos trabajarla como una variable que toma  cada uno de los valores posibles que a  tomar.

Ej: arreglo[posición]=valor  //asignación valor en el arreglo
     Variable=  arreglo[posición] //asignación valor del arreglo en la variable

Ejemplo: Algoritmo que solicita el ingreso de 6 valores numéricos que se almacenarán en las posiciones del arreglo, posteriormente lo recorre y lo imprime.  



En el ejemplo anterior se crea un arreglo de tipo int de 6 posiciones (de 0 a 5) el llenado del arreglo se realiza de la línea 20 a la 22 solicitando el ingreso de un dato numérico al usuario, indicándosele cual es la posición donde se almacena por medio de la variable i.

Note que inicialmente la variable empieza en cero (i=0) y llega hasta numeros.length el cual obtiene el tamaño del arreglo, luego al decir numeros[i] es como si se estuviera diciendo numeros[0] y a medida que el ciclo se repite la variable crece y por ende las posiciones a llamar.

Posteriormente en la línea 27 inicia un ciclo que permite recorrer el arreglo para imprimir cada una de sus posiciones, inicia nuevamente en i=0 y llega hasta el tamaño del arreglo, luego en la línea 28 almacena el valor de cada posición en una cadena que va incrementándose, en la línea 28 va concatenando un salto de línea y esto se repite hasta que finaliza el ciclo, por ultimo imprime todos los valores que el usuario ingresa por medio de un mensaje en pantalla.



También te podría Interesar.


¿Hay algo que quieras anexar o comentar sobre esta entrada?  no dudes en hacerlo.....y si te gustó...... te invito a compartir
 y Suscribirte ingresando al botón "Participar en este sitio" para darte cuenta de mas entradas como esta ;)

Tutorial Aplicación Login con Privilegios en Java

$
0
0

Hola, desde hace un tiempo vengo trabajando en  VideoTutorialessobre la creación de una aplicación Login con Privilegios en Java, en esta entrada quiero compartirles el indice de contenido de estos videos para que los puedan consultar....

Aunque inicialmente se pensó en solo los videos relacionados a la ventana de login, vi que era muy importante continuar la secuencia vinculando temas de interés como es el caso de la conexión a una base de datos MySql y los métodos básicos para la generación de un CRUD, validaciones y tambien el uso de los pátrones DAO y VO como conceptos fundamentales a conocer....(Conceptos que tambien puedes consultar en el indice de contenido del blog)

Cabe mencionar que el manejo de usuarios para loguearse al sistema inicialmente se maneja por código, la idea es seguir alimentando la secuencia para poder usar los usuarios registrados y que estos se logueen mas adelante............No siendo mas, les comparto el indice de contenido y espero que les pueda servir!!!!

Video Introducción Ventana Login con Privilegios en Java  

 

Y listo esos son todos los videos hasta el momento para crear una funcionalidad tan usada cuando creamos aplicaciones Java, mas adelante espero retomar la secuencia y poder complementar la aplicación con nuevas funcionalidades!!!!

Descarga!!!

Les dejo elenlace de descargapor si lo quieren revisar ;)......si usas NetBeans te interesará esta entrada con un vídeo paso a paso de como abrirlo en el...recuerden que es gratis, y nada cuesta opinar, compartir o agradecer :)



También te podría Interesar.

¿Hay algo que quieras anexar o comentar sobre esta entrada?  no dudes en hacerlo.....y si te gustó...... te invito a compartir y Suscribirte ingresando al botón "Participar en este sitio" para darte cuenta de mas entradas como esta ;)

Que son las Matrices en Java (Arreglos Bidimensionales)

$
0
0
En una entrada anterior hablamos sobre los Arreglos unidimensionales, en esta ocasión vamos a continuar con la entrada pero ahora conociendo las Matrices o arreglos bidimensionales!!!!

   
¿Que son?

Este tipo de arreglos son conocidos como matrices y corresponden a una estructura de datos que puede almacenar muchos más datos que los arreglos unidimensionales, pues estos últimos como ya se mencionó se componen de una fila por n columnas, mientras que los bidimensionales se componen de n filas por m columnas.

Como se ve en la imagen, se tiene un arreglo de 3 filas por 4 columnas siendo n=3 y m=4, la lógica de la estructura es muy similar a los arreglos unidimensionales, cada índice inicia en 0 hasta el tamaño-1 por esa razón las posiciones de las filas van de 0 a 2 y el de las columnas de 0 a 3.

Se puede ver que la matriz anterior es como si fueran 3 arreglos de tamaño 4 juntos, pues se puede entender cada fila como uno de ellos, por lo tanto la declaración, construcción e inicialización es muy similar.


Declaración de Matrices.

Las matrices se identifican porque al momento de su creación se utilizan doble corchetes ( [ ] [ ]), al usarlos java automáticamente identifica que se va a trabajar con matrices, ya que representan el tamaño de filas por columnas que puede tener, igual que los arreglos unidimensionales se tienen 2 formas generales para su creación.

              <tipoDato>  identificador[ ] [ ];           Ej:  int matrizDeEnteros[ ] [ ];

O también

              <tipoDato>[ ] [ ]  identificador;         Ej:  int[ ] [ ] matrizDeEnteros;

Donde tipo de dato define el tipo de dato de cada uno de los valores que puede contener la matriz.


Construcción de la Matriz.

Después de haber declarado la matriz se puede construir e inicializar de 2 maneras.

Forma1.
la primera se usa cuando inicialmente no sabemos cuáles son los valores que va a contener la matriz, ya que luego serán ingresados, se crea con la siguiente estructura:
 

Identificador = new <tipoDato> [filas] [columnas];       Ej. matrizDeEnteros = new int[3] [4];

Podemos observar como la matrizDeEnteros declarada previamente, ahora es creada con un tamaño de 3 x 4 (3 filas 4 columnas) creándose un total de posiciones de memoria equivalente a la multiplicación de estos valores, así estas posiciones corresponden a un espacio donde se pueden almacenar 12 datos de tipo int.


Inicialización de la Matriz.

Igual que con los arreglos, se deben tener presente el tamaño asignado para las filas y columnas pues cada posición almacenará un valor del tipo de dato declarado para la matriz, el llenado se realiza de la siguiente manera:

          identificador[fila] [columna]=dato;          

Sabemos que el identificador corresponde al nombre de la matriz, posición a alguna de las casillas y dato el valor a asignar, que debe ser del tipo de dato definido al momento de la creación.


Forma 2.
De la misma manera que la segunda forma de llenado de arreglos, para las matrices se usa cuando sabemos con exactitud cuáles son los valores que va a contener la matriz, aquí el proceso de construcción e inicialización se hace directo y se realiza de la siguiente manera:
 

Identificador = { {valor, valor,valor}, {valor, valor,valor}, {valor, valor,valor} };

Dónde:
Identificador: nombre de la matriz
Llaves externas: representa toda la matriz en general
Llaves internas: representan cada una de las filas que puede contener la matriz
Valores: representan los valores de cada columna en la fila respectiva

Como vemos en la estructura, se está creando una matriz de 3x3, pues hay 9 valores repartidos en 3 grupos correspondientes a las filas los cuales se muestran encerrados en las llaves internas.


Como se puede observar no fue necesario indicar cuál es el tamaño de la matriz, ya que java identifica el tamaño gracias a las posiciones y cantidad de valores separados por coma. 

Acceso a los datos de una matriz.

Para acceder a la información almacenada dentro de una matriz se debe tener presente el nombre de la matriz, tamaño y el tipo de datos que contiene.

Por ejemplo, si queremos almacenar un dato de una variable, la forma de acceder es por medio de los  índices de fila y columna que corresponde a la posición del valor a obtener:

             variable = Identificador[fila] [columna];


donde la variable corresponde a una variable del tipo de dato que se quiere almacenar, el identificador corresponde al nombre de la matriz y la posición a alguno de los valores entre 0 y tamaño-1 (tanto para fila como para la columna)

Tomando el ejemplo de la matriz anterior, queremos obtener el valor en la posición (2,3) de la matriz (ver imagen anterior).

Entonces:

           int dato= matrizDeEnteros [2] [3];

Por lo tanto dato, almacenará el valor 16.


Ejemplo Forma 1.
 
Ejemplo Forma 2.

 Ahora miremos el siguiente ejemplo donde se creará la misma matriz anterior pero usando la segunda forma trabajada.




Llenado y consulta de datos del arreglo por medio de ciclos.

Cuando se desea llenar un arreglo de muchas posiciones, los ciclos juegan un papel muy importante ya que nos permitirán hacer este proceso más dinámico, pues podemos recorrer cada posición usando la variable de incremento, tanto para asignar como para obtener.


Teniendo en cuenta que siempre cuando asignamos o consultamos datos del arreglo, debemos indicar cuál es la posición o índice que vamos a usar, la posición podemos trabajarla como una variable que toma  cada uno de los valores posibles que a  tomar.

Ej: arreglo[posición]=valor  //asignación valor en el arreglo
      Variable=  arreglo[posición] //asignación valor del arreglo en la variable.




El ejemplo anterior realiza un proceso similar al llenado y búsqueda de un arreglo, esta vez note que se utilizan 2 ciclos anidados tanto para el llenado como la consulta de los datos.

El primer ciclo for lo que hace es recorrer cada una de las filas, caso contrario el segundo recorre las columnas, de este modo se puede usar el proceso matriz[i][j] para ir almacenando los datos en cada posición dado el vector (i,j) que representa (filas,columnas).



También te podría Interesar.


¿Hay algo que quieras anexar o comentar sobre esta entrada?  no dudes en hacerlo.....y si te gustó...... te invito a compartir
 y Suscribirte ingresando al botón "Participar en este sitio" para darte cuenta de mas entradas como esta ;)












Ejemplo JColorChooser

$
0
0
Hola!!! Después de otra semana pesada retomamos el tema de Componentes Java Swing..... con el post anterior iniciamos las publicaciones sobre los componentes complejos, este es el turno del JColorChooser.....

Aunque está en la lista de componentes complejos realmente su uso no tiene ninguna complejidad.... al contrario tan solo es cuestión de instanciar su clase y listo, tenemos una herramienta para seleccionar colores a nuestra completa disposición......

Que Es?

La clase JColorChooser nos presenta una ventana de herramientas para la selección de colores....... la ventana es en realidad un JDialog que le brinda al usuario la posibilidad de interactuar con las paletas de colores proporcionadas.....


El Ejemplo.

Este ejemplo es muy... muy.... muuuuy común, rápido y simple........como se mencionó anteriormente solo es cuestión de instanciar la clase JColorChooser y ya tendremos nuestra ventana con las paletas de colores disponibles.


Vamos a construir una ventana JFrame donde alojaremos un JPanel que va a cambiar de color a medida que el usuario seleccione, esto lo realizamospor medio de un JButton que al presionarse instancia la clase JColorChooser y nos carga la ventana de dialogo con las herramientas....

El siguiente código define cuando se presiona el botón entonces instancia la clase JColorChooser y luego el color seleccionado se asigna en un objeto de tipo awt.Color por medio del método showDialog, le asignamos un titulo y un color por defecto.....
if (e.getSource()==botonColor)
{
JColorChooser ventanaDeColores=new JColorChooser();
color=ventanaDeColores.showDialog(null, "Seleccione un Color", Color.gray);
panelColor.setBackground(color);
}

El método showDialog carga la ventana JDialog donde el color seleccionado se asigna al panel de nuestra ventana....

Este JDialog tiene un JTabbedPane compuesto de 3 pestañas donde encontramos una pestaña con la paleta de colores básicos,  otra pestaña con elementos para definir colores HSB y por ultimo la pestaña RGB donde por medio de JSpinner y JSlider podemos seleccionar nuestros colores....

Y Listo, muy simple Verdad???

Esta entrada es de esas rápidas pero efectivas, los invito a descargarlo y validar su funcionamiento...........espero que les pueda servir!!!!


Descarga!!!

Les dejo el enlace de descarga por si lo quieren revisar ;).......está en Eclipse pero si usas NetBeans te interesará esta entrada con un vídeo paso a paso de como abrirlo en el...recuerden que es gratis, y nada cuesta opinar, compartir o agradecer :)


También te podría Interesar.


¿Hay algo que quieras anexar o comentar sobre esta entrada?  no dudes en hacerlo.....y si te gustó...... te invito a compartir y
 Suscribirte ingresando al botón "Participar en este sitio" para darte cuenta de mas entradas como esta ;)

Ejemplo JTree En Java

$
0
0
Otra semana de las largas y otra demora en publicar, sin embargo continúo con la secuencia de componentes Complejos Java Swing....

En esta ocasión vamos a trabajar con el JTree o también conocido como Arboles.... Realizaremos un ejemplo sencillo mostrando el procedimiento de creación y le daremos un uso simple sin mayores complicaciones.

Que es?

El Jtree es uno de los componentes complejos aveces mas dificiles de entender y por su  "grado de complejidad" muchas veces evitado por algunos....... representa un árbol jerárquico que podemos mostrar en nuestras aplicaciones, se compone de nodos a los que le podemos vincular eventos o acciones dependiendo de nuestras necesidades.

Para que sirve?

Un Jtree puede ser utilizado para muchas cosas, principalmente se utilizan para mostrar rutas de directorios, un ejemplo común lo vemos en nuestro computador (no importa cual sea el sistema operativo, desde que se pueda trabajar de forma gráfica), si ingresamos a un explorador de carpetas vemos el árbol de directorios que nos permite navegar mas facilmente.

Básicamente nos permiten representar estructuras de datos jerárquicas, cada elemento es un nodo al que le podemos definir su función y sus eventos independientes.

En Java podemos hacer casi cualquier cosa con este componente, sin embargo dependiendo de lo que necesitemos el grado de dificultad y los conocimientos en programación pueden variar.

El Ejemplo.

En esta ocasión y como es normal, vamos a hacer un ejemplo simple, no vamos a profundizar mucho en el componente, tan solo usaremos lo necesario para crear nuestro árbol y que se entienda su funcionamiento.

La aplicacion mostrará un árbol en el que evidenciaremos la estructura jerárquica con un directorio que representa la raíz, un directorio secundario que representa una rama y archivos independientes que representan las hojas.


Nuestra aplicación permitirá mostrar un JPanel diferente por cada archivo de nuestro árbol, esto nos será muy útil si queremos simular un explorador como el mostrado anteriormente, donde al seleccionar un directorio se muestra su contenido, adicionalmente veremos en un JTextArea la ruta de directorios recorrida......... Veamos

La Aplicación.

La Aplicación es muy simple, contaremos con una Clase Principal y una Clase Ventana, la primera clase sera desde donde realizamos el llamado a la ventana del sistema mostrada anteriormente...... veamos de forma rápida lo principal de nuestra clase....

Para crear el árbol además de utilizar obviamente la Clase JTree, también implementaremos la interface TreeSelectionListener, esta nos permitirá darle eventos a nuestros nodos (Mas adelante lo veremos).........
public class Ventana extends JFrame implements TreeSelectionListener {

Adicionalmente vamos a utilizar un JScrollPane donde almacenaremos nuestro árbol, esto es importante ya que si nuestro árbol es muy grande necesitamos un contenedor que permita su uso facilmente.
scrollPaneArbol = new JScrollPane();
scrollPaneArbol.setBounds(10, 80, 150, 130);
scrollPaneArbol.setViewportView(arbol);

Definimos un método crearArbol() el cual sera el encargado de contener todo lo necesario para la creación del árbol, la creación y vinculación de los nodos con los que vamos a trabajar.
private void crearArbol() {
/**Construimos los nodos del arbol que seran ramas u hojas*/
/**Definimos cual será el directorio principal o la raiz de nuestro arbol*/
DefaultMutableTreeNode carpetaRaiz = new DefaultMutableTreeNode("Carpeta");
/**Definimos el modelo donde se agregaran los nodos*/
DefaultTreeModel modelo = new DefaultTreeModel(carpetaRaiz);
/**agregamos el modelo al arbol, donde previamente establecimos la raiz*/
arbol = new JTree(modelo);
/**definimos los eventos*/
arbol.getSelectionModel().addTreeSelectionListener(this);

/**Definimos mas nodos del arbol y se lo agregamos al modelo*/
DefaultMutableTreeNode carpeta2 = new DefaultMutableTreeNode("SubCarpeta");
DefaultMutableTreeNode archivo1 = new DefaultMutableTreeNode("Archivo1");
DefaultMutableTreeNode archivo2 = new DefaultMutableTreeNode("Archivo2");
DefaultMutableTreeNode archivo3 = new DefaultMutableTreeNode("Archivo3");
/**Definimos donde se agrega el nodo, dentro de que rama y que posicion*/
modelo.insertNodeInto(carpeta2, carpetaRaiz, 0);
modelo.insertNodeInto(archivo1, carpetaRaiz, 1);
modelo.insertNodeInto(archivo2, carpetaRaiz, 2);

/**Creamos las hojas del arbol*/
DefaultMutableTreeNode archivo4 = new DefaultMutableTreeNode("Archivo4");
DefaultMutableTreeNode archivo5 = new DefaultMutableTreeNode("Archivo5");
DefaultMutableTreeNode archivo6 = new DefaultMutableTreeNode("Archivo6");

modelo.insertNodeInto(archivo3, carpeta2, 0);
modelo.insertNodeInto(archivo4, carpeta2, 1);
modelo.insertNodeInto(archivo5, carpeta2, 2);
modelo.insertNodeInto(archivo6, carpeta2, 3);
}

Como vemos para la creación de los nodos utilizamos la clase DefaultMutableTreeNode asi como una clase DefaultTreeModel el cual sera el modelo donde agregaremos cada uno de estos, definiendo allí la estructura de directorios y archivos con los que vamos a trabajar..... Vemos también la linea
arbol.getSelectionModel().addTreeSelectionListener(this);

donde vinculamos los eventos a nuestro árbol, esto gracias a que implementamos la interfaz TreeSelectionListener mencionada anteriormente.

Por ultimo utilizamos el método valueChanged() definido por la interfaz anterior, para implementar los eventos que necesitemos....
public void valueChanged(TreeSelectionEvent e) {

DefaultMutableTreeNode nodoSeleccionado;
nodoSeleccionad=(DefaultMutableTreeNode)arbol.getLastSelectedPathComponent();
eventosNodoSeleccionado(nodoSeleccionado);

s+="Ruta: ";
areaDeTexto.setText("\n");
areaDeTexto.setText("hola");
/**Obtenemos la ruta seleccionada*/
TreePath rutaSeleccionada = e.getPath();
Object [] nodos = rutaSeleccionada.getPath();
for (int i = 0; i < nodos.length ; i++){
Object nodo=nodos[i];
s+=nodo.toString() + " / ";
}
s+="\n";
areaDeTexto.setText(s);
}

En el método anterior usamos 2 maneras de capturar los eventos, la primera
usando el método getLastSelectedPathComponent() el cual nos permite obtener el nodo seleccionado, este se lo enviamos al método eventosNodoSeleccionado() que nos permitirá definir el panel asociado a nuestra selección.

La otra manera es mediante un objeto de tipo TreePath, este lo obtenemos usando el evento definido al momento de seleccionar un nodo, usando e.getpath() obtenemos la ruta completa de nuestra selección, esta ruta esta compuesta de los nodos de nuestro árbol, los cuales se almacenan en un arreglo de objetos que podemos recorrer y mostrarlos en el área de texto de nuestra aplicación.

Y una vez mas llegamos a un rápido final con un ejemplo simple que puede ser de mucha ayuda...........como se mencionó esta es una forma rápida y fácil de trabajar con nodos, espero mas adelante poder produndizar en este componente...... y espero que les pueda servir ;)

Descarga!!!

Les dejo el enlace de descargapor si lo quieren revisar ;).....está en Eclipse pero si usas NetBeans te interesará esta entrada con un vídeo paso a paso de como abrirlo en el...recuerden que es gratis, y nada cuesta opinar, compartir o agradecer :)


También te podría Interesar.


¿Hay algo que quieras anexar o comentar sobre esta entrada?  no dudes en hacerlo.....y si te gustó...... te invito a compartir y
 Suscribirte ingresando al botón "Participar en este sitio" para darte cuenta de mas entradas como esta ;)

Ejemplo JFileChooser

$
0
0
Nuevamente regreso con un ejemplo práctico sobre uno de los componentes Java Swing.............. el día de hoy les traigo el JFileChooser, este se encuentra en la categoría de componentes Complejos, ya que igual que el JColorChooserpresenta una ventana con funciones ya definidas y lógica preestablecida....

A diferencia del anterior, aunque ambos nos permiten manipular ventanas definidas, el JFileChooser encierra un poquito mas de complejidad, pues en este caso trabajamos con archivos (no se requiere mucho conocimiento sobre archivos ya que el ejemplo es muy diciente, sin embargo mas adelante dedicaremos un espacio a el manejo de Archivos con Java...).

Que Es?

La Clase JFileChooser, nos presenta una ventana de herramientas, que dependiendo de nuestra lógica, nos permitirá Abrir o Guardar archivos, igual que la JColorChooser, la ventana es una ventana de Dialogo para navegar por nuestros directorios...

El Ejemplo.

Este es otro de esos ejemplos básicos y fáciles de entender, en si el componente que estamos trabajando habla por si solo...... usaremos una ventana JFrame con un JTextArea y dos JButtons.


La aplicación nos permitirá Abrir o Guardar un archivo de texto dependiendo del botón que presionemos, veamos los métodos que nos permiten esté procedimiento (Se crea el objeto en cada método por motivos del ejemplo, pero lo ideal es que el objeto sea global para trabajar con el mismo...).

Abrir Archivos.

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


La Clase JFileChooser nos permite cargar la ventana anterior usando su método showOpenDialog(this), cuando seleccionamos el archivo deseado, lo agregamos a un objeto de tipo File por medio del método getSelectedFile(), posteriormente recorremos el archivo y lo almacenamos en un String...
private String abrirArchivo() {
String aux="";
texto="";
try
{
/**llamamos el metodo que permite cargar la ventana*/
JFileChooser file=new JFileChooser();
file.showOpenDialog(this);
/**abrimos el archivo seleccionado*/
File abre=file.getSelectedFile();

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

Por ultimo retornamos la cadena con el contenido de nuestro archivo y luego se almacena en el área de texto usando su propiedad setText(texto), en caso de cualquier excepción, usamos los bloques try - catch para manejarlo....

Guardar Archivo.

Si definimos Guardar, igual que el anterior, se cargará una ventana para navegar por nuestros directorios y definir la ruta donde será almacenado.


De la misma forma, la lógica para navegar por nuestro PC biene definida gracias al metodo showSaveDialog(this) de la clase JFileChooser, que nos permite cargar la ventana de dialogo y encontrar la ruta donde almacenaremos el archivo..... 
private void guardarArchivo() {
try
{
String nombre="";
JFileChooser file=new JFileChooser();
file.showSaveDialog(this);
File guarda =file.getSelectedFile();

if(guarda !=null)
{
/*guardamos el archivo y le damos el formato directamente,
* si queremos que se guarde en formato doc lo definimos como .doc*/
FileWriter save=new FileWriter(guarda+".txt");
save.write(areaDeTexto.getText());
save.close();
JOptionPane.showMessageDialog(null,
"El archivo se a guardado Exitosamente",
"Información",JOptionPane.INFORMATION_MESSAGE);
}
}
catch(IOException ex)
{
JOptionPane.showMessageDialog(null,
"Su archivo no se ha guardado",
"Advertencia",JOptionPane.WARNING_MESSAGE);
}
}
}

Internamente le definimos la extensión que vamos a manejar y tan solo es cuestión de dar un nombre y listo, el sistema guarda el contenido del área de texto en un objeto de tipo FileWriter  y posteriormente  el archivo en la ruta especificada....

Y Listo!!!!
Llegamos al final del ejemplo y al final de esta entrada, vemos que los métodos anteriores engloban todo lo necesario para utilizar la clase JFileChooser, y aunque no sepamos de archivos, es una muy buena oportunidad para aprender...



Descarga!!!

Les dejo elenlace de descargapor si lo quieren revisar ;)......si usas NetBeans te interesará esta entrada con un vídeo paso a paso de como abrirlo en el...recuerden que es gratis, y nada cuesta opinar, compartir o agradecer :)


También te podría Interesar.


¿Hay algo que quieras anexar o comentar sobre esta entrada?  no dudes en hacerlo.....y si te gustó...... te invito a compartir y
 Suscribirte ingresando al botón "Participar en este sitio" para darte cuenta de mas entradas como esta ;)

Ejemplo JList

$
0
0
Ya en la recta Final de los componentes Java Swing, continuamos con un nuevo ejemplo, en esta ocasión es el turno del JList....

Este está en el grupo de componentes Complejos aunque realmente su uso es muy simple así como la forma de entenderlo....

Que es?

Este componente nos permite presentar una lista de selección donde podemos escoger uno o varios elementos...... este tipo de selección ya la habíamos visto mediante el uso del componente AtómicoJComboBox, pero en ese para ver todos los elementos teníamos que desplegar el combo y solo podemos seleccionar de a una opción....

Agregar Elementos...

Voy a mostrar 2 formas de agregar elementos a un JList, la primera mediante un arreglo y la segunda usando la clase DefaultListModel...

Forma 1.

Para agregar elementos usando un arreglo es muy simple, tan solo tenemos que declarar nuestro arreglo y agregarselo al constructor del objeto JList con el que estemos trabajando..... esta forma es muy usada cuando traemos datos directamente de una BD y tenemos que mostrarla en pantalla....
JList listaNombres;
String nombres[] = { "Cristian", "Julian", "Milena"};
listaNombres = new JList( nombres );

Forma 2.

La segunda forma también es muy simple, tenemos que declarar un objeto de tipo DefaultListModel y por medio del método addElement(elemento), vamos agregando elementos a nuestro modelo, posteriormente dicho modelo se agrega al JList con el que trabajemos...... esta forma es muy usada cuando tenemos que agregar y mostrar directamente los datos ingresados en pantalla.
JList listaNombres=new JList();
DefaultListModel modelo = new DefaultListModel();
modelo.addElement("Elemento1");
modelo.addElement("Elemento2");
modelo.addElement("Elemento3");
listaNombres.setModel(modelo);


El Ejemplo.

En el ejemplo usaremos la Forma 2, tan solo presentaremos una ventana con 3 opciones principales, agregar, eliminar y borrar lista, de esta manera evidenciaremos el funcionamiento del JList....


Veamos el código principal asociado a nuestro JList, Inicialmente declaramos nuestra lista, nuestro modelo y un Scroll que contendrá la lista en caso de que se agreguen muchos elementos....
private JList listaNombres;//declaramos La Lista
private DefaultListModel modelo;//declaramos el Modelo
private JScrollPane scrollLista;

Luego instanciamos los componentes, vemos la linea ListSelectionModel.SINGLE_SELECTION, esto nos indica que nuestra lista tan solo permitirá la selección de un único elemento, si quisieramos seleccionar mas de un elemento utilizábamos                     ListSelectionModel.MULTIPLE_INTERVAL_SELECTION.........(esto lo veremos en un proximo ejemplo)....
//instanciamos la lista
listaNombres = new JList();
listaNombres.setSelectionMode(ListSelectionModel.SINGLE_SELECTION );

//instanciamos el modelo
modelo = new DefaultListModel();

//instanciamos el Scroll que tendra la lista
scrollLista = new JScrollPane();
scrollLista.setBounds(20, 120,220, 80);
scrollLista.setViewportView(listaNombres);

Posteriormente en los eventos de los botones definimos el llamado a los métodos que se encargarán de realizar la incersión de datos al modelo, la eliminación y el borrado, así como la actualización de un mensaje de estado cada vez que se ejecute una acción...
public void actionPerformed(ActionEvent evento) {
if (evento.getSource()==agregar)
{
agregarNombre();
mensaje.setText("Se agregó un nuevo elemento");
}
if (evento.getSource()==eliminar)
{
eliminarNombre(listaNombres.getSelectedIndex() );
}
if (evento.getSource()==borrar)
{
borrarLista();
mensaje.setText("Se borró toda la lista");
}
}

Por ultimo se tienen los métodos llamados en el paso anterior..... el llenado se hace mediante la forma 2..... para eliminar un elemento de la lista, como se muestra en el paso anterior, debemos enviar el elemento seleccionado mediante el método getSelectedIndex() que retorna la posición del elemento, contando el primero con un índice 0, este valor es enviado y se usa el método modelo.removeElementAt(indice), para eliminarlo................ para borrar toda la lista, tan solo es necesario borrar el modelo utilizando el método modelo.clear()....
private void agregarNombre() {
String nombre=campo.getText();
modelo.addElement(nombre);
listaNombres.setModel(modelo);
campo.setText("");
}

private void eliminarNombre(int indice) {
if (indice>=0) {
modelo.removeElementAt(indice);
mensaje.setText("Se eliminó un elemento en la posición "+indice);
}else{
JOptionPane.showMessageDialog(null, "Debe seleccionar un indice"
,"Error", JOptionPane.ERROR_MESSAGE);

mensaje.setText("NO se seleccionó ningún elemento");
}
}

private void borrarLista() {
modelo.clear();
}

Y Listo!!! De esa manera vemos rápidamente un ejemplo simple utilizando el componente JList, usamos sus métodos básicos para tener una aplicacion en funcionamiento y el proceso no presenta mayores complicaciones....

Descarga!!!

Les dejo elenlace de descarga por si lo quieren revisar ;).....si usas NetBeans te interesará esta entrada con un vídeo paso a paso de como abrirlo en el.... recuerden que es gratis, y nada cuesta opinar, compartir o agradecer :)


También te podría Interesar.


¿Hay algo que quieras anexar o comentar sobre esta entrada?  no dudes en hacerlo.....y si te gustó...... te invito a compartir y
 Suscribirte ingresando al botón "Participar en este sitio" para darte cuenta de mas entradas como esta ;)

Ejemplo JOptionPane

$
0
0
Nuevamente después de otra semana muy pesada sin poder darle vuelta al Blog, regreso para finalizar la secuencia de entradas sobre Java Swing (Al menos la secuencia plasmada en este post). En esta ocasión trabajaremos uno de los componentes mas básicos pero no por ello menos importantes, los JOptionPane...


Que Es?

JOptionPane es una Clase que nos provee una serie de ventanas de dialogo predefinidas con el fin de facilitarnos algunos procesos de interacción con el usuario...... esta clase la encontramos en el paquete javax.swing, por eso para poder utilizarla debemos asegurarnos de tener el import correspondiente (import javax.swing.JOptionPane;)

Para que sirve?

Supongamos que queremos mostrar algún tipo de mensaje al usuario (Información, Advertencia, Error, Confirmación).............. pedir un dato........... o mejor aún, ¿que podríamos hacer para que nuestro usuario seleccione una o mas opciones para ejecutar algún proceso de nuestra aplicación?................ una buena opción es crear un formulario JDialog y allí poner lo que necesitemos...... simple verdad?.....

Si!!!! pero seria mas simple aún si utilizamos alguno de los métodos de JOptionPane, pues esta clase ya nos provee una ventana que hace eso por nosotros.....veamos....

Los JOptionPane.

A continuación veremos los tipos y algunos usos básicos que podemos darle a las ventanas de dialogo creadas a partir de esta clase....

JOptionPane.showMessageDialog.


Tal vez el mas básico y conocido de todos, el método showMessageDialog() nos genera una ventana de dialogo, con la cual podemos presentar al usuario un mensaje simple....
JOptionPane.showMessageDialog(null,"Es un mensaje Simple de Información");

Lo básico es utilizarlo con 2 parámetros, el primero representa la ventana Padre a la que pertenece (para entender esto los invito a leer JFrame y JDialog) o simplemente dejarlo en "Null" para que sea común en toda la aplicación, el segundo parámetro es el mensaje que queremos presentar....

El método también tiene algunas variantes, podemos adicional a lo anterior agregarle un titulo a nuestra ventana como también definir cual es el icono o tipo de mensaje que queremos presentar, si es de información, error, advertencia o confirmación, esto lo hacemos gracias a las constantes ERROR_MESSAGE, INFORMATION_MESSAGE, WARNING_MESSAGE, QUESTION_MESSAGE, o PLAIN_MESSAGE...

 
por ejemplo para la ventana de advertencia tan solo debemos escribir el siguiente código (la diferencia con el anterior es que le adicionamos 2 parámetros mas...)
JOptionPane.showMessageDialog(null, "Este es un mensaje de Advertencia",
"WARNING_MESSAGE", JOptionPane.WARNING_MESSAGE);

Cabe mencionar que estas variantes aplican para cualquiera de los métodos que vamos a trabajar.....

JOptionPane.showInputDialog.


Este método también es muy conocido y útil cuando lo que queremos es solicitar el ingreso de datos, por defecto presenta una ventana simple similar a las anteriores pero con un campo de texto para ingresar información....... por defecto podemos obtener el dato ingresado mediante un String, sin embargo podemos recibir datos numéricos y posteriormente hacer la conversión.
int numero=Integer.parseInt(JOptionPane.showInputDialog("Ingrese un" +
" numero para multiplicarlo por 2"));

Adicionalmente podemos definir que tipo de opciones mostrar.


El codigo es:
Object color = JOptionPane.showInputDialog(null,"Seleccione Un Color",
"COLORES", JOptionPane.QUESTION_MESSAGE, null,
new Object[] { "Seleccione","Amarillo", "Azul", "Rojo" },"Seleccione");

Como vemos el método también nos brinda la posibilidad de vincular un combo de selección donde definimos el arreglo de opciones y el valor seleccionado por defecto.


JOptionPane.showConfirmDialog.


Este método nos brinda una ventana de confirmación donde por defecto se cargan 3 botones "Si", "No", "Cancelar", es muy útil cuando realizamos operaciones delicadas donde siempre es importante que el usuario confirme, también es muy común encontrarla cuando queremos cerrar sesión o salir de nuestra aplicación por medio de un evento determinado...
int resp=JOptionPane.showConfirmDialog(null,"Usas mucho el JOptionPane?");
if (JOptionPane.OK_OPTION == resp){
System.out.println("Selecciona opción Afirmativa");
}
else{
System.out.println("No selecciona una opción afirmativa");
}

El método retorna un valor entero que corresponde a la opción definida por el usuario....igual que en los ejemplos anteriores, existen variantes que podemos vincular para personalizar nuestro JOptionPane, además de los tipos de iconos o mensajes, también podemos usar las constantes YES_OPTION, NO_OPTION, OK_OPTION, CANCEL_OPTION, CLOSED_OPTION que definen cuales opciones mostrar.

JOptionPane.showOptionDialog.


Este es el ultimo de los métodos que trabajaremos pero el que nos brinda mas opciones de configuración, los métodos anteriores son sobreCargados (Mas adelante se explicará este termino en otra entrada), esto quiere decir que tenemos varios métodos con el mismo nombre pero que reciben distintos parámetros...............el showOptionDialog es un único método que posee todos los parámetros requeridos para su configuración.
JCheckBox chec=new JCheckBox("Prueba");

int seleccion = JOptionPane.showOptionDialog( null,"Seleccione una opcion",
"Selector de opciones",JOptionPane.YES_NO_CANCEL_OPTION,
JOptionPane.QUESTION_MESSAGE,null,// null para icono por defecto.
new Object[] { "opcion 1", "opcion 2", "opcion 3",chec },"opcion 1");

if (seleccion != -1){
System.out.println("seleccionada opcion " + (seleccion + 1));
}
if (chec.isSelected()){
System.out.println("Selecciona el Chec");
}

Con este podemos crear una ventana de dialogo con diferentes opciones definidas en un array de objetos, podemos pasarle diferentes componentes gráficos y el los mostrará sin inconveniente....

Y Listo, básicamente estos son los principales métodos y componentes JOptionPane, con ellos podremos brindar facilidades y ahorrar tiempo en nuestra aplicación, a pesar de estar catalogado como un componente complejo, vemos que su uso es muy pero muy simple.... mas adelante traeré nuevas entradas donde los aplicaremos ;)



También te podría Interesar.


¿Hay algo que quieras anexar o comentar sobre esta entrada?  no dudes en hacerlo.....y si te gustó...... te invito a compartir y
 Suscribirte ingresando al botón "Participar en este sitio" para darte cuenta de mas entradas como esta ;)

Imagenes en Java

$
0
0
Quiero iniciar el año con una entrada muy simple sobre algo útil y básico cuando queremos personalizar, darle algún toque especial a nuestros proyectos entre muchas otras razones.....

Vamos a ver rápidamente como vincular imagenes en nuestras aplicaciones....algo corto pero sustancioso.....


El Ejemplo.

Como lo mencioné esta es una entrada de las básicas, tan solo nos enfocaremos en como vincular imagenes a nuestra aplicación..........tenemos un JFrame que contendrá un JLabel al cual le asignaremos una imagen de fondo, así como un botón de salir con un icono representativo...



La Aplicación.

Para esta aplicación tan solo utilizaremos 2 clases, la clase principal y la clase Ventana que carga la imagen anterior........adicionalmente tendremos un paquete imagenes donde agruparemos todas las imagenes con las que vamos a trabajar....


La imagen de Java la alojaremos en un JLabel usando para esto el método setIcon en el cual instanciaremos un objeto de tipo ImageIcon que buscaremos dentro del proyecto en la ruta definida........de la siguiente manera:
JLabel labelImagen;
labelImagen=new JLabel();
labelImagen.setBounds(50,70,400,330);
labelImagen.setIcon(new ImageIcon(getClass().
getResource("/imagenes/java.jpg")));
labelImagen.setBorder(javax.swing.BorderFactory.createBevelBorder
(javax.swing.border.BevelBorder.RAISED));

Adicionalmente usando el método setBorder le damos un estilo al jLabel para que tenga un borde con relieve.

Como vemos el método setIcon nos permite alojar una imagen en el componente al que se lo asignemos, la imagen del botón se realiza de la misma manera.......

Clase Principal.

En esta clase instanciamos la ventana de nuestra aplicación y hacemos el llamado para que sea visible.
package principal;

import ventana.VentanaPrincipal;

/**
* @author HENAO
*
*/
public class Principal {

public static void main(String[] args) {
/**Declaramos el objeto*/
VentanaPrincipal miVentanaPrincipal;
/**Instanciamos el objeto*/
miVentanaPrincipal= new VentanaPrincipal();
/**Hacemos que se cargue la ventana*/
miVentanaPrincipal.setVisible(true);
}
}

Clase VentanaPrincipal.

Esta clase corresponde a la interfaz de nuestra aplicación.
package ventana;

import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;


public class VentanaPrincipal extends JFrame implements ActionListener {

private Container contenedor;//declaramos el contenedor
JButton salir;//declaramos el objeto Boton
JLabel labelTitulo;//declaramos el objeto Label
JLabel labelImagen;


public VentanaPrincipal(){
/**permite iniciar las propiedades de los componentes*/
iniciarComponentes();
/**Asigna un titulo a la barra de titulo*/
setTitle("CoDejaVu : Imagenes en Java");
/**tamaño de la ventana*/
setSize(500,520);
/**pone la ventana en el Centro de la pantalla*/
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

private void iniciarComponentes() {
contenedor=getContentPane();//instanciamos el contenedor
/**con esto definmos nosotros mismos los tamaños y posicion
* de los componentes*/
contenedor.setLayout(null);

/**Propiedades del boton, lo instanciamos, posicionamos y
* activamos los eventos*/
salir=new JButton();
salir.setBounds(390,430,60,30);
salir.setIcon(new ImageIcon(getClass().getResource("/imagenes/salir.gif")));
salir.addActionListener(this);

labelImagen=new JLabel();
labelImagen.setBounds(50,70,400,330);
labelImagen.setIcon(new ImageIcon(getClass().
getResource("/imagenes/java.jpg")));
labelImagen.setBorder(javax.swing.BorderFactory.createBevelBorder
(javax.swing.border.BevelBorder.RAISED));

/**Propiedades del Label, lo instanciamos, posicionamos y
* activamos los eventos*/
labelTitulo= new JLabel();
labelTitulo.setText("setIcon");
labelTitulo.setFont(new java.awt.Font("Comic Sans MS", 0, 28));
labelTitulo.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
labelTitulo.setBorder(javax.swing.BorderFactory.createBevelBorder
(javax.swing.border.BevelBorder.LOWERED));
labelTitulo.setBounds(100, 10, 300, 40);

/**Agregamos los componentes al Contenedor*/
contenedor.add(labelTitulo);
contenedor.add(salir);
contenedor.add(labelImagen);
}

/**Agregamos el evento al momento de llamar la otra ventana*/
@Override
public void actionPerformed(ActionEvent evento) {
if (evento.getSource()==salir)
{
int respuesta = JOptionPane.showConfirmDialog(this,
"Esta seguro que desea salir?", "Confirmación",
JOptionPane.YES_NO_OPTION);
if (respuesta == JOptionPane.YES_NO_OPTION)
{
System.exit(0);
}
}
}
}

con el botón salir aplicamos uno de los ejemplos mostrados en la entrada anterior donde por medio de un JOptionPane solicitamos que se confirme si deseamos o no salir del sistema.

Y Listo!!! vimos de una forma rápida y simple como vincular imagenes en java, en próximas entradas veremos otros ejemplos trabajando con imagenes.....

También te podría Interesar.


¿Hay algo que quieras anexar o comentar sobre esta entrada?  no dudes en hacerlo.....y si te gustó...... te invito a compartir y
 Suscribirte ingresando al botón "Participar en este sitio" para darte cuenta de mas entradas como esta ;)

Como redimensionar Imagen en Java

$
0
0
Hola, para complementar la entrada anterior sobre imágenes en Java, regreso nuevamente con un ejemplo simple y rápido pero tal vez muy útil al momento de personalizar nuestras aplicaciones....

En esta entrada veremos como poner una imagen de fondo y re-dimensionarla con respecto al tamaño de la ventana.....Veamos......


El Ejemplo.

El ejemplo es muy simple, tan solo vamos a crear una ventana con un titulo y una imagen que servirá como fondo para nuestra aplicación, esta imagen cambiará su tamaño a medida que le maximicemos o re-dimensionemos el tamaño de la ventana........

Por defecto vamos a definir que la ventana sea igual al tamaño de la pantalla de nuestro pc......

La Aplicación.

La Aplicación la dividiremos en 3 paquetes, uno de imágenes, otro el paquete principal con la clase que posee el método main y un paquete ventana correspondiente a la parte gráfica del sistema.

En este ultimo tendremos la ventana principal y una clase Contenedora donde alojaremos la imagen y los demás componentes que le queramos vincular...


Clase Principal.

Como lo mencionamos y como es común en la gran mayoría de ejemplos, tenemos la clase Principal donde se aloja el método main con el llamado inicial del sistema, desde aquí instanciamos la clase VentanaPrincipal....
public class Principal {
public static void main(String[] args) {
/**Declaramos el objeto*/
VentanaPrincipal miVentanaPrincipal;
/**Instanciamos el objeto*/
miVentanaPrincipal= new VentanaPrincipal();
/**Hacemos que se cargue la ventana*/
miVentanaPrincipal.setVisible(true);
}
}


Clase VentanaPrincipal.

Esta clase corresponde a la Ventana de la aplicación, inicialmente es una ventana vacía, sin embargo y mediante la instancia de la clase Panel, cargamos el panel donde se define la imagen de fondo.....
public class VentanaPrincipal extends JFrame{

private Dimension tamañoPantalla;
private Rectangle pantalla;
public ImageIcon icono;
Panel miPanel;

public VentanaPrincipal(){
/**Asigna un titulo a la barra de titulo*/
setTitle("CoDejaVu : Imagenes en Java");
/**tamaño de la ventana en caso de que no se tome
* el tamaño por defecto*/
setSize(500,520);
/**pone la ventana en el Centro de la pantalla*/
setLocationRelativeTo(null);
this.setLocationRelativeTo(null);
/**capturamos el tamaño de la pantalla el pc y lo asignamos
* al tamaño de la ventana*/
tamañoPantalla= Toolkit.getDefaultToolkit().getScreenSize();
pantalla=new Rectangle(tamañoPantalla);
setBounds(pantalla);
/**permite iniciar las propiedades de los componentes*/
iniciarComponentes();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

private void iniciarComponentes() {
miPanel=new Panel();
this.setContentPane(miPanel);
}
}

La ventana tiene por defecto unas propiedades para su tamaño, sin embargo también se define una propiedad que toma el tamaño de la pantalla para asignárselo a la ventana, en caso de que esto falle, se toma el valor por defecto....

Clase Panel.

Tal vez esta sea la clase mas importante de nuestra aplicación, aquí vemos que se puede crear toda una interfaz gráfica en paneles que pueden ser cargados en una sola ventana, en ejemplos anteriores vimos que podíamos ocultar paneles creados en la misma clase, aquí hacemos lo mismo pero con una clase independiente (todo gracias a tratar el panel como un objeto aparte).....
public class Panel extends Container{

public ImageIcon icono;
public JLabel labelTitulo;

public Panel(){
icono = new ImageIcon (getClass().getResource("/imagenes/portada.jpg"));

labelTitulo= new JLabel();
labelTitulo.setFont(new java.awt.Font("Tahoma", 0, 28));
labelTitulo.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
labelTitulo.setForeground(new java.awt.Color(255, 255, 255));
labelTitulo.setText("IMAGEN DE FONDO");
labelTitulo.setBorder(javax.swing.BorderFactory.createBevelBorder
(javax.swing.border.BevelBorder.LOWERED));
labelTitulo.setBounds(20, 10, 300, 40);
add(labelTitulo);
}

public void paint (Graphics g)
{
Rectangle r = g.getClipBounds();
g.setColor(this.getBackground());
g.fillRect (r.x, r.y, r.width, r.height);
g.drawImage (icono.getImage(), 0, 0, this.getWidth(),
this.getHeight(), this.getBackground(), this);
super.paint(g);
}
}

como vemos, esta clase extiende de la clase Container permitiendo usar las propiedades que definen el tamaño de la imagen asignada como fondo, esto lo hacemos mediante el método paint() que calcula el tamaño y coordenadas de la imagen...........
public void paint (Graphics g)
{
Rectangle r = g.getClipBounds();
g.setColor(this.getBackground());
g.fillRect (r.x, r.y, r.width, r.height);
g.drawImage (icono.getImage(), 0, 0, this.getWidth(),
this.getHeight(), this.getBackground(), this);
super.paint(g);
}

También vemos que vinculamos un componente JLabel, de esta manera podríamos vincular cualquier cantidad de componentes como botones, áreas entre otros y trabajarlos normal como se ha venido haciendo pero manejándolos en clases aparte, cargándolos después en la ventana principal....

Y Listo, como vimos es un ejemplo muy simple, todo el código fuente está en la entrada, sin embargo anexo el enlace de descarga por si lo quieren validar......

Mas adelante continuaremos trabajando con paneles independientes como útil alternativa en nuestros desarrollos, así como el trabajo con layouts para el re-dimensionamiento de componentes.....


Descarga.

Como es costumbre en el enlace de descarga se encuentra el archivo .rar con la aplicación, solo es cuestión de descomprimir y abrir con Eclipse y listo.......si usas NetBeans te interesará esta entrada con un vídeo paso a paso de como abrirlo en el......... recuerden que es gratis, nada cuesta opinar, compartir o agradecer :) 




También te podría Interesar.


¿Hay algo que quieras anexar o comentar sobre esta entrada?  no dudes en hacerlo.....y si te gustó...... te invito a compartir
 y Suscribirte ingresando al botón "Participar en este sitio" para darte cuenta de mas entradas como esta ;)

Como importar proyecto Eclipse en NetBeans

$
0
0
Hola, esta entrada será un nuevo break en la secuencia de ejemplos que
estamos revisando, veremos como importar un proyecto Eclipse en NetBeans rápidamente....... esto tal vez será algo muy simple para unos pero para otros podrá ser de mucha utilidad..adicional adjunto un vídeo del proceso.....veamos.....


Por qué?

En el blog subo ejemplos de diferentes aplicaciones Java los cuales están desarrollados en Eclipse, pero esto no es impedimiento para que cualquier persona los descargue y compile sin problemas, sea copiando el código o importándolo en el IDE........ sin embargo algunas personas me han dicho que no pueden hacerlo ya que trabajan con NetBeans y no lo pueden abrir con esté IDE.....efectivamente no pueden hacerlo así simplemente, ya que la estructura de Eclipse es muy diferente a la estructura que genera NetBeans....

Por esta razón les mostraré rápidamente como hacer el procedimiento, es algo muy simple que toma unos cuantos pasos y nos podrá facilitar mucho las cosas......

Importando El Proyecto.

Antes de iniciar debemos tener obviamente el proyecto Eclipse listo en nuestra màquina....


posteriormente desde Netbeans vamos a File/Import Project/Eclipse Project...

Acto seguido se carga una ventana donde nos presentan 2 opciones para importar.......la primera nos indica si queremos importar el proyecto desde un WorkSpace Eclipse y la segunda si queremos hacerlo desde una ruta independiente ignorando dependencias.....elegimos esta ultima donde ingresaremos la ruta del proyecto y luego la ruta del WorkSpace NetBeans....


Teniendo esto ya solo es cuestión de darle Finish y listo....nuestro proyecto se carga en NetBeans!!!!


Algo que debemos tener en cuenta es que si trabajamos con caracteres especiales en Eclipse (la ñ por ejemplo), tal vez por la configuración que ahí teníamos nos lo permitía.....sin embargo al importarlo a NetBeans la configuración será diferente y nos presentará errores que deberemos corregir tan solo cambiando los caracteres especiales o escribiéndolos nuevamente.....

Y Listo, como vemos es un procedimiento muy simple, con esto ya no tendremos excusa de que no se pueden ver los proyectos......... para hacer las cosas aún mas simples les comparto un vídeo paso a paso del proceso, desde la descarga de uno de los proyectos del Blog, hasta su compilación en NetBeans, cosa de 5 minutos :) .... 


Espero que esto les pueda servir.....nos veremos proximamente retomando los ejemplos Java Swing....


También te podría Interesar.

¿Hay algo que quieras anexar o comentar sobre esta entrada?  no dudes en hacerlo.....y si te gustó...... te invito a compartir y Suscribirte ingresando al botón "Participar en este sitio" para darte cuenta de mas entradas como esta ;)

Como cargar Varios Paneles en Java

$
0
0
Hola, hace rato que no pasaba por aquí con ejemplos simples para compartir, por eso quiero retomar la secuencia de Java Swing con un ejemplo sencillo sobre el trabajo con los JPanel además de vincular otros componentes ya vistos con anterioridad con el fin de simular un Template en nuestra aplicación....


Podemos Simular un Template?

Un template básicamente es como un marco o plantilla con la que vamos a trabajar, de modo que siempre conserve una estructura principal.....por ejemplo, si vamos a hacer una carta, pues lo común es poner en cierta parte la ciudad, fecha, remitente, titulo etc...... partiendo de ahí podemos crear cuantas cartas queramos y todas sin importar el contenido contendrán la misma estructura.....con esto buscamos crear un marco principal donde mostrar diferentes contenidos....

La Aplicación.

La Aplicación es muy simple, como se mencionó vamos a tener un marco que será nuestra ventana principal con un titulo y 3 botones los cuales nunca van a cambiar, a diferencia del contenido central de la ventana que si cambiará dependiendo del botón presionado, cargando simplemente unos paneles de información.........


Y Como lo hacemos?

Ya en otras entradas habíamos trabajado con JPanel y vimos como crearlos facilmente, sin embargo esto lo hacíamos en la misma clase donde lo estábamos utilizando, ahora vamos a crear nuestros paneles independientes en otras clases y los cargaremos en la ventana principal al tratar estas clases Panel como Objetos.......(en esta entrada hicimos algo similar para poner una imagen de fondo redimensionable)......

Para esto usaremos una estructura como se ve en la imagen, aquí en pro de organización vamos a aplicar algunos conceptos del MVC, usando una clase Coordinador que se encargará de las relaciones entre clases (en esta entrada vemos un ejemplo sobre el MVC)...veamos

Aplicacion.java

Esta clase es la encargada del llamado y declaraciòn de objetos, como aplicamos principios del MVC buscamos que existan relaciones entre las clases a trabajar y la clase coordinadora, así que declaramos he instanciamos los objetos necesarios y los enlazamos con el Coordinador.

package principal;
import paneles.PanelIntroduccion;
import paneles.PanelMensaje;
import ventana.VentanaPrincipal;

public class Aplicacion {

public static void main(String[] args) {

//Se declaran los objetos de las clases componentes de aplicación
Coordinador coordinador;
PanelIntroduccion panelIntroduccion;
PanelMensaje panelMensaje;
VentanaPrincipal miVentanaPrincipal;

// Se instancian las clases
coordinador = new Coordinador();
panelIntroduccion = new PanelIntroduccion();
panelMensaje = new PanelMensaje();
miVentanaPrincipal = new VentanaPrincipal();

//Se establece relaciones entre las clases
panelIntroduccion.setCoordinador(coordinador);
panelMensaje.setCoordinador(coordinador);
miVentanaPrincipal.setCoordinador(coordinador);

//Se establece relaciones con la clase coordinador
coordinador.setPanelIntroduccion(panelIntroduccion);
coordinador.setPanelMensaje(panelMensaje);
coordinador.setVentanaPrincipal(miVentanaPrincipal);

miVentanaPrincipal.setVisible(true);

}
}

Coordinador.java

Esta es la clase coordinadora, permite establecer relaciones entre el sistema, será nuestro controlador al aplicar el MVC, esta clase tan solo recibe las instancias definidas en la clase Aplicación para transportar los objetos y llamados entre la aplicación y la ventana....también definimos un método cargarPaneles(int panel); el cual se encarga de retornar el objeto panel que queremos utilizar, al hacer esto nos aseguramos que siempre vamos a trabajar con un único objeto original, evitando crear varios objetos Panel sin necesidad....
import paneles.PanelIntroduccion;
import paneles.PanelMensaje;

import ventana.VentanaPrincipal;

public class Coordinador {

private PanelIntroduccion miPanelIntroduccion;
private PanelMensaje miPanelMensaje;

private VentanaPrincipal miVentanaPrincipal;

public void setPanelIntroduccion(PanelIntroduccion panelIntroduccion) {
miPanelIntroduccion=panelIntroduccion;
}

public void setPanelMensaje(PanelMensaje panelMensaje) {
miPanelMensaje = panelMensaje;
}

public void setVentanaPrincipal(VentanaPrincipal ventana) {
miVentanaPrincipal=ventana;
}

public void cargarPaneles(int panel){
switch (panel)
{
case 1: miVentanaPrincipal.definirPanel(miPanelIntroduccion);
break;
case 2: miVentanaPrincipal.definirPanel(miPanelMensaje);
break;
}
}
}

VentanaPrincipal.java

Esta clase como su nombre lo indica será la ventana principal de la aplicación, en si es la única ventana que nos servirá como marco o plantilla, tendrá un titulo y 3 botones que no cambiarán, lo único que cambiará será su contenido central, este corresponde a un ScrollPanel en el cual dependiendo del botón presionado, alojará un panel u otro de los que vamos a definir.
public class VentanaPrincipal extends JDialog implements ActionListener {

private static final long serialVersionUID = 1L;
JLabel labelTitulo;

public JButton salir;
public JButton botonPanelInicial,botonPanelDos;
public JButton botonInicio;
public javax.swing.JScrollPane scrollPaneles;

Coordinador miCoorDinador;

public VentanaPrincipal() {
initComponents();
setSize ( 693, 518 );
setTitle("Trabajo con Paneles Java Swing");
this.setLocationRelativeTo(null);
setResizable(false);
}

private void initComponents() {
scrollPaneles = new javax.swing.JScrollPane();
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
getContentPane().setLayout(null);

salir=new JButton();
salir.setBounds(610,455,60,30);
salir.setIcon(new ImageIcon(getClass().getResource("/imagenes/salir.gif")));
salir.addActionListener(this);
getContentPane().add(salir);

botonPanelInicial=new JButton();
botonPanelInicial.setText("Panel Inicial");
botonPanelInicial.setBounds(20, 80, 180, 50);
botonPanelInicial.addActionListener(this);
getContentPane().add(botonPanelInicial);

botonPanelDos=new JButton();
botonPanelDos.setText("Panel Secundario");
botonPanelDos.setBounds(220, 80, 180, 50);
botonPanelDos.addActionListener(this);
getContentPane().add(botonPanelDos);

botonInicio=new JButton();
botonInicio.setText("Inicio");
botonInicio.setBounds(780, 80, 180, 50);
botonInicio.addActionListener(this);
getContentPane().add(botonInicio);

/**Propiedades del Label, lo instanciamos, posicionamos y
* activamos los eventos*/
labelTitulo= new JLabel();
labelTitulo.setFont(new java.awt.Font("Tahoma", 0, 28));
labelTitulo.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
labelTitulo.setText("CONTENEDORES JAVA SWING");
labelTitulo.setBorder(javax.swing.BorderFactory.createBevelBorder(
javax.swing.border.BevelBorder.LOWERED));
labelTitulo.setBounds(90, 10, 500, 40);
getContentPane().add(labelTitulo);

scrollPaneles.setAutoscrolls(true);
scrollPaneles.setPreferredSize(new java.awt.Dimension(990, 1915));
scrollPaneles.setWheelScrollingEnabled(false);
getContentPane().add(scrollPaneles);
scrollPaneles.setBounds(20, 150, 650, 300);
pack();
}

/**
* Define el panel introduccion para mostrar en la ventana
* @param introduccion
*/
public void definirPanel(PanelIntroduccion introduccion) {
scrollPaneles.setViewportView(introduccion);
}

/**
* Define el panel Mensaje para mostrar en la ventana
* @param miPanelMensaje
*/
public void definirPanel(PanelMensaje miPanelMensaje) {
scrollPaneles.setViewportView(miPanelMensaje);
}

@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource()==botonPanelInicial){
miCoorDinador.cargarPaneles(1);
}

if (e.getSource()==botonPanelDos){
miCoorDinador.cargarPaneles(2);
}

if (e.getSource()==salir){
int respuesta = JOptionPane.showConfirmDialog(this,
"Esta seguro que desea salir?", "Confirmación",
JOptionPane.YES_NO_OPTION);
if (respuesta == JOptionPane.YES_NO_OPTION){
System.exit(0);
}
}
}

public void setCoordinador(Coordinador coordinador) {
miCoorDinador=coordinador;
}
}

PanelIntroduccion.java

Esta clase corresponde al panel asociado al primer botón de la ventana, tan solo presenta un area de texto y una imagen (que se encuentra alojada en el paquete imagenes).... en ocasiones anteriores trabajabamos los paneles en la misma ventana, ahora vemos que se pueden procesar como objetos, creando clases independientes que extienden de JPanel...el tamaño del panel es superior al contenedor que lo alojará (el JScrollPane) por lo tanto se cargará un scroll para poder ver los componentes del panel
public class PanelIntroduccion extends JPanel {

private static final long serialVersionUID= 1L;

Coordinador miCoorDinador;
private JTextArea areaIntroduccion;
private JLabel titulo, imagen;
private JScrollPane scrollArea;
private JPanel panel;

public PanelIntroduccion() {
initComponents();
setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED,
null, null, null, new java.awt.Color(0, 0, 0)));
setPreferredSize(new Dimension(540, 700));
setLayout(null);
}

private void initComponents() {
panel = new JPanel();
panel.setBounds(10, 11, 600, 810);

imagen = new JLabel();
scrollArea = new JScrollPane();
areaIntroduccion = new JTextArea();
titulo = new JLabel();

titulo.setFont(new java.awt.Font("Verdana", 1, 20));
titulo.setText("Ejemplo CoDejaVu");
panel.add(titulo);
titulo.setBounds(200, 0, 250, 40);

panel.setOpaque(false);
panel.setLayout(null);

String texto="\nEste es un ejemplo del trabajo con paneles en Java Swing, como\n";
texto+="podemos ver se creó un panel en una clase independiente con sus\n";
texto+="propios componentes y este fue cargado en una ventana principal";
areaIntroduccion.setColumns(20);
areaIntroduccion.setEditable(false);
areaIntroduccion.setFont(new java.awt.Font("Verdana", 0, 16));
areaIntroduccion.setLineWrap(true);
areaIntroduccion.setRows(5);
areaIntroduccion.setText(texto);
areaIntroduccion.setWrapStyleWord(true);
areaIntroduccion.setBorder(BorderFactory.createBevelBorder(
javax.swing.border.BevelBorder.LOWERED, null, null, null,
new java.awt.Color(0, 0, 0)));
areaIntroduccion.setCursor(new Cursor(java.awt.Cursor.DEFAULT_CURSOR));
scrollArea.setViewportView(areaIntroduccion);
scrollArea.setBounds(10, 50, 585, 115);

imagen.setHorizontalAlignment(SwingConstants.CENTER);
imagen.setIcon(new ImageIcon(getClass().getResource("/imagenes/java.jpg")));
imagen.setBorder(BorderFactory.createTitledBorder(null, "EJEMPLO 1.",
TitledBorder.LEFT, TitledBorder.TOP,
new java.awt.Font("Verdana", 1, 14)));
imagen.setBounds(120, 200, 410, 412);

panel.add(imagen);
panel.add(scrollArea);
add(panel);
}

public void setCoordinador(Coordinador coordinador) {
miCoorDinador=coordinador;
}
}

PanelMensaje.java

Igual que la anterior, esta clase corresponde a otro panel que queremos cargar al presionar el segundo botón, al hacerlo se oculta el panel que se esté mostrando y se carga el nuevo, corresponde a un panel simple con un area de texto, en este caso el tamaño del panel no requiere que se muestre el scroll de la ventana....
public class PanelMensaje extends JPanel {

private static final long serialVersionUID= 1L;

Coordinador miCoorDinador;
private JTextArea areaIntroduccion;
private JLabel titulo;
private JScrollPane scrollArea;
private JPanel panel;

public PanelMensaje() {

initComponents();

setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED,
null, null, null, new java.awt.Color(0, 0, 0)));
setPreferredSize(new Dimension(540, 250));
setLayout(null);
}

private void initComponents() {

panel = new JPanel();
panel.setBounds(10, 11, 600, 410);

scrollArea = new JScrollPane();
areaIntroduccion = new JTextArea();
titulo = new JLabel();

titulo.setFont(new java.awt.Font("Verdana", 1, 20));
titulo.setText("Sobre CoDejaVu");
panel.add(titulo);
titulo.setBounds(200, 0, 250, 40);

panel.setOpaque(false);
panel.setLayout(null);

String texto="\nSi estas leyendo esto es porque descargaste la aplicación " +
"y porque de una u otra forma te interesó el articulo, si esta " +
"entrada te sirvió y generó esa curiosidad en ti, te invito a compartir " +
"o a dejar tu comentario, ayudando a que este y otros articulos " +
"llegen a mas personas.\n";

texto+="\nSobre El Blog... \n\n" +
"CoDejaVu es un blog personal con el objetivo de compartir conocimiento " +
"y vivencias en torno al desarrollo de Software, todo ha sido con base " +
"en mi experiencia como Ingeniero de Sistemas y Desarrollador, es un espacio " +
"donde se puede brindar ayuda por medio de lecciones aprendidas.";

areaIntroduccion.setColumns(20);
areaIntroduccion.setEditable(false);
areaIntroduccion.setFont(new java.awt.Font("Verdana", 0, 16));
areaIntroduccion.setLineWrap(true);
areaIntroduccion.setRows(5);
areaIntroduccion.setText(texto);
areaIntroduccion.setWrapStyleWord(true);
areaIntroduccion.setBorder(BorderFactory.createBevelBorder(
javax.swing.border.BevelBorder.LOWERED, null,
null, null, new java.awt.Color(0, 0, 0)));
areaIntroduccion.setCursor(new Cursor(java.awt.Cursor.DEFAULT_CURSOR));
scrollArea.setViewportView(areaIntroduccion);
scrollArea.setBounds(10, 50, 585, 210);

panel.add(scrollArea);
add(panel);
}

public void setCoordinador(Coordinador coordinador) {
miCoorDinador=coordinador;
}
}


Y Listo!!! la aplicación nos permitirá tener cualquier cantidad de paneles con sus propios componentes y procesarlos facilmente de forma independiente, gracias al JScrollPane de la ventana principal se podrán cargar en esta misma simulando una plantilla o Marco general para nuestros contenidos......


Descarga.

Como es costumbre en el enlace de descarga se encuentra el archivo .rar con la aplicación, solo es cuestión de descomprimir y abrir con Eclipse y listo.......si usas NetBeans te interesará esta entrada con un vídeo paso a paso de como abrirlo en el......... recuerden que es gratis, nada cuesta opinar, compartir o agradecer :) 




También te podría Interesar.


¿Hay algo que quieras anexar o comentar sobre esta entrada?  no dudes en hacerlo.....y si te gustó...... te invito a compartir
 y Suscribirte ingresando al botón "Participar en este sitio" para darte cuenta de mas entradas como esta ;)
Viewing all 129 articles
Browse latest View live