martes, 4 de diciembre de 2012

Leer Excel desde Java con POI

Hola tal vez alguna ves hemos necesitado leer un archivo excel desde java y no hemos tenido idea de como hacerlo.
Bueno les traigo un método bien fácil y practico para esto necesitamos usar la api Apache POI.
Adjunto el código para que puedan observarlo.
Admite tanto Xls como Xlsx ,estan separados en métodos distintos para que observen las diferencias.
Para esto necesitaran los siguientes plugins:
  • xbean.jar
  • dom4j-2.0.0-ALPHA-2.jar ( o la version1.4 da lo mismo)
  • poi-ooxml-schemas-3.8-20120326.jar
  • poi-ooxml-3.8-20120326.jar
  • poi-3.8-20120326.jar
CODIGO EJEMPLO:

import java.io.File;
import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

/**

 * @author jonathan-palomino.blogspot.com

 */

public class LectorExcel {

 boolean antiguo = false;
 /**

  * Este metodo es usado para leer archivos Excel

  *

  * @param Nombre_Archivo

  *            - Nombre de archivo Excel.

  */
 private void Leer_Archivo_Excel(String Nombre_Archivo) {

  /**

   * Crea una nueva instancia de Lista_Datos_Celda

   */

  List Lista_Datos_Celda = new ArrayList();

  if (Nombre_Archivo.contains(".xlsx")) {

   GENERAR_XLSX(Nombre_Archivo, Lista_Datos_Celda);

   antiguo = false;

  } else if (Nombre_Archivo.contains(".xls")) {

   GENERAR_XLS(Nombre_Archivo, Lista_Datos_Celda);

   antiguo = true;

  }

  /**

   * Llama el metodo Imprimir_Consola para imprimir los datos de la celda

   * en la consola.

   */

  Imprimir_Consola(Lista_Datos_Celda);

 }

 private void GENERAR_XLSX(String Nombre_Archivo, List Lista_Datos_Celda) {

  try {

   /**

    * Crea una nueva instancia de la clase FileInputStream

    */

   FileInputStream fileInputStream = new FileInputStream(

     Nombre_Archivo);

   /**

    * Crea una nueva instancia de la clase XSSFWorkBook

    */

   XSSFWorkbook Libro_trabajo = new XSSFWorkbook(fileInputStream);

   XSSFSheet Hoja_hssf = Libro_trabajo.getSheetAt(0);

   /**

    * Iterar las filas y las celdas de la hoja de cálculo para obtener

    * toda la data.

    */

   Iterator Iterador_de_Fila = Hoja_hssf.rowIterator();

   while (Iterador_de_Fila.hasNext()) {

    XSSFRow Fila_hssf = (XSSFRow) Iterador_de_Fila.next();

    Iterator iterador = Fila_hssf.cellIterator();

    List Lista_celda_temporal = new ArrayList();

    while (iterador.hasNext()) {

     XSSFCell Celda_hssf = (XSSFCell) iterador.next();

     Lista_celda_temporal.add(Celda_hssf);

    }

    Lista_Datos_Celda.add(Lista_celda_temporal);

   }

  } catch (Exception e) {

   e.printStackTrace();

  }

 }

 private void GENERAR_XLS(String Nombre_Archivo, List Lista_Datos_Celda) {

  try {

   /**

    * Crea una nueva instancia de la clase FileInputStream

    */

   FileInputStream fileInputStream = new FileInputStream(

     Nombre_Archivo);

   /**

    * Crea una nueva instancia de la clase POIFSFileSystem

    */

   POIFSFileSystem fsFileSystem = new POIFSFileSystem(fileInputStream);

   /**

    * Crea una nueva instancia de la clase HSSFWorkBook

    */

   HSSFWorkbook Libro_trabajo = new HSSFWorkbook(fsFileSystem);

   HSSFSheet Hoja_hssf = Libro_trabajo.getSheetAt(0);

   /**

    * Iterar las filas y las celdas de la hoja de cálculo para obtener

    * toda la data.

    */

   Iterator Iterador_de_Fila = Hoja_hssf.rowIterator();

   while (Iterador_de_Fila.hasNext()) {

    HSSFRow Fila_hssf = (HSSFRow) Iterador_de_Fila.next();

    Iterator iterador = Fila_hssf.cellIterator();

    List Lista_celda_temporal = new ArrayList();

    while (iterador.hasNext()) {

     HSSFCell Celda_hssf = (HSSFCell) iterador.next();

     Lista_celda_temporal.add(Celda_hssf);

    }

    Lista_Datos_Celda.add(Lista_celda_temporal);

   }

  } catch (Exception e) {

   e.printStackTrace();

  }

 }

