Skip to content


Persistencia (I): Hibernate básico

Para empezar debemos realizar un pequeño repaso a lo que nos referimos con persistencia, más allá de la mera definición de la RAE este termino surge como la manera de almacenar nuestros objetos en un soporte relacional; es decir como guardar nuestros objetos a base de datos directamente.

El problema es que es como mezclar aceite y agua, aquello no se mezcla ni une, ya que las bases de datos suelen estar orientadas en un modelo relacional y el software orientado en un modelo objetual. Esto hace optemos con frecuencia por soluciones de unir ambos modelos con unas clases dao que muchas veces son meros parseadores de las respuestas a nuestras consultas SQL.

Aquí es donde aparece Hibernate para aportarnos todo eso de una manera más o menos transparente.

Ejemplo para insertar un registro en una tabla habitualmente se utiliza una estructura de este tipo.
[code lang=”java”]
Class.forName(“org.oracle.jdbcDriver”);
String url = “jdbc:oracle:@database”;
Connection connection = DriverManager.getConnection(url, “usuario”, “password”);
String ins = “INSERT INTO COCHES VALUES(1, ‘Audi’)”;
Statement stmt = null;
stmt = connection.createStatement();
stmt.executeUpdate(ins);
[/code]

Con Hibernate, escribiríamos algo similar a esto:
[code lang=”java”]
Configuration conf = new Configuration();
conf.addClass(Coches.class);
SessionFactory sessionFactory = conf.buildSessionFactory();
Session session = sessionFactory.openSession();
Coche coche = new Coche();
coche.setModelo(“Audi”);
session.save(coche);
session.flush();
session.close();
[/code]

Y si nos interesase añadir otro modelo:
[code lang=”java”]
session = sessionFactory.openSession();
coche = new Coche();
coche.setModelo(“Ford”);
session.save(coche);
session.flush();
session.close();
[/code]

Vemos que hay una gran diferencia entre ambos métodos, ya que en el segundo caso pasamos del SQL a simplemente decir que queremos “salvar” un coche.

A la hora de buscar también sabemos cual puede ser el lío con la técnica habitual mientras que con Hibernate se reduce a:
[code lang=”java”]
session = sessionFactory.openSession();
String qry = “FROM beans.Coche AS P
WHERE P.Modelo = ‘Audi’
ORDER BY P.Modelo”;
List coches = session.find(qry);
session.close();
for (int i = 0; i < coches.size(); i++) { Coche c = (Coche)coches.get(i); ……. } [/code] ¿Ya está así de sencillo? No todo iba a ser así de fácil, para que Hibernate consiga realizar esto debemos realizar un mínimo de configuración: 1. Hibernate.properties: En el que se especifica contra que base de datos y que lenguaje conectaremos y cómo lo haremos. 2. NombreDeClasse.hbm.xml: En el que se describe cómo se relacionan nuestras clases con las tablas. Hibernate.properties

En este archivo, se pueden especificar muchísimas cosas. Nos limitaremos, por ahora, a proporcionar los datos necesarios para que Hibernate se pueda conectar a nuestra base de datos HSQLDB. Este sería, pues, el mínimo necesario para funcionar:
[code]
## HypersonicSQL
hibernate.dialect net.sf.hibernate.dialect.HSQLDialect
hibernate.connection.driver_class org.hsqldb.jdbcDriver
hibernate.connection.username usuario
hibernate.connection.password pasword
hibernate.connection.url jdbc:hsqldb:hsql://localhost
[/code]
Solo hay que configurar pocos datos. Además dentro de la propia distribución de Hibernate en el fichero vienen ejemplos para todas las bases de datos que soporta Hibernate solo tenemos que descomentar nuestro tipo de bbdd y comenzar.

NombreDeClase.hbm.xml
Este es el archivo que vincula nuestra clase (bean) con la bbdd. Este ejemplo es el que se corresponde con la clase Coche (Coche.hbm.xml).
[code lang=”xml”]








