miércoles, 29 de septiembre de 2010

Componentes avanzados de swing

Modelo de Color RGB

El modelo de color RGB, del inglés Red, Green, Blue, hace referencia a la composición de colores en términos de la intensidad de los colores primarios con que se forma: el rojo, el verde y el azul. Es un modelo de color basado en la síntesis aditiva, con el que es posible representar un color mediante la mezcla por adición de los tres colores luz primarios. Indicar que el modelo de color RGB no define por sí mismo lo que significa exactamente rojo, verde o azul, razón por la cual los mismos valores RGB pueden mostrar colores notablemente diferentes en diferentes dispositivos que usen este modelo de color. Aunque utilicen un mismo modelo de color, sus espacios de color pueden variar considerablemente.

JSlider

Los objetos JSlider permiten al usuario seleccionar de entre un rango de valores enteros, La clase JSlider hereda de JComponent. Está compuesto por el indicador, con el que seleccionamos el valor deseado y las marcas, que nos muestran cuáles son los valores a escoger.

JSpinner

Los objetos JSpinner permiten al usuario seleccionar un número y recorrer la lista de los mismos.

Apariencia Visual Adaptable

Los componentes Swing por el hecho que son controles ligeros, es decir que no dependen de la plataforma para asumir una apariencia visual, se pueden adaptar a otras “pieles” o Look and Feels. Sehace con la clase UIManager. Para esta guía utilizaremos el Look and Feel Substance

Luego de esta introducción teórica, para empezar esta guía, construyamos una GUI con el Netbeans
Designer que luzca así:



Moviendo los JSliders o modificando la cantidad de los JSpinners debemos modificar el color que se muestra en el panel de la derecha. Para ello, crearemos un método en el cual le cambiaremos el color del panel con su método setBackground() crearemos un nuevo color con modelo RGB con la ayuda de los valores de cada JSlider o JSpinner:


public void cambiarColor()
{
colorJPanel.setBackground( new java.awt.Color(
JSliderRojo.getValue(), JSliderVerde.getValue(),
JSliderAzul.getValue() ) );
}


Cada JSlider y JSpinner debe modificar al control contrario pero que manejan el mismo color. En los eventos StateChange() de cada uno debe ir código similar a este:


//Codigo para JSlider y JSpinner del color ROJO

//codigo evento JSlider: modifica el valor de JSpinner y manda a modificar el color del JPanel
private void redJSliderStateChanged(javax.swing.event.ChangeEvent evt) {
this.spnRojo.setValue(this.JSliderRojo.getValue());
changeColor();
}

//codigo evento JSpinner: modifica el valor de JSlider y manda a modificar el color del JPanel
private void spnRojoStateChanged(javax.swing.event.ChangeEvent evt) {

this.JSliderRojo.setValue((Integer)spnRojo.getValue());
changeColor();
}


La aplicación debe lucir así:







Esperamos que este post haya sido de mucha utilidad

Polimorfismo en Java

El polimorfismo es un concepto de la programación orientada a objetos que nos permite programar en forma general, en lugar de hacerlo en forma específica. En general nos sirve para programar objetos con características comunes y que todos estos compartan la misma superclase en una jerarquía de clases, como si todas fueran objetos de la superclase. Esto nos simplifica la programación.

Para poner en práctica se hará un ejemplo bastante sencillo. Se hará una librería de clases que represente figuras tridimensionales y bidimensionales, y su respectiva jerarquía de clases. Las clases deben ser capaces de tener funcionamiento bastante básico, como obtener áreas, volúmenes y perímetros de la figura correspondiente.


La representación de la jerarquía sería como ésta:


La superclase de dicha jerarquía podría ser muy parecida a ésta:

public abstract class figura {

protected String nombre;
protected int color;
protected int grosorBorde;

public String getNombre(){
return this.nombre;
}
public void setNombre(String n){
this.nombre=n;
}

public int getColor(){
return this.color;
}

public void setColor(int c){
this.color=c;
}

public int getGrosorBorde(){
return this.grosorBorde;
}

public void setGrosorBorde(int g){
this.grosorBorde=g;
}

public abstract void dibujar();
}