 /**

  * Este método se utiliza para imprimir los datos de la celda a la consola.

  *

  * @param Datos_celdas

  *            - Listado de los datos que hay en la hoja de cálculo.

  */

 private void Imprimir_Consola(List Datos_celdas) {

  String Valor_de_celda;

  for (int i = 0; i < Datos_celdas.size(); i++) {

   List Lista_celda_temporal = (List) Datos_celdas.get(i);

   for (int j = 0; j < Lista_celda_temporal.size(); j++) {

    if (antiguo) {

     HSSFCell hssfCell = (HSSFCell) Lista_celda_temporal.get(j);

     Valor_de_celda = hssfCell.toString();

    } else {

     XSSFCell hssfCell = (XSSFCell) Lista_celda_temporal.get(j);

     Valor_de_celda = hssfCell.toString();

    }

    System.out.print(Valor_de_celda + "\t");

   }

   System.out.println();

  }

 }

 public static void main(String[] args) {

  String fileName = "C:" + File.separator + "Users" + File.separator

    + "synccon" + File.separator + "Desktop" + File.separator

    + "abc.xls";

  System.out.println(fileName);

  new LectorExcel().Leer_Archivo_Excel(fileName);

 }

}

martes, 10 de julio de 2012

Estructuras dinámicas

Hola ,hace mucho tiempo que tenemos estructuras optimas para guardar datos como las listas genéricas o los treemap pero a modo de ejemplo vamos a reinventar la rueda.
Lo que intentaremos haces es una estructura doble con 2 apuntadores en memoria para que así puedas ir de derecha a izquierda y viceversa en cualquier momento.
Nos referimos a un nodo doble aquí unas imágenes para obtener una idea.
inicio
Nodo inicial con 2 apuntadores inicialmente a null
fin
El nodo final con la misma idea.
Agreguemos una estructura nueva se vería así:
nodo1
Aqui vemos un nodo inicio apuntando hacia un nodo con datos.
Si aplicamos la misma idea tendremos lo siguiente:
nodo n
Entonces tenemos una estructura dinámica en memoria ya que los datos se pierden al cerrar el programa o si es que apuntan los nodos inicio y fin a nulo así el recolector de basura los elimina.
Vamos de plano al código:
/**
 *
 * @author jonathan-palomino.blogspot.com
 */
//Clase para una lista doble :
public class NodoDoble {
	private Productos Producto;// informacion
	private NodoDoble ApuntAnt;	// enlace con el anterior
	private NodoDoble ApuntSgte;// enlace con el siguiente

	// constructor
	NodoDoble(Productos Producto){this.Producto=Producto;}
//Esta clase productos será una clase que podrá contener N datos que se podrán setear desde un aplicativo algo así como capas.
	// get/set
        void setPro(Productos Producto){this.Producto=Producto;}
	void setApuntSgte(NodoDoble ApuntSgte){this.ApuntSgte=ApuntSgte;}
	void setApuntAnt(NodoDoble ApuntAnt){this.ApuntAnt = ApuntAnt;}

	Productos getPro(){return Producto;	}
	NodoDoble getApuntSgte(){return ApuntSgte;	}
	NodoDoble getApuntAnt(){return ApuntAnt;	}
}// fin de la clase de nodo doble
Para la clase enlazadora donde podremos poner la lógica de agregación para que trabaje.

/**
 *
 * @author jonathan-palomino.blogspot.com
 */
public class ListaDobleConOrden{
	private NodoDoble inicio;
	private NodoDoble fin;

	// constructor
	ListaDobleConOrden(){inicio=null; fin=null;}

	// get/set
	void setInicio(NodoDoble inicio){this.inicio=inicio;	}
	void setFin(NodoDoble fin){this.fin=fin;	}
	NodoDoble getInicio(){return inicio;	}
	NodoDoble getFin(){ return fin;	}

