Mostrando las entradas con la etiqueta java. Mostrar todas las entradas
Mostrando las entradas con la etiqueta java. Mostrar todas las entradas

martes, 11 de septiembre de 2012

Configurar Spring + Jsf + PostgreSQL en Eclipse parte 2

Hola:

Ahora  tenemos que configurar el archivo de configuración de Spring, para esto debemos crear un paquete en nuestro proyecto, ya que ocuparemos annotations (@)  para hacerlo mas simple, no voy a entrar en detalles, en que si la annotations son complicadas o simples dentro de la vida del desarrollo de un proyecto.

Paso 1. Creamos un paquete donde en nuesta carpeta de Java Resources con el nombre que quieran:

Paso 2.



jueves, 14 de junio de 2012

Configurar Spring + Jsf + PostgreSQL en Eclipse

Hola:
 Tengo tiempo que no escribo nada al menos de Java, encontré muchas entradas y blogs para configurar esto, así que decidí hacerlo en una solo entrada de mi blog.

 No se necesitan conocer mucho de estas herramientas de Java, voy a explicar paso a paso como lograrlo.

 Ingredientes:
 Saber algo de Java.
 Eclipse Indigo Service Release 2.
 Spring (Básico-Intermedio).
Jsf (Básico-Intermedio).
Sql (Muy Básico para esta parte).
Html (Muy básico).

 Paso 1. Descargar Eclipse Indigo de su pagina: http://www.eclipse.org/downloads/packages/eclipse-ide-java-ee-developers/indigosr2

Paso 2. Una vez instalado ir a la opción de menú Help ->Eclipse Marketplace


Les mostrara una pantalla como la siguiente: En Find buscar Spring y seleccionar Spring IDE y dar clic en el
botón Install






Paso 2. Una vez instalado el plugin de Spring, descarga el servidor tomcat 7 o cualquiero otro servidor , http://tomcat.apache.org/download-70.cgi, lo instalan, si es win7 lo debe instalar en esta ruta C:\Program Files\Apache Software Foundation\Tomcat 7.0.


Paso 3. Ir al Menu->File->New->Other->Web->Dinamic Web Project

Elegir el nombre del proyecto.



El proyecto contiene esta estructura:




Paso 4.  Configurar Spring a nuestro proyecto.Dar clic derecho sobre el proyecto y en la opción de Spring Tools -> Add Spring Project Nature


En caso de que no les genere el web.xml la pestañita de Deployment Descriptor dar clic derecho y seleccionar Generate Deployment Descriptor Sub y listo.



El proyecto debe tener una S en la carpeta principal y debe tener la siguiente estructura.

Paso 5. Creamos una jsp llamado index.jsp en la carpeta de WebContent y damos clic derecho sobre nuestro proyecto y lo ejecutaremos.



Despues aparecera un asistente para configurar nuestro servidor Web.




Seleccionamos las opciones que estan el los recuadros de color Rojo y Despues el boton Finish para ambas ventanas.

Si todo quedo bien configurado se mostrara una pagina el blanco como la siguiente:





martes, 22 de marzo de 2011

Grid en swingx (Parte 2)

Hola:


Para la parte crearemos un la parte del modelo el cual servira para mostrar datos en nuestro tabla de swing, es muy simple solo debemos hacer lo siguiente:


1.- Vamos a crear una JFrame en donde colocaremos nuestro JPanelGrid, netbeans tiene una manera fácil y rápida de hacerlo File/New File/Swing GUI Forms/ en la opción de Files types seleccionar JFrameForm y next




Aparecerá un panel en donde tienen que poner el nombre la clase para este ejemplo se llamara JFramePrincipal.



Ahora ya tendremos una ventana en donde podremos colocar nuestro JPanelGrid, pero antes de agregarlo vamos a las propiedades de la tabla su nombre es jXTable1, en las propiedades hay una que se llama model
entramos ha esta y eliminamos todas las columnas y renglones, después damos clic en botón OK, en la imagen de abajo muestro como hacerlo.

Después compilamos con F9 nuestra clase llamada JPanelGrid y para adherirlo a nuestro JFramePrincipal solo es necesario arrastrar nuestra Clase JPanelGrid en JFramePricipal que esta en modo diseño.

Para probar que todo hasta aquí va funcionando de maravilla solo necesitamos ejecutar (Run File) la clase JFramePrincipal y nos tiene que abrir una ventana con un grid vacio.

martes, 3 de agosto de 2010

Grid en SwingX (Java)

Hola:

Después de unos cuantas dias sin tener alguna entrada en mi blog he decidido  hacer una sobre swing en este caso hay un api llamada swingx de swinglabs.

Paso 1. Crear un proyecto en netbeans con el nombre que mas les agrade (ejemplo: MiPrimeraAplicacion, es broma).


Paso 2 . Descargar el jar de swingx de este lugar http://swinglabs.org/  espero que funcione porque la mayor parte el servidor esta abajo, pero pueden buscarlo en google.
Paso 3 . Agregar los componentes de swingx a la papeleta de netbeans:
Despues de descargar los jars de swingx, los jars que necesitamos son los siguientes:
 - swingx-beaninfo-1.6.jar
 - swingx-1.6.jar
En la barra de herramientas de Netbeans nos dirigimos a la opción Tools/Palette/Swing and AWT Componets, como lo muestra la imagen de abajo.