Las siguientes clases en el nivel de la jerarquía podrían quedar muy parecidas a éstas:

public abstract class figura2D extends figura {

public abstract int calcularArea();

public abstract int calcularPerimetro();
}

public abstract class figura3D extends figura {

public abstract int calcularVolumen();
}

Agregar JPanel en un JFrame

Existe un control Swing llamado Internal Frame que se utiliza para agregar Frames dentro otro. Sin embargo, debemos recordar que un Frame tiene propiedades tales como la barra de títulos, los botones de maximizar, minimizar y cerrar, coloca un nuevo ítem en la barra de tareas en Windows, KDE y Gnome, entre otras propiedades. Cabe destacar que muchas veces estos atributos no serán necesarios y entorpecerían el accionar de la aplicación. Muchas veces necesitamos unicamente un pequeño recuadro e insertarlo en uno u otro JFrame.

Antes de mostrar cómo crear los JPanels, debemos de cambiar el layout al JFrame que utilizaremos. El Layout es una propiedad de los contenedores Swing para colocar todos los elementos que se contienen dentro de él. Como Java es multiplataforma, y en cada una de ella se disponen de manera distinta el orden de los elementos o componentes. Por lo tanto, Swing lo realiza con la ayuda de los layouts. En modo diseño del JFrame, hacemos click derecho a la opción Set Layout y le asignamos Null Layout, ya que nosotros colocaremos otro tipo de layout diferente al del diseño libre que nos brinda el editor de diseño de Netbeans. De esta forma:

Ahora, dentro del JFrame, en su constructor, y luego de la inicialización de componentes, vamos a establecer el layout a utilizar. Para este ejercicio, escogí el FlowLayout, que dispone un orden de los elementos horizontal uno tras otro y con cierto espaciado que podemos asignar.
El código dentro del constructor deberá ser el siguiente:

//Constructor
public framePadre() {

//llamo al constructor padre y le mando el nombre del título de la ventana
super("Operaciones Básicas");

//Función de inicialización de componentes. Netbeans la coloca por defecto
initComponents();

//Colocamos el nuevo tipo de layout que queremos que tenga nuestro JFrame
this.setLayout(new FlowLayout());
}

ambién creamos dos atributos al JFrame, para más facilidad. Serán dos atributos del tipo de datos de cada uno de los JPanel.

private panelHijoSuma hs;
private panelHijoResta hr;

Ahora, en cada una de los ítems de la barra de menú, para mostrar el JPanel deseado, colocamos el siguiente código:

//Nombre evento
private void nSumaActionPerformed(java.awt.event.ActionEvent evt) {

//Si ya está el otro Jpanel añadido al contenedor, entonces se elimina
try{
this.remove(hr);
}
catch(Exception e){
}

//Creamos una nueva instancia de panelHijoSuma
hs = new panelHijoSuma();

//Agregamos la instancia al JFrame, con un layout al centro
this.add(hs, BorderLayout.CENTER);

//Hacemos que el JFrame tenga el tamaño de todos sus elementos
this.pack();
}

Dividir cadenas en Java

Pareciera algo sencillo y simple, , sin embargo la división de cadenas de carácteres da algunos problemas, más que todo a los programadores principiantes. Este artículo explicará esta tarea con dos formas: con el método split() de la clase String y con la clase Tokenizer.

Este sencillo código realiza la separación de la cadena "Políticas de Calidad" en los espacios en blanco que se encuentren:

String cad = "Politicas de Calidad";


StringTokenizer tokens = new StringTokenizer(cad);


while(tokens.hasMoreTokens()){
System.out.println(tokens.nextToken());
}

System.out.println("\n\n");

String [ ] palabra = cad.split("\\ ");

int j=0;
while(j <= palabra.lenght-1){
System.out.println(palabra [ j ]);
j++;
}

Herencia multiple

Todos sabemos que la herencia es un mecanismo propio de la programación orientada a objetos POO. Nos permite crear clases a partir de otra, las cuales las unen vínculos sumamente estrechos, casi de familia. Es por ello que se llama herencia.