[/code]

Para nuestro bean Coche:

[code lang=”java”]
Package beans;

public class Coche {
/** Identificador único */
int id;
String modelo;

public String getModelo() {
return modelo;
}

public int getId() {
return id;
}

public void setModelo(String nuevoModelo) {
modelo = nuevoModelo;
}

public void setId(int nuevoId) {
id = nuevoId;
}

public String toString() {
return getId() + ” ” + getModelo();
}
}
[/code]

Y con esto si que estaría todo, solo faltaría ubicar correctamente nuestros ficheros de configuración, el Coche.hbm.xml en el mismo directorio de la clase, y el fichero
Hibernate.properties en la raíz de nuestro árbol de paquetes.

Ahora os voy a presentar un pequeño ejemplo de funcionalidad de Hibernate:

[code lang=”java”]
public void anadir(String modelo) {
Coche categoria = new Coche();
coche.setModelo(modelo);

//Obtenemos la configuración
Configuration conf = new Configuration();
//Buscamos el mapeo de nuestra clase
conf.addClass(Coche.class);
//Construimos la sesion
SessionFactory sessionFactory = conf.buildSessionFactory();
Session session = sessionFactory.openSession();
//iniciamos la transaccion
Transaction tx = session.beginTransaction();
// Guardamos la nueva Categoria en la base de datos
session.save(coche);
// Confirmamos la transacción
tx.commit();
// Cerramos la sesión
session.close();
}

Configuration conf = new Configuration();
conf.addClass(Categoria.class);
SessionFactory sessionFactory = conf.buildSessionFactory();
Session session = sessionFactory.openSession();
Categoria categ = new Categoria();
categ.setCategoria(“Profesor”);
session.save(categ);
session.flush();
session.close();

Otro ejemplo:

public void borrar(int id) {
[…]
Coche coche = new Coche();
coche.setId(id);
Transaction tx = session.beginTransaction();
session.delete(coche);
tx.commit();
[…]
}
[/code]

Por supuesto todo esto solo es la punta de Hibernate, os recomiendo que paséis por la página y deis un vistazo, sobre todo a que actualmente soporta mas de 20 diferentes tipos de bases de datos.
Hemos visto que la presencia de los archivos de configuración y demás hace que nuestra aplicación se vuelve un poco compleja, en próximos post analizaremos las anotaciones en java y su aplicación con Hibernate.

Enlace: Hibernate

Posted in Hibernate, Java.

Tagged with , , .


Subir y bajar ficheros por FTP

Aquí os pongo unos sencillos métodos para poder subir y/o bajar ficheros por FTP en java, son métodos para transferir ficheros simples, es decir, nos permite transferir un archivo local al servidor, o transferir un archivo del servidor a local, existen librerías que nos dan una funcionalidad completa de FTP pero son propietarias de SUN ú otras compañías, por lo que si pretendemos distribuir nuestra aplicación tendremos que pagar sus respectivas licencias, y con los métodos que aquí os dejo, son 100 % libres.