Abrira una ventana llamada Palette Manager que es la encargada de adminitrar la Paleta, en esta damos clic al boton New Category y creamos una nueva categoria que se llama swingx.

Despues de dar clic en Ok nos creara un foldercito con el nombre de nuestra categoria llamada swingx, para agregar nuestros componentes de swingx seleccionamos nuestra categoria y damos clic en el boton Add  from Jar mostrara una ventana con el titulo Install Components to Palette, en esta ventana seleccionamos donde estan nuestros dos jars swingx-beaninfo-1.6.jar y swingx-1.6.jar.

Dar next y mostrara una panel donde tenemos que elegir los componentes que se agregaran a la paleta, elegimos en la opción de radio button Show Marked Java Beans


Damos nuevamente next, aparecera una otro panel en donde elegiremos la categoria que creamos anteriormente llamada swingx.



Por ultimo damos clic en boton Finish


Paso 4. Ahora en nuestro proyecto vamos a crear un JPanelForm, tenemos que ir New File/Swing GUI Forms/JPanelForm


Damos next y mostrara un panel donde le pondremos el nombre a nuestro JPanelForm para este ejemplo llamare a la clase JPanelGrid.

Despues de crear la clase JPanelGrid damos doble clic sobre ella y nos abrira el panel en modo diseño, tambien tiene un boton para ver el codigo fuente, del lado derecho esta la Palette con nuestra categoria llamada swingx, en esta se encuentra nuestra JXTable que ocuparemos para este ejemplo, para colocarla en nuestra panel solo debemos arrastrar y soltar y el componente en nuestro panel.





Hasta este punto ya tenemos un grid de swingx pero hace falta agragar datos y tambien crear su main, eso sera parte 2.

Dedicado a mi princesita.

lunes, 17 de mayo de 2010

Archivo de properties en Java (Proyecto Isaacrobot parte I)

Hola:

Por lo regular en nuestros proyectos tenemos la necesidad de crear variables que quizas en algún momento puedan llegar a cambiar y no seria óptimo tenerlas en una base de datos, para esto java creo un tipo de archivos llamados ejemplo.properties en los cuales se pueden manejar propiedades y valores.

El código es el siguiente:


import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Properties;


/**
*
* @author mew
*/
public class FileProperties {

private Properties properties;

public void loadFileProperties(String name){

properties = new Properties();
try {
properties.load(this.getClass().getResource(name+".properties").openStream());
} catch (IOException e) {
e.printStackTrace();
}
}

public String getProperty(String property){
String property_= "";
property_ = properties.getProperty(property);
property_=(property_!=null)?property_:"";

return property_;
}

public static void main(String[] args) throws FileNotFoundException {

FileProperties properties = new FileProperties();
properties.loadFileProperties("baseDeDatos");
System.out.println(""+properties.getProperty("port"));


}


El archivo de properties debe de estar en la misma ruta donde esta esta clase:
para este ejemplo seria algo como esto baseDeDatos.properties y tendria lo siguiente:

host=localhost
port=1521
sid=prueba
user=prueba
password=1234567

La salida sera algo como esto:
1521

miércoles, 5 de mayo de 2010

Obtener día, mes y año de una fecha en java con Date y Calendar

Hola:

Este en un ejemplo de una clase Java que puede servir para no usar lo siguiente:

       DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
        Date date = null;


        try {
            date = formatter.parse(fecha);
        } catch (ParseException ex) {
            Logger.getLogger(ImpuestoEstadoDeMexico.class.getName()).log(Level.SEVERE, null, ex);
        }

       
        date.getDay();
        date.getMonth();
        date.getYear();

Estos métodos ya son obsoletos para las versiones mayores a la JDK 1.1 y por eso se recomienda el uso de Calendar.

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author mew
 */
public class Fecha {

    private String fecha;
    private int dia;
    private int mes;
    private int anio;

    public int getAnio() {
        return anio;
    }

    public void setAnio(int anio) {
        this.anio = anio;
    }

    public int getDia() {
        return dia;
    }

    public void setDia(int dia) {
        this.dia = dia;
    }

    public String getFecha() {
        return fecha;
    }

    public void setFecha(String fecha) {

        DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
        Date date = null;


        try {
            date = formatter.parse(fecha);
        } catch (ParseException ex) {
            Logger.getLogger(ImpuestoEstadoDeMexico.class.getName()).log(Level.SEVERE, null, ex);
        }



        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);


        int anio_ = calendar.get(Calendar.YEAR);
        int mes_ = calendar.get(Calendar.MONTH)+1;
        int dia_ = calendar.get(Calendar.DAY_OF_MONTH);

        this.setAnio(anio_);
        this.setDia(dia_);
        this.setMes(mes_);

        this.fecha = fecha;
    }

    public int getMes() {
        return mes;
    }

    public void setMes(int mes) {
        this.mes = mes;
    }


    public static void main(String[] args) {
        Fecha fecha = new Fecha();
        fecha.setFecha("28/03/2010");
        System.out.println(fecha.getAnio()+" "+fecha.getMes()+" "+fecha.getDia());
    }


}
La salia sera algo como lo siguiente:

2010 3 28

Esta es la aportación de para el blog:

// Objeto grafico
JCalendarCombo calendarCombo = new JCalendarCombo();
calendarCombo.setBounds(210, 102, 172, 20);
add(calendarCombo);