	// metodos de administracion
	void agrega(Productos Producto){
		NodoDoble nuevo, auxiliar;

		//...preparar nuevo nodo ...
 		nuevo = new NodoDoble(Producto);
		nuevo.setApuntSgte(null);
		nuevo.setApuntAnt(null);

		//...adicionar nuevo nodo a la lista...
		if(inicio == null) {
			//primer nodo
			inicio = nuevo;
			fin = inicio;
		} else //Por codigo orden
                if(Producto.getCodigo().compareTo(
                    inicio.getPro().getCodigo())<0) {
                    //antes del primer nodo
                    nuevo.setApuntSgte(inicio);
                    inicio.setApuntAnt(nuevo);
                    inicio = nuevo;
                } else
                if(Producto.getCodigo().compareTo(
                    fin.getPro().getCodigo())>0 ||
			Producto.getCodigo().compareTo(
                    fin.getPro().getCodigo())==0)	{
                    //después del último nodo
                    nuevo.setApuntAnt(fin);
                    fin.setApuntSgte(nuevo);
                    fin = nuevo;
		} else {
                    //entre dos nodos ya existentes
                    auxiliar = inicio;

                    // ubica el anterior
                    while(Producto.getCodigo().compareTo(
			auxiliar.getPro().getCodigo())>0||
			Producto.getCodigo().compareTo(
			auxiliar.getPro().getCodigo())==0) {
                auxiliar = auxiliar.getApuntSgte();
            }

                    // enlaza
                    nuevo.setApuntSgte(auxiliar);
                    nuevo.setApuntAnt(auxiliar.getApuntAnt());
                    auxiliar.getApuntAnt().setApuntSgte(nuevo);
                    auxiliar.setApuntAnt(nuevo);
		}
	}
	//.....busca un codigo en la lista
	NodoDoble busca(String codigo) {
            // empieza por el primero de la lista
            NodoDoble Auxiliar = inicio;

            // mientras no sea nulo
            while(Auxiliar != null)	{
		if(codigo.equals(Auxiliar.getPro().getCodigo()))
                    return Auxiliar;// lo encontró
		else
                    Auxiliar = Auxiliar.getApuntSgte(); // pasa al siguiente
	}// fin del while
	// terminó la lista y no lo encontró
	return null;
	}
}//fin de la clase ListaDobleConOrden
La clase productos solo es una clase de seteo u getteo de valores:
public class Productos {

private  String Codigo;
    // constructor vacío
    public Productos(){ }
    // constructor que recibe un objeto con datos
    public Productos(Productos obj)
    {
        Codigo = obj.getCodigo();
    }
    public String getCodigo() {
        return Codigo;
    }
    public void setCodigo(String Codigo) {
        this.Codigo = Codigo;
    }
}
Para ejemplo de uso:
public class Principal{
static ListaDobleConOrden ldco =new ListaDobleConOrden();
Productos Productos;
public static void main(String args[]){
ldco.setInicio(null);
    Productos =new Productos();
    Productos.setDescripcion( "abc" );
    ldco.agrega(Productos);
}
}
En caso necesites buscar algo se puede usar
NodoDoble auxiliar = Principal.ldco.busca(codigo);

viernes, 1 de junio de 2012

Jtable con Checkboxs