Si buscamos modelar nuestras clases u objetos como propios de la realidad, todos los conceptos de la orientación a objetos nos serán muy fácil de implementar mientras programamos.

Implementando herencia tenemos las siguientes ventajas:

  • Modelado de la realidad
  • Evitar redundancias en el código
  • Facilita la reutilización del código, así como reduce el número de líneas a escribir
  • Sirve como el soporte o la base para el polimorfismo

Es muy sencilo implementar la herencia de clases en Java. Basándonos en el diagrama de arriba, si queremos crear la clase gallina solo debemos de interponer la palabra reservada extends. Por lo tanto la declaración de la clase quedaría constituida de la siguiente manera:

public class Gallina extends Ave{
}

Ahora podemos tener dentro de gallina, todos los atributos y métodos propios de una Ave.

Esta forma de herencia es llamada herencia simple, ya que solamente hay una clase padre o superclase. Existe una forma de herencia definida dentro de los conceptos de la programación orientada a objetos en la cual una clase puede heredar de dos o más clases padres o superclases. Se llama Herencia Múltiple.

La herencia múltiple en java no es soportada nativamente. Sin embargo muchos autores y desarrolladores la simulan utilizando la palabra reservada implements e interfaces, que sirve para implementar o cubrir una clase con respecto a otra.

Supongamos el siguiente escenario:

Hacer este pequeño diagrama UML en código Java no se puede nativamente hablando, solamente con una simulación. La manera de realizarla es la siguiente:

public class Persona {

}


public class Hijo{
}
interface iHijo{
//La interface pertenece a la clase Hijo
}


public class Alumno extends Persona implements iHijo{
}

Con la ayuda de las interfaces simulamos la herencia múltiple. Una interface no es más que la implementación de los métodos de una clase. Con la ayuda de éstos podemos accesar a los métodos de la clase Hijo y heredar directamente todo lo que pertenece a Persona. Fácil, pero a la vez confuso, ¿No?

Conclusión: ¿Se debe utilizar la herencia múltiple? A mi forma de pensar, si no está implementada nativamente, se debería de evitar el uso de una simulación que va en contra de la naturaleza del lenguaje. Además pienso que todo problema que o esquema de clases se pueden llegar a plantear de forma que solamente utilicemos la herencia simple, ya que es más sencilla y es más natural que se herede de un solo padre.

miércoles, 15 de septiembre de 2010

Programacion orientada a objetos(POO)

La programacion Orientada a Objetos es un paradigma de programacion que surge a partir de lenguaje como Smalltalk 80 donde se trata de abstraer el mundo en Objetos.

Estos Objetos tendran:

  • Propiedades o caracteristicas denominadas atributos
  • Habilidades o funciones que realicen denominadas Metodos
Entre las caracteristicas mas conocidad de la POO podemos mencionar:
+Abstraccion
+Encapsulamiento
+Polimorfismo
+Herencia

miércoles, 1 de septiembre de 2010

Inicio de Java

La palabra JAVA se escucha todo el tiempo en los ambientes de programacion, se dice que es el lenguaje del futuro, el lenguaje que lo conecta todos, el guaje de objetos pero..

¿Que es JAVA?

JAVA es un lenguaje de programación orientado a objetos desarrollado por James Gosling y sus compañeros de Sun Microsystems al inicio de la década de 1990. A diferencia de los lenguajes de programación convencionales, que generalmente están diseñados para ser compilados a código nativo, Java es compilado en un bytecode que es ejecutado (usando normalmente un compilador JIT), por una máquina virtual Java.

El lenguaje en sí mismo toma mucha de su sintaxis de C y C++, pero tiene un modelo de objetos mucho más simple y elimina herramientas de bajo nivel como punteros.

En este blog encontraras informacion basica y variada sobre Java, desde conceptos teoricos, hasta porciones de codigos para  abonar asi al aprendizaje sobre este lenguaje de programacion.

Esperamos este blog sea de utilidad para todos..