// Formateando la fecha para que le guste a mySQL
Calendar calendario = calendarCombo.getCalendar();
String fecha = calendario.get(calendario.YEAR) + "-"
+ (calendario.get(calendario.MONTH) + 1) + "-"
+ calendario.get(calendario.DAY_OF_MONTH);


lunes, 12 de abril de 2010

Leer un PDF con PDFBox


Hace poco tiempo me tope con la necesidad de leer pdf's desde un servidor para obtener el texto del pdf y sus propiedades, por lo que tuve que investigar con que herramientas podría leer un pdf para convertirlo en un String y después manipular el contenido para obtener solo el texto que me interesaba, me tope con un muy buen blog el cual te explica como hacerlo con PDFBox a mi parecer esta muy entendible y me sirvió para mi propósito, lo único que hice fue modificarlo un poco:
este es el link del blog que mencione anteriormente: http://noelia-java.blogspot.com/2009/07/leer-pdf-desde-java.html

Estas son las clases que genere yo:


/**
*
* @author nany
*/
public class EntidadPDF {
private String titulo;
private String autor;
private int numeroDePaginas;
private String tema;
private String palabrasClave;
private String creador;
private String productor;
private String contenido;//el contenido completo del documento

public String getAutor() {
return autor;
}

public void setAutor(String autor) {
this.autor = autor;
}

public String getContenido() {
return contenido;
}

public void setContenido(String contenido) {
this.contenido = contenido;
}

public String getCreador() {
return creador;
}

public void setCreador(String creador) {
this.creador = creador;
}

public int getNumeroDePaginas() {
return numeroDePaginas;
}

public void setNumeroDePaginas(int numeroDePaginas) {
this.numeroDePaginas = numeroDePaginas;
}


public String getPalabrasClave() {
return palabrasClave;
}

public void setPalabrasClave(String palabrasClave) {
this.palabrasClave = palabrasClave;
}

public String getProductor() {
return productor;
}

public void setProductor(String productor) {
this.productor = productor;
}


public String getTema() {
return tema;
}

public void setTema(String tema) {
this.tema = tema;
}

public String getTitulo() {
return titulo;
}

public void setTitulo(String titulo) {
this.titulo = titulo;
}

}


El método que leera el pdf dada una url esta contenido en al siguiente clase

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import org.pdfbox.pdfparser.PDFParser;
import org.pdfbox.pdmodel.PDDocument;
import org.pdfbox.pdmodel.PDDocumentInformation;
import org.pdfbox.util.PDFTextStripper;

/**
*
* @author nany
*/
public class ContenedorPDF {

private FileInputStream file = null;
private PDDocument document = null;

/**
* Abre el archivo especificado en la ruta para generar un objeto de tipo EntidadPDF
* @param archivo
* @return
* @throws org.pdfbox.exceptions.CryptographyException
* @throws org.pdfbox.exceptions.InvalidPasswordException
*/
public EntidadPDF convertirAModelo(String archivo) {
EntidadPDF entPdf = new EntidadPDF();
try {

//leemos el pdf del articulo lo efectivo
URL url = new URL(archivo);
InputStream is = url.openStream();

PDFParser parser = new PDFParser(is);

parser.parse();
document = parser.getPDDocument();

//Obtenemos todo el contenido del pdf
PDFTextStripper stripper = new PDFTextStripper();
entPdf.setContenido(stripper.getText(document));


//obtenemos la informacion de las propiedades del pdf
PDDocumentInformation info = document.getDocumentInformation();

entPdf.setTitulo(info.getTitle());
entPdf.setAutor(info.getAuthor());
entPdf.setNumeroDePaginas(document.getNumberOfPages());
entPdf.setTema(info.getSubject());
entPdf.setPalabrasClave(info.getKeywords());
entPdf.setCreador(info.getCreator());
entPdf.setProductor(info.getProducer());


} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {//no se pudo abrir el archivo
e.printStackTrace();
} finally {
if (file != null) {
try {
file.close();
} catch (IOException e) {//no se pudo cerrar el archivo
e.printStackTrace();
}
}
if (document != null) {
try {
document.close();
} catch (IOException e) {//no se pudo cerrar el documento
e.printStackTrace();
}
}
}

return entPdf;
}


}

Bien espero y le sea de ayuda, le dejo otro link de otras librerías que permiten la manipulación del pdf
http://www.qoppa.com/Enlace

miércoles, 17 de febrero de 2010

Ordenar elementos de List en java con Collections.sort

Hola:

Todos alguna vez nos topados con ordenar elementos de una List de java (java.util.List) yo se que muchos van a decir que se podria hacer con la base de datos agregando un order by campo_de_tbl, pero muchas aplicaciones no lo requieren y para lograr esto ocuparemos java.util.Comparator.

Paso 1. Crear un bean, para fines prácticos todos los atributos serán String :