Si en alguna oportunidad has necesitado poner checkbox en un Jtable y no tubiste ni idea aquí veremos lo fácil que resulta.
Todo va dentro de un arreglo estático pero Uds pueden ponerlo en un for while u otra estructura de control antes de lanzar el agregado o la función getTable()
Adjunto el código:
/** 
* 
* @author http://jonathan-palomino.blogspot.com/ 
* 
*/ 
import javax.swing.SwingUtilities; 
import java.awt.BorderLayout; 
import javax.swing.JPanel; 
import javax.swing.JFrame; 
import javax.swing.UIManager;
import javax.swing.JScrollPane; 
import javax.swing.JTable; 
import javax.swing.table.DefaultTableModel;
public class J_table extends JFrame {
    private static final long serialVersionUID = 1L; 
    private JPanel jContentPane = null; 
    private JScrollPane scroll = null; 
    private JTable Table = null; 
    Object[] columnas = {"ACTIVOS", "NOMBRE", "EDAD"}; 
    Object[][] datos = { 
        {true,"JOSE",50}, 
        {false,"ANDREA",12}, 
        {true,"IVETTE",18}, 
        {false,"JUAN",18}};
    /** 
     * This method initializes scroll    
     *     
     * @return javax.swing.JScrollPane    
     */ 
    private JScrollPane getScroll() { 
        if (scroll == null) { 
            scroll = new JScrollPane(); 
            scroll.setViewportView(getTable()); 
        } 
        return scroll; 
    }
    /** 
     * This method initializes Table    
     *     
     * @return javax.swing.JTable    
     */ 
    private JTable getTable() { 
        if (Table == null) { 
             DefaultTableModel modelo = new DefaultTableModel(datos, columnas) { 
                    public Class getColumnClass(int column) { 
                        return getValueAt(1, column).getClass(); 
                    } 
                }; 
            Table = new JTable(modelo); 
           
        } 
        return Table; 
    }
    /** 
     * @param args 
     */ 
    public static void main(String[] args) { 
        // TODO Auto-generated method stub 
        SwingUtilities.invokeLater(new Runnable() { 
            public void run() { 
                try{ 
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
                }catch(Exception e) { 
                    e.printStackTrace(); 
                } 
                J_table thisClass = new J_table(); 
                thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
                thisClass.setVisible(true); 
            } 
        }); 
    }
    /** 
     * This is the default constructor 
     */ 
    public J_table() { 
        super(); 
        initialize(); 
    }
    /** 
     * This method initializes this 
     * 
     * @return void 
     */ 
    private void initialize() { 
        this.setSize(609, 281); 
        this.setContentPane(getJContentPane()); 
        this.setTitle("JTable con checkbox por http://jonathan-palomino.blogspot.com/"); 
        this.setLocationRelativeTo(null); 
    }
    /** 
     * This method initializes jContentPane 
     * 
     * @return javax.swing.JPanel 
     */ 
    private JPanel getJContentPane() { 
        if (jContentPane == null) { 
            jContentPane = new JPanel(); 
            jContentPane.setLayout(new BorderLayout()); 
            jContentPane.add(getScroll(), BorderLayout.CENTER); 
        } 
        return jContentPane; 
    }
} 

Jlabel editable con tecla Enter

En este caso podremos editar en tiempo de ejecución un Jlabel con la tecla Enter con lo cual lo podremos modificar a nuestro gusto.
Dejo el código para que lo prueben:

/** 
* 
* @author http://jonathan-palomino.blogspot.com/ 
* 
*/ 
import javax.swing.SwingUtilities; 
import java.awt.BorderLayout; 
import javax.swing.JPanel; 
import javax.swing.JFrame; 
import javax.swing.JTextField;
import java.awt.CardLayout; 
import java.awt.event.KeyAdapter; 
import java.awt.event.KeyEvent; 
import java.awt.event.MouseAdapter; 
import java.awt.event.MouseEvent;
import javax.swing.JLabel; 
import java.awt.Font; 
import javax.swing.SwingConstants;
public class principal extends JFrame {
    private static final long serialVersionUID = 1L; 
    private JPanel jContentPane = null; 
    private JPanel panel_edicion = null; 
    private JLabel etiqueta_editable = null; 
    /*************************************/ 
    //si el usuario hizo enter 
    private static final int confirmar = KeyEvent.VK_ENTER; 
    //si es usuario pulso escape 
    private static final int cancelo = KeyEvent.VK_ESCAPE; 
    private CardLayout card;//utilizo el carlayotu para manejar varios objetos dentro del mismo panel 
    private static final String txt_caja = "text field";  //  @jve:decl-index=0: 
    private JTextField caja_edicion; 
    private static final String LABEL = "label"; 
    private String valor=new String("");
    /** 
     * This method initializes panel_edicion    
     *     
     * @return javax.swing.JPanel    
     */ 
    private JPanel getPanel_edicion() { 
        if (panel_edicion == null) { 
            card = new CardLayout(); 
            etiqueta_editable = new JLabel(); 
            etiqueta_editable.setText("Programación fácil con JAVA"); 
            etiqueta_editable.setHorizontalAlignment(SwingConstants.CENTER); 
            etiqueta_editable.setFont(new Font("Dialog", Font.BOLD, 48)); 
            etiqueta_editable.addMouseListener(new MouseAdapter() { 
                public void mouseClicked(MouseEvent e) { 
                    //si el usurario hizo doble clic encima de la etiqueta 
                    if (e.getClickCount() == 2) { 
                        editando(); 
                    } 
                } 
            }); 
            caja_edicion = new JTextField(); 
            caja_edicion.addKeyListener(new KeyAdapter() { 
                public void keyReleased(KeyEvent e) { 
                    if (e.getKeyCode() == confirmar) { 
                        confirmar(); 
                    } else if (e.getKeyCode() == cancelo) { 
                        cancelar(); 
                    } 
                } 
            }); 
            panel_edicion = new JPanel(card); 
            panel_edicion.add(caja_edicion, txt_caja); 
            panel_edicion.add(etiqueta_editable, LABEL); 
            card.show(panel_edicion, LABEL); 
        } 
        return panel_edicion; 
    }
    /** 
     * @param args 
     */ 
    public static void main(String[] args) { 
        // TODO Auto-generated method stub 
        SwingUtilities.invokeLater(new Runnable() { 
            public void run() { 
                principal thisClass = new principal(); 
                thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
                thisClass.setVisible(true); 
            } 
        }); 
    }
    /** 
     * This is the default constructor 
     */ 
    public principal() { 
        super(); 
        initialize(); 
    }
    /** 
     * This method initializes this 
     * 
     * @return void 
     */ 
    private void initialize() { 
        this.setSize(864, 251); 
        this.setContentPane(getJContentPane()); 
        this.setTitle("JLabel editable en tiempo de ejecucion por jonathan-palomino.blogspot.com"); 
        this.setLocationRelativeTo(null); 
    }
    /** 
     * This method initializes jContentPane 
     * 
     * @return javax.swing.JPanel 
     */ 
    private JPanel getJContentPane() { 
        if (jContentPane == null) { 
            jContentPane = new JPanel(); 
            jContentPane.setLayout(new BorderLayout()); 
            jContentPane.add(getPanel_edicion(), BorderLayout.CENTER); 
        } 
        return jContentPane; 
    } 
    /*********************************************/ 
    private void editando() { 
        card.show(getPanel_edicion(), txt_caja); 
        caja_edicion.setText(valor); 
        caja_edicion.requestFocus(); 
        caja_edicion.selectAll(); 
    }
    private void cancelar() { 
        caja_edicion.setText(valor); 
        card.show(getPanel_edicion(), LABEL); 
    }
    public void confirmar() { 
        valor = caja_edicion.getText(); 
        etiqueta_editable.setText(valor); 
        card.show(getPanel_edicion(), LABEL); 
    } 
    
} 

Aplicando sombra un texto

Hola,quien no ha querido aplicar efectos al titulo de una aplicación en este caso aplicaremos sombra y su inclinación como tamaño según parámetros.
Así obtendrán esta imagen


/** 
* 
* @author http://jonathan-palomino.blogspot.com/ 
* 
*/ 
import javax.swing.SwingUtilities; 
import java.awt.BorderLayout; 
import java.awt.Color; 
import java.awt.Font; 
import java.awt.Graphics; 
import java.awt.Graphics2D;
import javax.swing.JPanel; 
import javax.swing.JFrame; 
import java.awt.geom.AffineTransform;
public class Principal extends JFrame {
    private static final long serialVersionUID = 1L; 
    private JPanel jContentPane = null; 
    private int tamaño = 55; 
    private String mensaje = "Programación fácil con JAVA";  //  @jve:decl-index=0: 
    private int Width=50; 
        private double inclinacion_vertical =-0.95; 
        private double inclinacion_horizontal=0; 
        private double escala_altura=2; 
    /** 
     * @param args 
     */ 
    public static void main(String[] args) { 
        // TODO Auto-generated method stub 
        SwingUtilities.invokeLater(new Runnable() { 
            public void run() { 
                Principal thisClass = new Principal(); 
                thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
                thisClass.setVisible(true); 
            } 
        }); 
    }
    /** 
     * This is the default constructor 
     */ 
    public Principal() { 
        super(); 
        initialize(); 
        
    }
    /** 
     * This method initializes this 
     * 
     * @return void 
     */ 
    private void initialize() { 
        this.setSize(985, 257); 
        this.setResizable(false); 
        this.setLocationRelativeTo(null); 
        this.setContentPane(getJContentPane()); 
        this.setTitle("TEXTO CON SOMBRA"); 
        this.setBackground(Color.white); 
        Font font = new Font("DokChampa", Font.BOLD, tamaño); 
        this.setFont(font); 
    }
    /** 
     * This method initializes jContentPane 
     * 
     * @return javax.swing.JPanel 
     */ 
    private JPanel getJContentPane() { 
        if (jContentPane == null) { 
            jContentPane = new JPanel(); 
            jContentPane.setLayout(new BorderLayout()); 
        } 
        return jContentPane; 
    }
        public void paint(Graphics g) { 
            super.paint(g); 
            Graphics2D graph = (Graphics2D)g; 
            int x = Width; 
            int y = tamaño*5/2; 
            graph.translate(10, y); 
            graph.setPaint(Color.lightGray);            
            AffineTransform origTransform = graph.getTransform(); 
            graph.shear(inclinacion_vertical, inclinacion_horizontal); 
            graph.scale(1, escala_altura); 
            graph.drawString(mensaje, 0, 0); 
            graph.setTransform(origTransform); 
            graph.setPaint(Color.blue); 
            graph.drawString(mensaje, 0, 0); 
        } 
   
} 