Bueno ahí va el método para bajar un archivo del servidor FTP a nuestro disco local.
[code lang=”java”]
/**
* Método para descargar un archivo en un servidor FTP a un archivo local
* tenemos que pasarle los datos de:
* ip o hostname del servidor
* usuario
* contraseña
* la ruta completa del fichero local donde se escribiran los datos
* la ruta del archivo que queramos bajar en el FTP
* ej: downloadFileByFTP(“servidor”, “usuario”, “contraseña”, “c:\\prueba.txt”, “/mi_dir/prueba.txt”);
*/
public static boolean downloadFileByFTP(String server, String user, String pass, String localPath, String remotePath) {
try {
URL url = new URL(“ftp://” + user + “:” + pass + “@” + server + remotePath + “;type=i”);
URLConnection urlc = url.openConnection();
InputStream is = urlc.getInputStream();
BufferedWriter bw = new BufferedWriter(new FileWriter(localPath));
int c;
while ((c = is.read()) != -1) {
bw.write(c);
}
is.close();
bw.flush();
bw.close();
return true;
} catch (Exception ex) {
ex.printStackTrace();
System.out.println(ex.getMessage());
return false;
}
}
[/code]

Y aquí el que sube un archivo por FTP
[code lang=”java”]
/**
* Método para subir un archivo local a un servidor FTP
* tenemos que pasarle los datos de:
* ip o hostname del servidor
* usuario
* contraseña
* la ruta completa del fichero local a subir
* la ruta en donde queramos colocar el archivo en el servidor FTP
* ej: uploadFileByFTP(“servidor”, “usuario”, “contraseña”, “c:\\prueba.txt”, “/mi_dir/prueba.txt”);
*/
public static boolean uploadFileByFTP(String server, String user, String pass, String localPath, String remotePath) {
try {
URL url = new URL(“ftp://” + user + “:” + pass + “@” + server + remotePath + “;type=i”);
URLConnection urlc = url.openConnection();
OutputStream os = urlc.getOutputStream();
BufferedReader br = new BufferedReader(new FileReader(localPath));
int c;
while ((c = br.read()) != -1) {
os.write(c);
}
os.flush();
os.close();
br.close();
return true;
} catch (Exception ex) {
ex.printStackTrace();
return false;
}
}
[/code]

En vista de que habeis tenido algun problema para implementar esta solucion en vuestras aplicaciones os dejo a continuación la clase FTP que contiene los metodos para bajar y subir archivos por ftp desde java y una clase PruebaFTP que tiene un ejemplo de uso (solo teneis que cambiar los datos por los de el servidor ftp y archivos que necesiteis usar.

Clase Ftp

[code lang=”java”]
import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.FileReader;

import java.io.FileWriter;

import java.io.InputStream;

import java.io.OutputStream;

import java.net.URL;

import java.net.URLConnection;

/**

*

* @author Daniel Rodriguez Granda

*

*/

public class Ftp {

/**

* Metodo para subir un archivo local a un servidor FTP

* tenemos que pasarle los datos de:

* ip o hostname del servidor

* usuario

* password

* la ruta completa del fichero local a subir

* la ruta en donde queramos colocar el archivo en el servidor FTP

* ej: uploadFileByFTP(“servidor”, “usuario”, “password”, “c:\\prueba.txt”, “/mi_dir/prueba.txt”);

*/

public static boolean uploadFileByFTP(String server, String user, String pass, String localPath, String remotePath) {

try {

URL url = new URL(“ftp://” + user + “:” + pass + “@” + server + remotePath + “;type=i”);

URLConnection urlc = url.openConnection();

OutputStream os = urlc.getOutputStream();

BufferedReader br = new BufferedReader(new FileReader(localPath));

int c;

while ((c = br.read()) != -1) {

os.write(c);

}

os.flush();

os.close();

br.close();

return true;

} catch (Exception ex) {

ex.printStackTrace();

return false;

}

}

/**

* Metodo para descargar un archivo en un servidor FTP a un archivo local

* tenemos que pasarle los datos de:

* ip o hostname del servidor

* usuario

* password

* la ruta completa del fichero local donde se escribiran los datos

* la ruta del archivo que queramos bajar en el FTP

* ej: downloadFileByFTP(“servidor”, “usuario”, “password”, “c:\\prueba.txt”, “/mi_dir/prueba.txt”);

*/

public static boolean downloadFileByFTP(String server, String user, String pass, String localPath, String remotePath) {

try {

URL url = new URL(“ftp://” + user + “:” + pass + “@” + server + remotePath + “;type=i”);

URLConnection urlc = url.openConnection();

InputStream is = urlc.getInputStream();

BufferedWriter bw = new BufferedWriter(new FileWriter(localPath));

int c;

while ((c = is.read()) != -1) {

bw.write(c);

}

is.close();

bw.flush();

bw.close();

return true;

} catch (Exception ex) {

ex.printStackTrace();

System.out.println(ex.getMessage());

return false;

}

}

}

[/code]

Clase PruebaFTP

[code lang=”java”]

/**

*

* @author Daniel Rodriguez Granda

*/

public class PruebaFTP {

public static void main(String args[]) {

// Descargar fichero de un servidor FTP

Ftp.downloadFileByFTP(

“ip_ftp”,

“usuario”,

“password”,

“c:\\ruta_local\\fichero.txt”,

“/ruta_ftp/fichero_a_bajar.txt”);

// Subir un fichero local a un servidorFTP

Ftp.uploadFileByFTP(

“ip_ftp”,

“usuario”,

“password”,

“c:\\ruta_local\\fichero_a_subir.txt”,

“/ruta_ftp/fichero.txt”);

}

}

[/code]

Posted in Java.

Tagged with , , , .


Ejemplo LINQ con XML

Aqui está el ejemplo de linq con ficheros xml.

Voy a seguir trabajando con los mismos datos que en el ejemplo anterior. El fichero xml queda así:
[code lang=”xml”] Pascal 7
Luis Joyanes
Enciclopedia de C#
Francisco javier Ceballos
El código Davinci
Dan Brown
Ángeles y demonios
Dan Brown
[/code]

Antes de nada hay que hacer un “using” al linq de xml
[code lang=”csharp”]
using System.Xml.Linq;
[/code]

Este método hace la ordenación por título de todos los libros
[code lang=”csharp”]
private void ordenaLinqXML(string path)
{
//Cargamos el documento xml (path es la dirección donde está el xml)
XDocument cargaDocumento = XDocument.Load(path);
//Creamos la query
var query = from libro in cargaDocumento.Descendants(“libro”)
orderby libro.Element(“titulo”).Value
select new
{
Titulo = libro.Element(“titulo”).Value,
Autor = libro.Element(“autor”).Value
};
//Mostramos el resultado de la ordenación en un ListBox
foreach(var libAux in query)
lbLinq.Items.Add(libAux.Titulo+” – “+libAux.Autor);
}
[/code]

Este método hace la ordenación por título de todos los libros de “Dan Brown”
[code lang=”csharp”]
private void selectLinqXML(string path)
{
//Cargamos el documento xml (path es la dirección donde está el xml)
XDocument cargaDocumento = XDocument.Load(path);
//Creamos la query
var query = from libro in cargaDocumento.Descendants(“libro”)
where libro.Element(“autor”).Value.ToString().Equals(“Dan Brown”)
orderby libro.Element(“titulo”).Value
select new
{
Titulo = libro.Element(“titulo”).Value,
Autor = libro.Element(“autor”).Value
};
//Mostramos el resultado de la ordenación en un ListBox
foreach (var libAux in query)
lbLinq.Items.Add(libAux.Titulo + ” – ” + libAux.Autor);
}
[/code]

Como podeis ver la query se escribe de forma parecida al ejemplo anterior, la diferencia es que para acceder a los valores hay que poner:
[code lang=”csharp”]
libro.Element(“ELEMENTO AL QUE QUEREMOS ACCEDER”).Value
[/code]

Aunque la gran diferencia es esta:
[code lang=”csharp”]
select new
{
Titulo = libro.Element(“titulo”).Value,
Autor = libro.Element(“autor”).Value
};
[/code]
Con esto, estamos creando las propiedades “Titulo” y “Autor” en cada uno de los elementos que va a tener la colección que recojamos de la query, y se hace en tiempo de EJECUCIÓN

Espero que os sirva de ayuda. Un saludo!

Posted in C#, Framework 3.5.

Tagged with , , , .


Ejemplo LINQ en C#

Lo dicho, os dejo unos ejemplos de LINQs

Creo una clase “Libro” que tiene un “Título” y un “Autor”

[code lang=”csharp”]
public class Libro
{
//Propiedades
public string Titulo { get; set; }
public string Autor { get; set; }

//Constructor
public Libro(string titulo, string autor)
{
this.Titulo = titulo;
this.Autor = autor;
}
}
[/code]

* Si veis un poco rara la forma de declarar las propiedades y no lo entendeis me poneis un comentario y haré otro árticulo sobre el tema.

Con este método creo una lista de libros con la que voy a hacer el ejemplo del LINQ

[code lang=”csharp”]
private List cargaLibros()
{
//Creamos una lista con libros
List libros = new List
{
new Libro(“Pascal 7”, “Luis Joyanes”),
new Libro(“Enciclopedia C#”, “Francisco javier Ceballos”),
new Libro(“El código Davinci”,”Dan Brown”),
new Libro(“Ángeles y demonios”,”Dan Brown”)
};
return libros;
}
[/code]

**bLinq es un ListBox en el que muestro los resultados de los LINQs
Ejemplo de ordenación con LINQ:
[code lang=”csharp”]
private void ordenaLINQ()
{
List libros = cargaLibros();
//Ordeno los libros por el título
var query = from lib in libros
orderby lib.Titulo
select lib;
//Muestro los libros ordenados
foreach (Libro lib in query)
lbLinq.Items.Add(lib.Titulo +” – “+lib.Autor);
}
[/code]

Mismo ejemplo de ordenación pero con la nomenclatura simplificada de LINQ
[code lang=”csharp”]
private void ordenaLINQ1Simplificado()
{
List libros = cargaLibros();
libros = libros.OrderBy(p =>p.Titulo).ToList();
//Muestro los libros ordenados
foreach (Libro lib in libros)
lbLinq.Items.Add(lib.Titulo + ” – ” + lib.Autor);
}
[/code]

En este ejemplo hacemos una consulta sobre la lista que devuelve los libros de Dan Brown ordenados por el título
[code lang=”csharp”]
private void selecLINQ1()
{
List libros = cargaLibros();
//Selecciono los libros de Dan Brown y los ordeno por título
var query = from lib in libros
where lib.Autor.Equals(“Dan Brown”)
orderby lib.Titulo
select lib;
//Muestro los libros
foreach (Libro lib in query)
lbLinq.Items.Add(lib.Titulo + ” – ” + lib.Autor);
}
[/code]

Mismo ejemplo anterior con la nomenclatura simplificada de LINQ
[code lang=”csharp”]
private void selectLINQ1Simplificado()
{
List libros = cargaLibros();
libros = libros.Where(p => p.Autor == “Dan Brown”).OrderBy(p => p.Titulo).ToList();
//Muestro los libros
foreach (Libro lib in libros)
lbLinq.Items.Add(lib.Titulo + ” – ” + lib.Autor);
}
[/code]

Espero que os sirva. Un saludo!

Posted in C#, Framework 3.5.

Tagged with , , .


Método genérico para limpiar datos de formularios en Java

Cuantas veces habéis necesitado limpiar los datos de todo un formulario desde varias partes de vuestro código, y conforme se va ampliando el programa o surgiendo nuevos campos hay que añadir código para limpiar los componentes nuevos.

Con este método genérico que os doy aquí, sólo tenéis que llamar al método “clearForm()” pasándole el objeto “JPanel” o “JScrollPane” para limpiar todo.

[code lang=”java”]
/**
* Método que limpia los datos de todos los componentes
* susceptibles de ser puestos en blanco, como los “JTextField”
* “jTextAreas”, etc…, que pertenezcan a un “JPanel” o “JScrollPane”,
* es recursivo, asi que si dentro del panel hay otro panel con
* más componentes susceptibles también los pondrá en blanco.
*/
private void clearForm(Object panel) {
// Obtenemos el nombre de la clase
String nombre_clase = panel.getClass().getName();
if (nombre_clase.equals(“javax.swing.JPanel”)) {
// Estamos en el caso de un JPanel
clearPanel((javax.swing.JPanel) panel);
} else if (nombre_clase.equals(“javax.swing.JScrollPane”)) {
// Estamos en el caso de un JScrollPane
clearScrollPane((javax.swing.JScrollPane) panel);
}
}

/**
* Método que limpia los datos de todos los componentes
* susceptibles de ser puestos en blanco, como los “JTextField”
* “jTextAreas”, etc…, que pertenezcan a un “JPanel”,
* es recursivo, asi que si dentro del panel hay otro panel con
* más componentes susceptibles también los pondrá en blanco.
*/
private void clearPanel(javax.swing.JPanel panel) {
// Obtenemos todos los componentes que cuelgan del panel
java.awt.Component[] componentes = panel.getComponents();
for (int i = 0; i < componentes.length; i++) {
clearComponent(componentes[i]);
}
}

/**
* Método que limpia los datos de todos los componentes
* susceptibles de ser puestos en blanco, como los “JTextField”
* “jTextAreas”, etc…, que pertenezcan a un “JScrollPane”,
* es recursivo, asi que si dentro del panel hay otro panel con
* más componentes susceptibles también los pondrá en blanco.
*/
private void clearScrollPane(javax.swing.JScrollPane panel) {
// Obtenemos todos los componentes que cuelgan del panel
java.awt.Component[] componentes = panel.getViewport().getComponents();
for (int i = 0; i < componentes.length; i++) {
clearComponent(componentes[i]);
}
}

/**
* Este método al que le pasamos un Componente, comprueba
* si es susceptible de ser puesto en blanco, si lo es, lo pone
* en blanco, si en otro caso es un “JPanel” o un “JScrollPane”
* llamará recursivamente a “clearPanel” o “clearScrollPane”
*/
private void clearComponent(java.awt.Component comp) {
// Nombre de la clase del componente
String nombre_clase = comp.getClass().getName();
if (nombre_clase.equals(“javax.swing.JTextField”)) {
// Es un JTextField asi que lo ponemos en blanco
((javax.swing.JTextField) comp).setText(“”);
} else if (nombre_clase.equals(“javax.swing.JComboBox”)) {
// Es un JComboBox asi que ponemos el primer elemento
((javax.swing.JComboBox) comp).setSelectedIndex(0);
} else if (nombre_clase.equals(“javax.swing.JTextArea”)) {
// Es un JTextArea asi que lo ponemos en blanco
((javax.swing.JTextArea) comp).setText(“”);
} else if (nombre_clase.equals(“javax.swing.JPanel”)) {
// Es un JPanel asi que llamamos a clearPanel
clearPanel((javax.swing.JPanel) comp);
} else if (nombre_clase.equals(“javax.swing.JScrollPane”)) {
// Es un JScrollPane asi que llamamos a clearScrollPane
clearScrollPane((javax.swing.JScrollPane) comp);
}
}
[/code]

Posted in Java.

Tagged with , , .


Uso de filtros en Java

Vamos a explicar por encima un mecanismo muy potente que se puede utilizar en el diseño modular de portales java, normalmente al desarrollar portales siguiendo un patrón MVC o utilizando algún Framework que lo implemente como Struts o Spring.

Siempre nos surge la necesidad de desarrollar la seguridad o controlar los “eventos” de navegación, para este caso existen los Filtros, un filtro permite que determinada petición o respuesta sea analizada bajo ciertas condiciones.

Una de las principales características de un filtro es que puede ser colocado en cualquier punto del flujo de la aplicación, ya sea entre una solicitud de JSP a JSP, Servlet a Servlet, o inclusive Servlet/JSP a HTML, la única condición que debe cumplirse es que debe existir un objeto de entrada (ServletRequest) y otro de salida (ServletResponse).

Ahora bien, solo queda pensar para que queremos usar nuestro filtro, su uso normal se suele aplicar para “tracear” el flujo de la aplicación con las llamadas que se van realizando, comprobar la sesión del usuario así como implementar la seguridad del portal.

A continuación vamos a mostrar un ejemplo de un filtro.

Continued…

Posted in Java.

Tagged with , , .


¿Que es LINQ?

LINQ (Language Integrated Query) son un cojunto de clases que permiten hacer consultas del tipo SQL dentro de tipos nativos del framework (bases de datos relacionales, objetos enumerables e incluso XMLs).

Estas clases están disponibles a partir del Framework 3.5

Hasta ahora el programador debía conocer el lenguaje SQL para consultas a Bases de datos relacionales y XQuery-XPath para trabajar con XMLs . Con LINQ el programador se puede abstraer de la capa de persistencia de datos utilizando un único lenguaje de consulta y manipulación, sin tener que preocuparse del tipo de colección con el que está trabajando.

En breve pondré ejemplos de LINQ sobre elementos en memoria, LINQ sobre bases de datos y LINQ sobre XML.

Espero que os sirva. Saludos!!

Posted in C#.

Tagged with , , .


Ordenar Hashtable en Java

Nos puede resultar bastante útil obtener de forma ordenada alfabéticamente los datos que hemos introducido en una Hashtable, para ello este método al que le pasamos el objeto Hashtable, nos devolverá un array de Strings con las keys ordenadas.

[code lang=”java”]
private String[] keysOrdenadas(Hashtable ht) {
Object[] valores = ht.keySet().toArray();
ArrayList lista = new ArrayList();

for (int i = 0; i < valores.length; i++) {
lista.add((String) valores[i]);
}
Collections.sort(lista);

Object[] valores_ordenados = lista.toArray();

String[] indice = new String[valores_ordenados.length];
for (int i = 0; i < valores_ordenados.length; i++) {
indice[i] = (String) valores_ordenados[i];
}

return indice;
}
[/code]

Posted in Java.

Tagged with , , .


Look And Feel en aplicaciones Java

Si deseas dar un aspecto más profesional, divertido, o simplemente que tu aplicación java tenga un motivo distinto a los de siempre puedes usar librerías externas con “Look And Feel” muy distintos que podrás encontrar en muchos sitios web con sólo buscar “Look And Feel” en el todo poderoso Google.

Para nuestro ejemplo vamos a utilizar las librerías de “Substance” que podrás encontrar aqui, nos bajamos el jar correspondiente https://substance.dev.java.net/files/documents/3294/93898/substance.jar

Si usamos un entorno de programación como Netbeans o Eclipse debemos importar al proyecto que estemos realizando la librería que hemos bajado anteriormente, ahora para ejecutar la aplicación con uno de los look and feel deseado tendremos que escribir estas líneas de código antes de creación de nuestro Objeto principal. Ejemplo:

[code lang=”java”]
public static void main(String args[]) throws UnsupportedLookAndFeelException {
UIManager.setLookAndFeel(new org.jvnet.substance.skin.SubstanceOfficeSilver2007LookAndFeel());
JFrame.setDefaultLookAndFeelDecorated(true);
SwingUtilities.invokeLater(new Runnable() {

public void run() {
new Pantalla().setVisible(true);
}
});
}
[/code]

Posted in Java.

Tagged with , , , , .


Repintar componentes Swing inmediatamente

Cuantas veces hemos creado un proceso que nos consume la ejecución de nuestro hilo o programa y queremos que se nos repinten algunos componentes como una barra de progreso una label o cualquier otro componente swing, pues con sólo crearnos este pequeño método y llamarlo pasándole el componente que queramos repintar lo tenemos solucionado sin tener que realizar nuevos hilos de ejecución.

[code lang=”java”]
private void repintar(javax.swing.JComponent componente) {
Rectangle area = componente.getBounds();
area.x = 0;
area.y = 0;
componente.paintImmediately(area);
}
[/code]

Posted in Java.

Tagged with , , , , , , .