public class Concepto {

private String id;
private String cve;
private String descripcion;
private String valor;


public String getValor() {
return valor;
}
public void setValor(String valor) {
this.valor = valor;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getCve() {
return cve;
}
public void setCve(String cve) {
this.cve = cve;
}
public String getDescripcion() {
return descripcion;
}
public void setDescripcion(String descripcion) {
this.descripcion = descripcion;
}



}

Supongamos que queremos ordenas nuestros datos de nuestra List atravez del atributo cve.

Paso 2. Crear la clase que ConceptoComparator que implementa la interfaz Comparator

import java.util.Comparator;


public class ConceptoComparator implements Comparator{

public int compare(Object arg0, Object arg1) {
Concepto conA = (Concepto) arg0;
Concepto conB=(Concepto)arg1;

Long cveConA = Long.parseLong(conA.getCve());
Long cveConB = Long.parseLong(conB.getCve());

if(cveConA < cveConB)
return -1;

else
if (cveConA > cveConB)
return 1;


return 0;
// TODO Auto-generated method stub

}

}

java.util.Comparator int compare(T a, T b) compara dos objetos y proporciona un valor negativo si a va antes que b, cero si se consideran idénticos en el orden de clasificación, y un valor positivo si a va después de b.

Paso 3 : llamar al metodo Collections.sort(...)

List conceptos = new ArrayList();

Concepto con1 = new Concepto();
con1.setCve("10017");

Concepto con2 = new Concepto();
con2.setCve("20001");

Concepto con3 = new Concepto();
con3.setCve("10001");

conceptos.add(con1);
conceptos.add(con2);
conceptos.add(con3);
System.out.println("sin ordenar ");

for(Concepto con : conceptos){
System.out.println(" "+con.getCve());
}

Collections.sort(conceptos, new ConceptoComparator());

System.out.println("ordenados ");
for(Concepto con : conceptos){
System.out.println(" "+con.getCve());
}


el resultado sera algo como esto:
sin ordenar
10017
20001
10001
ordenados
10001
10017
20001

martes, 16 de junio de 2009

Itex en una aplicación web (Generar pdf)

Por fin encontré como enviar un documento pdf generado de manera dinámica desde el servidor al cliente, pues resulta que encontré un código en la web que según lo hacia pero tenia un linea mal y quizás la mas importante por lo general cuando llamamos a un servlet lo hace por metodo

public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException
{....}

el cual realiza una acción según sea el caso puede responder con texto plano, html, xml, json ect, pero también puede ocupar el método

protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
}

También puede responder de la misma manera que goGet, si nosotros queremos responder con html,json, xml, texto plano, o con un pdf que es al final de cuentas es resp.setContentType("application/pdf") que es un objeto de tipo HttpServletResponse resp que es lo que el servlet de responderá al cliente, como nosotros no sabemos como un cliente puede solicitar nuestro pdf nosotros tendremos que generar un método para ambos

protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}

protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
}

Que en el caso de netbeans lo hace al crear un servlet, bueno si lo hacen con netbeans borren lo que tenga dentro de ese metodo.

El código es el siguiente:


package pdf.servlet;



import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.lowagie.text.pdf.PdfPTable;
import com.lowagie.text.pdf.PdfPCell;
import com.lowagie.text.pdf.PdfWriter;
import com.lowagie.text.Document;
import com.lowagie.text.DocumentException;
import com.lowagie.text.Element;
import com.lowagie.text.Paragraph;


/**
*
* @author isaac
*/

public class CrearPdf extends HttpServlet {

/**
* Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.

* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

try {

response.setContentType("application/pdf"); // Code 1
Document document = new Document();
PdfWriter.getInstance(document,response.getOutputStream()); // Code 2
document.open();
float[] widths = {25f, 25f, 20f,15f,15f};
PdfPTable table = new PdfPTable(5); //Code 3
table.setHorizontalAlignment(Element.ALIGN_LEFT);
table.setWidthPercentage(100);
PdfPCell cell =new PdfPCell(new Paragraph("Prueba"));
cell.setHorizontalAlignment(Element.ALIGN_CENTER);
cell.setColspan(5);
table.addCell(cell);
table.addCell("Scanned Fax FileName");
cell.setHorizontalAlignment(Element.ALIGN_CENTER);
table.addCell("Corporate Name");
cell.setHorizontalAlignment(Element.ALIGN_CENTER);
table.addCell("Corporate Account");
cell.setHorizontalAlignment(Element.ALIGN_CENTER);
table.addCell("Credit");
cell.setHorizontalAlignment(Element.ALIGN_CENTER);
table.addCell("Debit");
cell.setHorizontalAlignment(Element.ALIGN_CENTER);



document.add(table);
document.close();

}catch(DocumentException e){
e.printStackTrace();
}catch (Exception e) {

// TODO: handle exception

}
}
// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
/**
* Handles the HTTP <code>GET</code> method.
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/

@Override

protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}



/**
* Handles the HTTP <code>POST</code> method.
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/

@Override

protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}


/**
* Returns a short description of the servlet.
* @return a String containing servlet description
*/

@Override
public String getServletInfo() {
return "Short description";
}// </editor-fold>

}

El web.xml es el siguiente en el caso de Netbeans no es necesario puesto que lo mapea cuando creas el servlet.

<servlet>
<servlet-name>CrearPdf</servlet-name>
<servlet-class>pdf.servlet.CrearPdf</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>CrearPdf</servlet-name>
<url-pattern>/creaPdf</url-pattern>
</servlet-mapping>

y final mente run...

jueves, 11 de junio de 2009

JPanel transparente (Parte 4)

Lo primero que quiero decir es que ya limpie mi escritorio, bueno primero quiero reconocer que algunas ideas que tome para el panel transparente por no decir todo el código lo tome de este blog http://edisoncor.wordpress.com/2007/10/06/jpanel-con-imagen/, un punto mas corregí el código de la parte tres para que quede mejor el borde, después agregare los códigos, bueno antes quiero que observen como van mejorando la interfaz.



Este es el cogido del borde mejorado:

package vista;

/**
*
* @author isaac legorreta
*/