viernes, 20 de abril de 2012

Crear un pop up en un boton

Si querían poner un pop up en sus botones como menú de opciones esta es la forma les adjunto el código:

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JMenuItem; 
import javax.swing.JPopupMenu;
/** 
* 
* @author jonathan-palomino.blogspot.com 
*/ 
public class Pop_Up extends JFrame{
    public Pop_Up() { 
        setSize(200,150); 
        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 
        prueba.setBounds(40, 40, 140, 50); 
        fantasma.setBounds(10, 10, 50, 30); 
        fantasma.setText(""); 
        prueba.setText("Boton padre"); 
        element.add(ele1); 
        element.add(ele2); 
        
        prueba.setComponentPopupMenu(element); 
        
        add(prueba); 
        add(fantasma); 
    } 
    public static void main(String[] args){ 
        Pop_Up ob = new Pop_Up(); 
        ob.show(); 
    } 
    JButton prueba = new JButton(); 
    JPopupMenu element = new JPopupMenu(); 
    JMenuItem ele1 = new JMenuItem("Elemento1");    
    JMenuItem ele2 = new JMenuItem("Elemento2"); 
    JLabel fantasma = new JLabel(); 
}

Zipear archivos

Para zipear archivos desde java les traigo la siguiente clase:

/** 
* 
* @author jonathan-palomino.blogspot.com
*/ 
import java.util.logging.Level; 
import java.util.logging.Logger; 
import java.util.zip.*; 
import java.io.*; 
  
public class Zipear { 
    public static void Comprimir(String args[]) throws IOException{ 
              if (args.length < 2) { 
            System.err.println("use: Zip.zip file1 file2 file3"); 
            System.exit(-1); 
        } 
        File zipFile = new File(args[0]); 
        if (zipFile.exists()) { 
            System.err.println("Archivo Zip existente seleccione otro"); 
            System.exit(-2); 
        } 
        FileOutputStream fos = new FileOutputStream(zipFile); 
        ZipOutputStream zos = new ZipOutputStream(fos); 
        int bytesRead; 
        byte[] buffer = new byte[1024]; 
        CRC32 crc = new CRC32(); 
        for (int i=1, n=args.length; i < n; i++) { 
            String name = args[i]; 
            System.out.println("--------"+name); 
            File file = new File(name); 
            if (!file.exists()) { 
                System.err.println("Skipping: " + name); 
                continue; 
            } 
            BufferedInputStream bis = new BufferedInputStream( 
                new FileInputStream(file)); 
            crc.reset(); 
            while ((bytesRead = bis.read(buffer)) != -1) { 
                crc.update(buffer, 0, bytesRead); 
            } 
            bis.close(); 
            // Reset to beginning of input stream 
            bis = new BufferedInputStream( 
                new FileInputStream(file)); 
            ZipEntry entry = new ZipEntry(name); 
            entry.setMethod(ZipEntry.STORED); 
            entry.setCompressedSize(file.length()); 
            entry.setSize(file.length()); 
            entry.setCrc(crc.getValue()); 
            zos.putNextEntry(entry); 
            while ((bytesRead = bis.read(buffer)) != -1) { 
                zos.write(buffer, 0, bytesRead); 
            } 
            bis.close(); 
        } 
        zos.close(); 
    } 
    public static void main(String args[])  { 
        String argumentos[] = {"C:\\zip.zip","C:\\Test.pdf"}; 
        try { 
            Comprimir(argumentos); 
        } catch (IOException ex) { 
            Logger.getLogger(Zipear.class.getName()).log(Level.SEVERE, null, ex); 
        } 
    } 
}