import java.awt.Color;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.RoundRectangle2D;
import javax.swing.JLayeredPane;


public class IPanel extends JLayeredPane
{
private Color color1 = new Color(255,255,255);
private Color color3 = new Color(1,1,1);
private Color color2 = new Color(0,0,0);
private int arcw=25;
private int arch=25;

@Override
protected void paintComponent(Graphics g)
{
Graphics2D g2 = (Graphics2D) g.create();
float x=getWidth();
float y=getHeight();
g2.setPaint(new GradientPaint(0.0f, 0.0f, getColor1().darker(),
0.0f, getHeight(), getColor2().darker()));
g2.fill(new RoundRectangle2D.Double(0, 0, x, y, getArcw(),getArch()));
g2.setPaint(new GradientPaint(0.0f, 0.0f,getColor3(),
getWidth(), getHeight(),getColor3()));
g2.drawRoundRect(0, 0, getWidth()-1 , getHeight()-1, getArcw()-2,getArch()-6);
g2.setPaint(Color.black);
}

public Color getColor3() {
return color3;
}

public void setColor3(Color color3) {
this.color3 = color3;
}



public int getArch() {
return arch;
}

public void setArch(int arch) {
this.arch = arch;
}

public int getArcw() {
return arcw;
}

public void setArcw(int arcw) {
this.arcw = arcw;
}

//Métodos set y get que nos permiten modificar los colores

public Color getColor1() {return color1;}

public void setColor1(Color color1) {this.color1 = color1;}

public Color getColor2() {return color2;}

public void setColor2(Color color2){this.color2 = color2;}

}

Este el código para que el panel sea transparente:


package vista;

import java.awt.AlphaComposite;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;


/**
*
* @author Edisoncor
*/
public class IPanelTrans extends IPanel{

private float tran= 0.8f;



@Override
protected void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
RenderingHints.VALUE_INTERPOLATION_BILINEAR);
AlphaComposite old = (AlphaComposite) g2.getComposite();
g2.setComposite(AlphaComposite.SrcOver.derive(getTran()));
super.paintComponent(g);
g2.setComposite(old);
}

public float getTran() {
return tran;
}

public void setTran(float tran) {
this.tran = tran;
}

}

Como agragarlo por si tienen duda en su palette hay una opción beans dan click en choose bean, aparecera una pantalla como la siguiente y escriben lo siguiente vista.IPanelTrans despues la arrastran hasta su FormPanel y listo


En la propiedades aparecera un atributo llamado tran por defecto tiene .5 pero pueden cambiarlo...




Bueno en la parte uno explico como agregarlo a un FormPanel y despues a un Frame, como pueden notar no parece transparente, bueno en blog donde tome este codigo esta un JPanel con imagen de fondo tome el código y lo mejore un poco para que puedan agregar una imagen desde las propiedades (ruta), pero eso lo explicare en la parte 5...

lunes, 8 de junio de 2009

JPanel con Gradiente redondeado con widgets de swing para Netbeans (Parte 2)

En la primera parte vimos como hacer un gradiente con un JLayeredPane, ahora el siguiente paso es hacer los bordes redondeados. el código es el siguiente.

package vista;
/**
*
* @author isaac legorreta
*/

import java.awt.Color;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.RoundRectangle2D;
import javax.swing.JLayeredPane;


public class IPanel extends JLayeredPane
{
private Color color1 = new Color(255,255,255);
private Color color2 = new Color(0,0,0);
private int arcw=25;
private int arch=25;

@Override
protected void paintComponent(Graphics g)
{
Graphics2D g2 = (Graphics2D) g.create();
float x=getWidth();
float y=getHeight();
g2.setPaint(new GradientPaint(0.0f, 0.0f, getColor1().darker(),
0.0f, getHeight(), getColor2().darker()));
g2.fill(new RoundRectangle2D.Double(0, 0, x, y, getArcw(),getArch()));
g2.setPaint(new GradientPaint(0.0f, 0.0f,getColor2(),
getWidth(), getHeight(),getColor1()));
g2.drawRoundRect(0, 0, getWidth() , getHeight(), getArcw()+2,getArch()+2);
g2.setPaint(Color.black);
}

public int getArch() {
return arch;
}

public void setArch(int arch) {
this.arch = arch;
}

public int getArcw() {
return arcw;
}

public void setArcw(int arcw) {
this.arcw = arcw;
}

//Métodos set y get que nos permiten modificar los colores

public Color getColor1() {return color1;}

public void setColor1(Color color1) {this.color1 = color1;}

public Color getColor2() {return color2;}

public void setColor2(Color color2){this.color2 = color2;}

}


Y para agregarlo a su JFrame esta en la parte 1 de este pequeñito tutorial, mas o memos le debería quedar algo como esto.

martes, 31 de marzo de 2009

Como configurar GWT-EXT en NetBeans

Como configurar GWT-EXT, primero tienen que descargar el jar de Gwt-Ext y la libreria de java script que nos permite manejar widgets (Js-Ext), de este sitio http://gwt-ext.com/download/


Paso 1: El mas importante, tener ganas de terminar este pequeñito tutorial.

Paso 2: Copiamos las libreria de js-ext, pero se preguntaran donde diablos esta,
http://yogurtearl.com/ext-2.0.2.zip , la reombramos con js y la copiamos a nuestro proyecto dentro de Web Pages



Después debería estar así:


3. Agregamos el jar de gwtext.jar que esta en el zip en libreries de nuestro proyecto:

Dar click derecho en libreries, ADD jar/Folder.



4. Configuar Main.gwt.xml este archivo esta nuestro MainEntryPoint, este tiene quien es la clase principal que contiene el metodo para iniciar una aplicación gwt, debemos colocar lo siguiente tag :

<inherits name="com.gwtext.GwtExt"/>

<?xml version="1.0" encoding="UTF-8"?>
<module>
<inherits name="com.google.gwt.user.User"/>
<entry-point class="
org.yournamehere.client"/>
<!-- Do not define servlets here, use web.xml -->
<inherits name="com.gwtext.GwtExt"/>
</module>



5. Tomen un descanso

6. Configuarar las librerias de js en html o jsp donde va a estar alojada nuestra aplicación gwt, para este ejemplo sera: welcomeGwt.html, primero borren lo que tienen y copian lo siguiente:


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta name='gwt:module' content='org.yournamehere.Main=org.yournamehere.Main'>
<title>Main</title>
<link rel="stylesheet" type="text/css" href="js/resources/css/ext-all.css"/>
<link rel="stylesheet" type="text/css" href="js/resources/css/xtheme-gray.css" />
<script type="text/javascript" src="js/adapter/yui/yui-utilities.js"></script>
<script type="text/javascript" src="js/adapter/yui/ext-yui-adapter.js"></script>
<script type="text/javascript" src="js/ext-all.js"></script>
</head>
<body>
<script language="javascript" src="org.yournamehere.Main/org.yournamehere.Main.nocache.js"></script>
</body>
</html>

7. Llamen a ala policía escucho ruidos extraños en mi cubículo...
En este paquete org.yournamehere.client hay una clase que es la principal-> MainEntryPoint remplacen su código por este:

/*
* MainEntryPoint.java
*
* Created on 17 de junio de 2009, 06:39 PM
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/

package org.yournamehere.client;

import com.google.gwt.core.client.EntryPoint;
import com.gwtext.client.core.RegionPosition;
import com.gwtext.client.widgets.Panel;
import com.gwtext.client.widgets.TabPanel;
import com.gwtext.client.widgets.Window;
import com.gwtext.client.widgets.layout.BorderLayout;
import com.gwtext.client.widgets.layout.BorderLayoutData;

/**
*
* @author isaac
*/
public class MainEntryPoint implements EntryPoint {

/** Creates a new instance of MainEntryPoint */
public MainEntryPoint() {
}

/**
* The entry point method, called automatically by loading a module
* that declares an implementing class as an entry-point
*/
public void onModuleLoad() {

TabPanel tabPanel = new TabPanel();
tabPanel.setActiveTab(0);

Panel tab1 = new Panel();
tab1.setTitle("Bogus Tab");
tab1.setHtml(getBogusMarkup());
tab1.setAutoScroll(true);

Panel tab2 = new Panel();
tab2.setTitle("Another Tab");
tab2.setHtml(getBogusMarkup());
tab2.setAutoScroll(true);

Panel tab3 = new Panel();
tab3.setTitle("Closable Tab");
tab3.setHtml(getBogusMarkup());
tab3.setAutoScroll(true);
tab3.setClosable(true);

tabPanel.add(tab1);
tabPanel.add(tab2);
tabPanel.add(tab3);

//west panel
Panel navPanel = new Panel();
navPanel.setTitle("Navigation");
navPanel.setWidth(200);
navPanel.setCollapsible(true);

BorderLayoutData centerData = new BorderLayoutData(RegionPosition.CENTER);
centerData.setMargins(3, 0, 3, 3);

BorderLayoutData westData = new BorderLayoutData(RegionPosition.WEST);
westData.setSplit(true);
westData.setMargins(3, 3, 0, 3);
westData.setCMargins(3, 3, 3, 3);

final Window window = new Window();
window.setTitle("Layout Window");
window.setClosable(true);
window.setWidth(600);
window.setHeight(350);
window.setPlain(true);
window.setLayout(new BorderLayout());
window.add(tabPanel, centerData);
window.add(navPanel, westData);
window.setCloseAction(Window.HIDE);
window.show();
}

private static String getBogusMarkup() {
return "
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. " +
"Sed metus nibh, sodales a, porta at, vulputate eget, dui. " +
"In pellentesque nisl non sem. Suspendisse nunc sem, pretium eget, " +
"cursus a, fringilla vel, urna.";
}

}

Primero crea un TabPanel con tres pestañas y después es agregado ala ventana en la posición del centro atravez de:
BorderLayoutData centerData = new BorderLayoutData(RegionPosition.CENTER);
centerData.setMargins(3, 0, 3, 3);
También contiene otro panel en zona oeste que es agregado a la ventana con:
BorderLayoutData westData = new BorderLayoutData(RegionPosition.WEST);
westData.setSplit(true);
westData.setMargins(3, 3, 0, 3);
westData.setCMargins(3, 3, 3, 3);

8 . Run al archivo welcomeGwt.html despues tendran algo como esto:


Como ven es facil se pueden hacer aplicaciones bastantes vistosas, ademas de ser rapidas, depues explicare como comunicar estas GUI mediante RPC con aplicaciones cliente servidor...

Continuara

jueves, 26 de marzo de 2009

Cosechador OAI en java

Bueno voy a empezar un proyecto con repositorios OAI pero antes debo crear un programita para cosecharlos aqui esta el link para descargar un API que te permite hacerlo:

http://www.oclc.org/research/software/oai/harvester.htm

miércoles, 25 de marzo de 2009

grid en jquery con jsp y json (java)

Bueno un amigo me dijo que le ayuda a hacer un grid con jquery me paso el link de donde descargarlo y estaba en php pero yo lo voy a hecer en java con la ayuda de json (deben descargar el jar de json,ok) y la repuesta se hara con un jsp.
de este link lo pueden descargar http://www.trirand.com/blog/?page_id=6

Bueno primero creamos un proyecto web en cualquier IDE yo ocupe Netbeans, para ese ejemplo lo llamaremos Cliente (Es un clásico):



Como un tip cuando vayan a crear un bean con sus getters y setters no es necesario crear cada get y set por cada atributo netbeans milagrosamente nos ayuda (jijiji+++)



solo den click derecho y después insert code y despues crear getter y setter

Bueno esto los ayudara mucho pero de todas maneras pongo el código:

package modelo;

import java.util.Date;

/**
*
* @author isaac
*/
public class Cliente {

private String cve;
private Date date;
private String nombre;
private double cantidad;
private double tax;
private double total;
private String notas;

public double getCantidad() {
return cantidad;
}

public void setCantidad(double cantidad) {
this.cantidad = cantidad;
}

public String getCve() {
return cve;
}

public void setCve(String cve) {
this.cve = cve;
}

public Date getDate() {
return date;
}

public void setDate(Date date) {
this.date = date;
}

public String getNombre() {
return nombre;
}

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

public String getNotas() {
return notas;
}

public void setNotas(String notas) {
this.notas = notas;
}

public double getTax() {
return tax;
}

public void setTax(double tax) {
this.tax = tax;
}

public double getTotal() {
return total;
}

public void setTotal(double total) {
this.total = total;
}




}

depues para crear el json el codigo es el siguiente: bueno antes la estructura del json que debemos crear es la siguiente:

{"total":"1","page":"1","rows":[{"id":"1","cell":["1","Wed Mar 25 15:16:35 CST 2009","Josue Isaac 0"
,"100.0","10.0","110.0","Salva al mundo usa JAVA 0"]},{"id":"2","cell":["2","Wed Mar 25 15:16:35 CST
2009","Josue Isaac 1","101.0","11.0","112.0","Salva al mundo usa JAVA 1"]},{"id":"3","cell":["3","Wed
Mar 25 15:16:35 CST 2009","Josue Isaac 2","102.0","12.0","114.0","Salva al mundo usa JAVA 2"]}],"records"
:"3"}

Pueden crear esta estructura con su base datos, pero no entrare en detalles:

package json;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import modelo.Cliente;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

/**
*
* @author isaac
*/
public class Json {

public static String construlleJson() throws JSONException{
List listCliente = new ArrayList();
for(int i=0;i < cliente =" new">
cliente.setCve((i+1)+"");
cliente.setDate(new Date());
cliente.setNombre("Josue Isaac "+i);
cliente.setCantidad(100+i);
cliente.setTax(10+i);
cliente.setTotal(cliente.getCantidad()+cliente.getTax());
cliente.setNotas("Salva al mundo usa JAVA "+i);
listCliente.add(cliente);
}

JSONObject jsonObj = new JSONObject();
jsonObj.put("page","1");
jsonObj.put("total","1");
jsonObj.put("records", listCliente.size()+"");

JSONArray array = new JSONArray();
for(Cliente cliente:listCliente){
JSONObject jsonDatos= new JSONObject();
jsonDatos.put("id",cliente.getCve());
JSONArray arrayCell = new JSONArray();
arrayCell.put(cliente.getCve());
arrayCell.put(cliente.getDate());
arrayCell.put(cliente.getNombre());
arrayCell.put(cliente.getCantidad()+"");
arrayCell.put(cliente.getTax()+"");
arrayCell.put(cliente.getTotal()+"");
arrayCell.put(cliente.getNotas()+"");

jsonDatos.put("cell",arrayCell);

array.put(jsonDatos);
}
jsonObj.put("rows",array);


return jsonObj.toString();
}

public static void main(String[] args) throws JSONException {
System.out.println(Json.construlleJson());
}

}

Las lineas en rojo es donde creo una lista de clientes la cual servirá para crear la estructura del json pero ustedes pueden crear un cotenedor que les retorne una lista de Clientes, o con lo quieran llenar su grid, desde su bd. La linea en azul es el objeto principal json y el que retornamos al final, el código de jsp es este:

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@page import="json.Json"%>
<%@page import="org.json.*"%>
<%
String stringJson="";
try {
stringJson = Json.construlleJson();
} catch (JSONException ex) {
out.print("{\"totalCount\":0,\"datos\":[]}");
}
out.println(stringJson);
%>

el html o jsp que contrenda el grid de jquery tendra lo siguiente:

<html> <head> <title>jqGrid Demo</title>
<link rel="stylesheet" type="text/css" media="screen" href="eder/themes/basic/grid.css" />
<link rel="stylesheet" type="text/css" media="screen" href="eder/themes/jqModal.css" />
<script src="eder/jquery.js" type="text/javascript"></script>
<script src="eder/jquery.jqGrid.js" type="text/javascript"></script>
<script src="eder/js/jqModal.js" type="text/javascript"></script>
<script src="eder/js/jqDnR.js" type="text/javascript"></script>
<script type="text/javascript">


function load()
{
jQuery("#list2").jqGrid({ url:'json.jsp', datatype: "json", colNames:['Inv No','Date', 'Client', 'Amount','Tax','Total','Notes'], colModel:[ {name:'id',index:'id', width:55}, {name:'invdate',index:'invdate', width:90}, {name:'name',index:'name asc, invdate', width:100}, {name:'amount',index:'amount', width:80, align:"right"}, {name:'tax',index:'tax', width:80, align:"right"}, {name:'total',index:'total', width:80,align:"right"}, {name:'note',index:'note', width:150, sortable:false} ], rowNum:10, rowList:[10,20,30], imgpath: 'eder/themes/basic/images', pager: jQuery('#pager2'), sortname: 'id', viewrecords: true, sortorder: "desc", caption:"JSON Example" }).navGrid('#pager2',{edit:false,add:false,del:false});
}



</script>
</head>
<body onload="load()">
<table id="list2" class="scroll"></table>
<div id="pager2" class="scroll" style="text-align:center;"></div>
</body>
</html>


la estructura del proyecto seria la siguiente:


Al final el grid se debe paser a este:



Adios...

viernes, 13 de marzo de 2009

Recuperar sesiones hibernate con c3po

Hola:

Hace un par de días me encontré con un problema con hibernate ocupando en pool mi clase anterior era esta.

package org.util;

/
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

/**
*
* @author mew
*/
public class SessionFactorySingleton {
private static SessionFactory sf = null;
/**
* crea una sesion que utiliza todo el programa
*/
private SessionFactorySingleton(){
}
public static SessionFactory getSessionFactory(){
if(sf == null){
sf = new Configuration().configure().buildSessionFactory();
}

return sf;
}
}

Pero lo que pasaba esque el pool de c3po no administraba bien las conexiones, y en un blog encontre este conexion

package org.util;

/**
*
* @author isaac
*/

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.cfg.Configuration;

/**
* Configures and provides access to Hibernate sessions, tied to the
* current thread of execution. Follows the Thread Local Session
* pattern, see {@link http://hibernate.org/42.html }.
*/
public class SessionFactory {

/**
* Location of hibernate.cfg.xml file.
* Location should be on the classpath as Hibernate uses
* #resourceAsStream style lookup for its configuration file.
* The default classpath location of the hibernate config file is
* in the default package. Use #setConfigFile() to update
* the location of the configuration file for the current session.
*/
private static String CONFIG_FILE_LOCATION = "hibernate.cfg.xml";
private static final ThreadLocal threadLocal = new ThreadLocal();
private static Configuration configuration = new Configuration();
private static org.hibernate.SessionFactory sessionFactory;
private static String configFile = CONFIG_FILE_LOCATION;

private SessionFactory() {
}

/**
* Returns the ThreadLocal Session instance. Lazy initialize
* the SessionFactory if needed.
*
* @return Session
* @throws HibernateException
*/
public static Session getSession() throws HibernateException {
Session session = (Session) threadLocal.get();

if (session == null || !session.isOpen()) {
System.out.println("<<<<<<<<<>>>>>>>");
if (sessionFactory == null) {
rebuildSessionFactory();
}
session = (sessionFactory != null) ? sessionFactory.openSession()
: null;
threadLocal.set(session);
}

return session;
}

/**
* Rebuild hibernate session factory
*
*/
public static void rebuildSessionFactory() {
try {
configuration.configure(configFile);
sessionFactory = configuration.buildSessionFactory();
} catch (Exception e) {
System.err
.println("%%%% Error Creating SessionFactory %%%%");
e.printStackTrace();
}
}

/**
* Close the single hibernate session instance.
*
* @throws HibernateException
*/
public static void closeSession() throws HibernateException {
Session session = (Session) threadLocal.get();
threadLocal.set(null);

if (session != null) {
session.close();
}
}

/**
* return session factory
*
*/
public static org.hibernate.SessionFactory getSessionFactory() {
return sessionFactory;
}

/**
* return session factory
*
* session factory will be rebuilded in the next call
*/
public static void setConfigFile(String configFile) {
SessionFactory.configFile = configFile;
sessionFactory = null;
}

/**
* return hibernate configuration
*
*/
public static Configuration getConfiguration() {
return configuration;
}

}

Esta conexion es mucho mas eficiente y con la ayuda de c3po ayuda bastante.

Mi configuracion de C3PO es la siguiente:

<property name="hibernate.c3p0.acquire_increment">1</property>

<property name="hibernate.c3p0.idle_test_period">120</property>

<property name="hibernate.c3p0.timeout">180</property>

<property name="hibernate.c3p0.max_size">20</property>

<property name="hibernate.c3p0.min_size">0</property>

<property name="hibernate.c3p0.max_statements">0</property>

<property name="hibernate.c3p0.preferredTestQuery">select 1;</property>




Le puse en 0 hibernate.c3p0.min_size porque aquí donde trabajo se ponen locos si ven una conexión mucho tiempo, pero ustedes deben hacer sus pruebas, dependiendo de muchos factores:

* Su mapeo de hibernate (contiene muchos Many-to-Many,lazy,ect)
* El hql,o sql mas pesado, de su proyecto,para saber el costo de su qury pueden ocupar en oracle esto:

explain plan for SELECT campos FROM tabla
y para ver el peso del query select * from plan_table

* Tomar el tiempo del Query mas pesado.

En los controles, contenedores, cerrar las conexiones este es muy importante.