Capturar pantalla

Si queremos por algún motivo obtener la captura de pantalla con java aquí les dejo el código:

import java.awt.Dimension; 
import java.awt.Rectangle; 
import java.awt.Robot; 
import java.awt.Toolkit; 
import java.awt.image.BufferedImage; 
import java.util.logging.Level; 
import java.util.logging.Logger; 
import javax.imageio.ImageIO; 
import java.io.File; 
/** 
* 
* @author jonathan-palomino.blogspot.com 
*/ 
public class Capturar_pantalla { 
    
    public static void main(String [] args){ 
        try { 
            captureScreen("C:\\archivo.png"); 
        } catch (Exception ex) { 
            Logger.getLogger(Capturar_pantalla.class.getName()).log(Level.SEVERE, null, ex); 
        } 
    } 
    public static void captureScreen(String fileName) throws Exception { 
  
   Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); 
   Rectangle screenRectangle = new Rectangle(screenSize); 
   Robot robot = new Robot(); 
   BufferedImage image = robot.createScreenCapture(screenRectangle); 
   ImageIO.write(image, "png", new File(fileName)); 
  
} 
}
y lo guardan en “archivo.png” o el que deseen para este caso deje el método como static pero no es necesario.

Generar PDF

El propósito de este post es generar un pdf sencillo mediante Java.

Nos vamos a la página http://sourceforge.net/projects/itext/files/ y descargamos iText. La importamos en nuestro proyecto yendo al menú Biblioteca—agregar archivo jar y seleccionamos los 2 jar.

El código

Se trata de una aplicación muy sencilla que escribirá en el pdf un párrafo con un saludo y otro con la fecha actual.

import com.itextpdf.text.Document;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.PdfWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.Date;


public class GeneratePDF {

    public static void main(String[] args) {
        try {
            OutputStream file = new FileOutputStream(new File("C:\\Test.pdf"));

            Document document = new Document();
            PdfWriter.getInstance(document, file);
            document.open();
            document.add(new Paragraph("Hola a todos!"));
            document.add(new Paragraph(new Date().toString()));

            document.close();
            file.close();

        } catch (Exception e) {

            e.printStackTrace();
        }
    }
}

cambiar icono jframe


1)El ícono debe ser una imagen de extensión PNG. Esto se hace más fácil, ya que conseguir una figura y convertirlo en formato .ico es muy complicado. Los PNG nos ayudan bastante.
2)La imagen que será el ícono debe estar dentro del paquete de fuentes, como si fuera una clase más. Si estuviera dentro de un paquete, sería mucho mejor.


3)En el código del JFrame que vamos a poner el ícono, sobreescribimos el método getIconImage() conteniendo el siguiente código: (notar cómo se está llamando a la imagen .png)
public Image getIconImage() {
Image retValue = Toolkit.getDefaultToolkit().
getImage(ClassLoader.getSystemResource("resources/icono.png"));
return retValue;
}
4)En la vista de diseño del JFrame, lo seleccionamos y vamos sus propiedades, buscamos la propiedad "iconImagen" y hacemos clic en el botón de puntos suspensivos. Se mostrará una ventana de diálogo como esta:
 


De la lista desplegable, seleccionamos "Valor de componente existente". Esto hará que cambie la ventana a la siguiente forma:


Seleccionamos la opción "Propiedad" y hacemos clic en el botón de puntos suspendidos. Aparecerá una ventana de diálogo más pequeña, y seleccionamos la propiedad "iconImage" que aparece ahí.
 

le damos Clic en Aceptar, y se verá así:


y nuevamente clic en "Aceptar" para cerrar la ventana de selección de imagen.
Ahora, veremos que las propiedades del JFrame ya tiene un nuevo valor


Ejecutamos la aplicación con el JFrame y veremos nuestro JFrame con un ícono diferente.