11 diciembre 2011

#{ Java: Convertir un resultSet a ArrayList }

0 comentarios

public ArrayList resultSetToArrayList(ResultSet rs) throws SQLException{
    ResultSetMetaData md = rs.getMetaData();
    int columns = md.getColumnCount();
    ArrayList results = new ArrayList();

    while (rs.next()) {
        HashMap row = new HashMap();
        results.add(row);

        for(int i=1; i<=columns; i++){
          row.put(md.getColumnName(i),rs.getObject(i));
        }
    }
    return results;
}

http://amcubes.com/2009/02/20/converting-resultset-into-arraylist/
28 noviembre 2011

#{ Flex: ToogleButtonBar vs ButtonBar }

0 comentarios

Para obtener los botones de una botonera hecha con un ToogleButtonBar, se obtienen individualmente de la siguiente manera, lo cual no costó mucho:

//i, corresponde a la posición del botón a obtener dentro de la botonera.
ButtonBarButton (botonera.getChildAt(i)).enabled = true;


Pero al hacer el cambio por temas de flexibilidad de diseño del componente, se cambió de ToogleButtonBar a ButtonBar, aquí hubo un par de problemas, pero después de darse de cabezazos con el escritorio, resultó que los botones se obtienen individualmente de un ButtonBar de la siguiente manera:

//i, corresponde a la posición del botón a obtener dentro de la botonera.
var btnBarBtn:ButtonBarButton = btnBar.dataGroup.getElementAt(i) as ButtonBarButton;
btnBarBtn.enabled = true;

http://blog.flexexamples.com/2009/08/02/accessing-specific-buttons-in-a-spark-buttonbar-control-in-flex-4/
24 noviembre 2011
15 noviembre 2011

#{ Flex: El futuro luego del anuncio de adobe }

0 comentarios

El futuro de Flex, spoon.

#{ JAVA: Celdas no editables }

0 comentarios

Creación de nuevo modelo heredando de DefaultTableModel y sobreescribiendo el método isCellEditable para hacer las celdas no editables.
package cunloganthorium.*;

import javax.swing.table.DefaultTableModel;

/**
 *
 * @author whyem
 */
public class CustomDefaultTableModel extends DefaultTableModel{
    /**
     * Sobreescribe el método isCellEditable de DefaultTableModel,
     * para que las celdas no sean editables.
     * 
     * @param row
     * @param column
     * @return
     */
    @Override
    public boolean isCellEditable (int row, int column)
    {       
        return false;
    }
 

}

18 octubre 2011

#{ Código: Abreviando el tradicional If - else }

1 comentarios
If-else de la manera tradicional:
if (a > b) {
   max = a;
} else {
   max = b;
}
If-else abreviado:
max = (a > b) ? a : b;
*operador condicional ternario
07 octubre 2011

#{ Reiniciar PK autoincremental }

0 comentarios
Para SQL server:
DBCC CHECKIDENT (NOMBRE_TABLA, RESEED, 0)
20 septiembre 2011

#{ Flex: ItemRender, grilla con controles }

0 comentarios
http://internetdeveloping.blogspot.com/2009/02/utilizando-un-itemrender-en-un-datagrid.html

#{ Flex: Centrando componentes }

0 comentarios
Los componentes se centran horizontalmente con el atributo horizontalAlign="center". Pero para que funcione y se vea reflejado en la vista es importante darle también el ancho width al componente. Este ancho se da en relación al componente padre (contenedor), por eso se debe dar en porcentaje.

   
  

12 septiembre 2011

#{ Borrar duplicados DataSet C# }

0 comentarios
Primero hacer merge a DataSets y luego llamar a esta función que borra los duplicados.
**referencia.

protected DataSet borrarDuplicadosDataSet(DataSet dTable, string colName)
{
	try
	{
		Hashtable hTable = new Hashtable();
		ArrayList duplicados = new Arraylist();
		
		foreach (DataRow dr in dTable.Tables[0].Rows)
		{
			if(hTable.Contains(dr[colName]))
			{
				duplicados.Add(dr);				
			}else
			{
				hTable.Add(dr[colName], String.Empty);
			}		
		}
		
		foreach (DataRow dr in duplicados)
		{
			dTable.Tables[0].Rows.Remove(dr);
		}
		
		return dTable
	}
	catch
	{
		return null;
	}
}
01 septiembre 2011

#{ Sobreescritura para File.Move() C# }

0 comentarios
System.IO.File.Move() no soporta sobreescritura, por lo mismo para saltar esta limitación hay que agregar un par de líneas antes de mover.

public static void moverConSobreescritura (string sourceFile, string destFile)
{

    /* Primero se borra el archivo del destino si existe. */
    if (File.Exists(destFile))
    {
        File.Delete(destFile);
    } 

    /* Luego movemos */
    File.Move(sourceFile, destFile);

}

04 agosto 2011

#{ Java: Escritura de archivos }

0 comentarios
import java.io.*;
import java.lang.*;

class ArchivoEscribir
{

    public static void main(String [] args){

    try{
        String linea_arch= "texto a escribir en archivo";
        File f=new File("Archivo.txt");
        //InputStreamReader isr= new InputStreamReader(System.in);
        //BufferedReader linea= new BufferedReader(isr);

        //System.out.println("DIGITE NOMBRE: \t");
        //String linea_arch=linea.readLine();

        FileWriter linea_tx= new FileWriter(f,false);
        linea_tx.write(linea_arch);

        linea_tx.close();

    }catch(IOException e){}
    }
}

#{ IOThorium }

0 comentarios
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.SimpleDateFormat;
import java.util.StringTokenizer;
import javax.swing.JOptionPane;

/**
 *
 * @author 
 */
public class Mail {

    private int tipoMje;
    private int status;
    private String de;
    private String para;
    private String cCopia;
    private String asunto;
    private String mensaje;
    private int tipoForm;
    private int ioStatus;


    /**
     * Constructor de la Clase.
     */
    public Mail(){
    }

    public void setTipoMje(int tipoMje){
        this.tipoMje = tipoMje;
    }

    public int getTipoMje(){
        return tipoMje;
    }

    /**
     * @return the de
     */
    public String getDe() {
        return de;
    }

    /**
     * @param de the de to set
     */
    public void setDe(String de) {
        this.de = de;
    }

    public void setPara(String para){
        this.para = para;
    }

    public String getPara(){
        return para;
    }

    public void setCCopia(String cCopia){
        this.cCopia = cCopia;
    }

    public String getCCopia(){
        return cCopia;
    }

    public void setAsunto(String asunto){
        this.asunto = asunto;
    }

    public String getAsunto(){
        return asunto;
    }

    public void setMensaje(String mensaje){
        this.mensaje = mensaje;
    }

    public String getMensaje(){
        return mensaje;
    }   
    
    public int getStatus() {
        return status;
    }

    /**
     * Establece el estado del mensaje: 

* 1 -> Recibido * 2 -> Enviado * 3 -> Borrador * 4 -> Eliminado * * @param status */ public void setStatus(int status) { this.status = status; } /** * @return the ioStatus */ public int getIoStatus() { return ioStatus; } /** * Establece el estado del mensaje:

* 0: * -Enviado: En cola de envio * -Recibido: No leido * * @param ioStatus the ioStatus to set */ public void setIoStatus(int ioStatus) { this.ioStatus = ioStatus; } /** * @return the tipoForm */ public int getTipoForm() { return tipoForm; } /** * @param tipoForm the tipoForm to set */ public void setTipoForm(int tipoForm) { this.tipoForm = tipoForm; } public void verDatos(){ System.out.print("Para -> "+para); System.out.print("\nCc -> "+cCopia); System.out.print("\nAsunto -> "+asunto); System.out.print("\nMensaje -> "+mensaje); Connection conn = null; Statement stmt = null; ResultSet rs = null; DbConnection conex = new DbConnection(); //CustomDefaultTableModel modelo = new CustomDefaultTableModel(); conex.openConnection(); conn = conex.getDbConnection(); try { stmt = conn.createStatement(); rs = stmt.executeQuery("SELECT name FROM species WHERE category='"+38+"' "); while(rs.next()) { Object[] fila = new Object[1]; for (int i=0;i<1;i++){ fila[i] = rs.getObject(i+1); JOptionPane.showMessageDialog(null,"-> "+rs.getObject(i+1).toString()); } //modelo.addRow(fila); } stmt.close(); conex.closeConnection(); }catch(SQLException ex) { System.out.println(ex); JOptionPane.showMessageDialog(null,"Error"+ex.getMessage()); } //return modelo; } /** * Guarda un mensaje recibido, enviado, guardardo o eliminado y * se almacena en la Base de Datos. * Este puede ser del tipo Correo o Formulario. * * @throws SQLException En caso de fallar la inserción en la BD. */ public void saveMail(){ Connection conn = null; Statement stmt = null; ResultSet rs = null; DbConnection conex = new DbConnection(); java.util.Date fechas = new java.util.Date(); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String format = dateFormat.format(fechas); String rstatus = "NO"; int mthID = 0; conex.openConnection(); conn = conex.getDbConnection(); try { stmt = conn.createStatement(); stmt.executeUpdate("INSERT INTO messages VALUES("+ null +","+ tipoMje +","+ status +",'"+ de +"','"+ para +"','"+ cCopia +"','"+ asunto +"','"+ mensaje +"','"+ format +"',"+ ioStatus +",'"+ rstatus +"',"+ mthID +")"); stmt.close(); stmt = conn.createStatement(); rs = stmt.executeQuery("SELECT last_insert_rowid()"); //Insert en la tabla user_has_messages triggerSaveMailRecord(rs.getInt(1)); conex.closeConnection(); rs.close(); }catch(SQLException ex) { System.out.println(ex); JOptionPane.showMessageDialog(null,"Error"+ex.getMessage()); } } /** *Inserta en la tabla dedicada a guardar los registros de la asociacion entre * los mensajes y los usuarios. * Es decir, los mensajes que envia cada usuario.

* Este metodo se dispara inmediatamente despues de enviarse un mensaje. * * @param idLastInsertded El id del mensaje recien insertado */ public void triggerSaveMailRecord(int idLastInsertded){ Connection conn = null; Statement stmt = null; DbConnection conex = new DbConnection(); conex.openConnection(); conn = conex.getDbConnection(); try { stmt = conn.createStatement(); //Para extraer el usuario del String completo (xxx.tid@thorium.cunlogan.cl) StringTokenizer tokens = new StringTokenizer(de,"."); String usname = tokens.nextElement().toString(); stmt.executeUpdate("INSERT INTO user_has_messages VALUES('"+ usname +"',"+ idLastInsertded +")"); stmt.close(); conex.closeConnection(); }catch(SQLException ex) { System.out.println(ex); JOptionPane.showMessageDialog(null,"Error: "+ex.getMessage()); } return; } /** *Lista los mensajes almacenados del estado y tipo seleccionado * [recibido | enviado | borrador | eliminado] * * @param st El estado de guardado del mensaje. * @param typ El tipo de mensaje: Correo o Forms. * @return DefaultTableModel * @throws SQLException En caso de fallar la inserción en la BD. */ public CustomDefaultTableModel loadMailList(int st, int typ){ //Se arma el tipo de modelo a retornar. CustomDefaultTableModel modelo = new CustomDefaultTableModel(); //Se arma la grilla de correos dinamicamente segun estado y tipo del mensaje. modelo.addColumn("Id"); modelo.addColumn("Leído"); if(st == 1 || st == 4 || st == 0 || st == 5){ modelo.addColumn("De"); } if (st == 2 || st == 3 || st == 4){ modelo.addColumn("Para"); } modelo.addColumn("Asunto"); /*if(typ == 2){ modelo.addColumn("Tipo"); }*/ modelo.addColumn("Fecha"); Connection conn = null; Statement stmt = null; ResultSet rs = null; DbConnection conex = new DbConnection(); conex.openConnection(); conn = conex.getDbConnection(); int max = 0; try { stmt = conn.createStatement(); if(typ == 1){ max = 5; switch(st){ case 1: rs = stmt.executeQuery("SELECT id, read_status, from_em, subject, creation_date FROM messages WHERE status="+st+" AND type="+typ+" ORDER BY creation_date DESC"); break; case 2: rs = stmt.executeQuery("SELECT id, read_status, to_em, subject, creation_date FROM messages WHERE status="+st+" AND type="+typ+" ORDER BY creation_date DESC"); break; case 3: rs = stmt.executeQuery("SELECT id, read_status, to_em, subject, creation_date FROM messages WHERE status="+st+" AND type="+typ+" ORDER BY creation_date DESC"); break; case 4: max = 6; rs = stmt.executeQuery("SELECT id, read_status, from_em, to_em, subject, creation_date FROM messages WHERE status="+st+" AND type="+typ+" ORDER BY creation_date DESC"); break; default: rs = stmt.executeQuery("SELECT id, read_status, from_em, subject, creation_date FROM messages WHERE type="+typ+" ORDER BY creation_date DESC"); break; } }else{ max = 4; switch(st){ case 1: rs = stmt.executeQuery("SELECT m.id, m.from_em, m.subject, m.creation_date FROM messages m WHERE m.status="+st+" AND m.type="+typ+" "); break; case 2: rs = stmt.executeQuery("SELECT m.id, m.to_em, m.subject, m.creation_date FROM messages m WHERE m.status="+st+" AND m.type="+typ+" "); break; case 3: rs = stmt.executeQuery("SELECT m.id, m.to_em, m.subject, m.creation_date FROM messages m WHERE m.status="+st+" AND m.type="+typ+" "); break; case 4: max =5; rs = stmt.executeQuery("SELECT m.id, m.from_em, m.to_em, m.subject, m.creation_date FROM messages m WHERE m.status="+st+" AND m.type="+typ+" "); break; default: rs = stmt.executeQuery("SELECT m.id, m.from_em, m.subject, m.creation_date FROM messages m WHERE m.type="+typ+" "); break; } } while(rs.next()) { Object[] fila = new Object[max]; for (int i=0;i

27 abril 2011

#{ Discusión: Constantes y variables a nivel de aplicación }

0 comentarios
http://blog.chuidiang.com/2011/03/10/malditas-variables-estaticas/

#{ Epoch | Unix Time | POSIX time: conversor para lenguajes de programación }

0 comentarios
http://www.epochconverter.com/

Convert from epoch to human readable date:
long epoch = System.currentTimeMillis()/1000;
String date = new java.text.SimpleDateFormat("MM/dd/yyyy HH:mm:ss").format(new java.util.Date (epoch*1000));
25 abril 2011

#{ JTable: Borrar una columna sin afectar al modelo }

0 comentarios
http://chuwiki.chuidiang.org/index.php?title=JTable:_Borrar_una_columna

#{ Tip: Mantener viva instancia de otra clase }

0 comentarios
Para mantener viva la instancia de otra clase, durante la ejecucion total de la clase llamadora, hay que crear la instancia durante el constructor de la clase que llama.

CLASE A (LLAMADORA)
    /**
    * Clase llamadora
    */
    public class ClaseA {
        //Definicion objeto instancia ClaseB
        private ClaseB instanciaB;
 
         /**
         * Constructor ClaseA
         */
         public ClaseA() {
              //Creacion instancia ClaseB, 
              //durará durante toda la ejecucion de ClaseA
              instanciaB = new ClaseB();
         }
    }

CLASE B (LLAMADA)
    /**
    * Clase llamada
    */
    public class ClaseB { 
         /**
         * Constructor ClaseB
         */
         public ClaseB() {   
         }
    }

#{ TimerTask y schedule }

0 comentarios
import java.util.Timer;
import java.util.TimerTask;

/**
* Clase principal
*/
public class ClaseTimer {   
    private Timer timerCounter;
    private static final int delay = 10;
    private static final int rate = 20;

    public ClaseTimer () {           
        //Iniciacion del Timer
        //Asignacion de la tarea al Timer
        timerCounter = new Timer();
        timerCounter.schedule(new TaskCounter(), delay * 1000, rate * 1000);
    }

    /**
    * Clase interna con la tarea a realizar,
    * Se realiza en la implementacion del metodo run()
    */
    class TaskCounter extends TimerTask {
        public void run() {
            //Tarea(s) a realizar...
            lblAmount2Download.setText(thmail.getMsg2Download());
        }
    }

}

24 marzo 2011

#{ Tip para combobox }

0 comentarios
EntityManager em = Arqueo.getInstancia().getEntityManager();
String q = "SELECT N.nombre FROM Nombre N, EntidadArqueologica E WHERE N.entidadArqueologicaId=E.idEntidadArqueologica AND E.plantilla=true";
nombrePlantilla.removeAllItems();
ArrayList result = (ArrayList) em.createQuery(q).getResultList();
for(String itemResult : result){
    nombrePlantilla.addItem(itemResult);
} 
18 marzo 2011

#{ Validacion Numeros textField }

0 comentarios
private void TEXFIELDFocusLost(java.awt.event.FocusEvent evt) {                                               
 String TEXTOTEXFIELD = TEXFIELD.getText();
 try{
  //PASO POR AQUI SI ERAN NUMEROS TODOS
  int CONVERTIDO_EN_NUMEROS_TXTFIELD = Integer.parseInt(TEXTOTEXFIELD);
  javax.swing.JOptionPane.showMessageDialog(null,"Si eran números!");
 }catch(Exception e)
  //PASO POR AQUI CUANDO "NO" HABIAN SOLO NUMEROS
  javax.swing.JOptionPane.showMessageDialog(null,"Error: "+e.getMessage());
 }
}              
16 marzo 2011

#{ De String array a ArrayList }

0 comentarios
http://www.coderanch.com/t/379449/java/java/String-array-arraylist

#{ Katamari Hack }

1 comentarios
Copiar el siguiente código en la barra de direcciones, luego configurar y por último a entretenerse:


(funciona mejor en chrome or firefox 4)


http://kathack.com/
10 marzo 2011

#{ CSS layouts y JS APIs }

0 comentarios
http://www.forosdelweb.com/f53/hacer-que-div-tenga-misma-altura-que-div-contenedor-870534/

http://www.comocrearunsitioweb.com/maquetacion-css-divs-capas
http://www.comocrearunsitioweb.com/maquetando-pagina-web-css
http://stopdesign.com/archive/2003/09/03/absolute.html
http://vagabundia.blogspot.com/2010/01/despejando-dudas-la-propiedad-position.html

http://www.forosdelweb.com/f53/problema-div-con-porcentaje-888122/
http://www.forosdelweb.com/f53/problema-con-div-contenedor-771553/


  http://vandelaydesign.com/blog/design/css-layout-tools/


        http://www.maxdesign.com.au/articles/css-layouts/


        2011/3/8  <.com>

            http://www.w3schools.com/css/pr_pos_overflow.asp


            2011/3/8  <.com>

                http://notasweb.com/articulo/css/centrar-capa-en-horizontal-y-en-vertical.html
                http://www.programacionweb.net/articulos/articulo/?num=461
                http://vagabundia.blogspot.com/2010/04/dos-metodos-para-alinear-verticalmente.html
                http://vagabundia.blogspot.com/2010/04/tablas-si-o-tablas-no.html

                http://code.google.com/intl/es-ES/apis/libraries/devguide.html
                http://jqueryui.com/demos/tabs/#mouseover

                2011/3/8  <.com>

                    http://stackoverflow.com/questions/395485/is-there-any-ide-for-fast-drag-and-drop-php-development

#{ JSON }

0 comentarios
http://www.estadobeta.com/2006/05/11/json/
http://tarjuccino.com/tutoriales/programacion-web/introduccion-a-json/
http://blog.eldelweb.com/vp-16-416-0/Uso-practico-de-AJAX-y-JSON.html
http://www.jourmoly.com.ar/trabajando-con-ajax-json-y-mootools/
http://sentidoweb.com/2007/01/19/lista-de-ejemplos-para-jquery.php
http://www.reach1to1.com/sandbox/jquery/testform.html
22 febrero 2011

#{ KISS y YAGNI }

0 comentarios
Preston: Do you have any advice for people starting to undertake large open source projects? What have you learned by managing the Linux kernel?

Linus Torvalds: Nobody should start to undertake a large project. You start with a small _trivial_ project, and you should never expect it to get large. If you do, you'll just overdesign and generally think it is more important than it likely is at that stage. Or worse, you might be scared away by the sheer size of the work you envision.

So start small, and think about the details. Don't think about some big picture and fancy design. If it doesn't solve some fairly immediate need, it's almost certainly over-designed. And don't expect people to jump in and help you. That's not how these things work. You need to get something half-way _useful_ first, and then others will say "hey, that _almost_ works for me", and they'll get involved in the project.

And if there is anything I've learnt from Linux, it's that projects have a life of their own, and you should _not_ try to enforce your "vision" too strongly on them. Most often you're wrong anyway, and if you're not flexible and willing to take input from others (and willing to change direction when it turned out your vision was flawed), you'll never get anything good done.

In other words, be willing to admit your mistakes, and don't expect to get anywhere big in any kind of short timeframe. I've been doing Linux for thirteen years, and I expect to do it for quite some time still. If I had _expected_ to do something that big, I'd never have started. It started out small and insignificant, and that's how I thought about it.

#{ Pildoras de PHP }

0 comentarios
http://blogdesarrollo.com/php/2010/09/09/iniciandome-en-el-desarrollo-con-cakephp/
http://omixisc.blogspot.com/2007/09/primeros-pasos-con-cakephp.html
http://www.programacion.com/articulo/smarty_277
http://www.guebs.com/manuales/smarty/index.html

http://www.jorgebravo.es/2009/10/ide-para-desarrollo-profesional-en-php-mysql/
12 enero 2011

#{ JComboBox events }

0 comentarios
http://www.velocityreviews.com/forums/t150972-events-of-combobox.html
http://www.codeguru.com/forum/showthread.php?t=36452
http://engin-tekin.blogspot.com/2009/10/hrefhttpkfd.html
http://www.javakb.com/Uwe/Forum.aspx/java-gui/913/JComboBox-popup-sensing-mouse-clicks

Solución a la captura de datos del JPopupMenu, con autocomplete:

1.- Capturar evento para "Enter" o el Action -> "comboBoxEdited"
2.- Capturar evento para "popupWillBecomeVisible"
05 enero 2011

#{ Referencias CellEditors }

0 comentarios
[http://download.oracle.com/javase/tutorial/uiswing/components/table.html#combobox]
[http://www.exampledepot.com/egs/javax.swing.table/ComboBox.html]
[http://www.chuidiang.com/java/tablas/tablaeditor/tablaeditor.php]

#{ Clase específica para conexión SQL }

0 comentarios

#{ Patrones }

0 comentarios

#{ Temas varios por aprender }

0 comentarios

#{ SQLite en Java }

0 comentarios
[http://luauf.com/2008/04/13/administracion-de-bases-de-datos-sqlite/]
[http://luauf.com/2008/05/09/sqlite-en-java/]
[http://voice.xerial.org/2008/11/comparison-between-sqlite-and-h2.html]

Admin GUI
[http://www.sqliteexpert.com/download.html]

#{ Tutoriales HSQLDB }

0 comentarios
[http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=hsql]
[http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=hsqldbBrowser]
[http://wiki.netbeans.org/HSQLDBenNetBeans]

Connection: Ruta relativa a inicio de la JVM.
[http://hsqldb.org/doc/src/org/hsqldb/jdbc/jdbcConnection.html]
[http://hsqldb.org/doc/guide/ch01.html]

Conclusion:

Por lo tanto el trabajo en Netbeans con HSQLDB:

-Pimero se configura en "netbeans->services" la conexion y BD "tipo" para trabajar en el programa (para administrarla graficamente, llenar, borrar, etc.).
SIENDO ESTA ENTONCES RUTA RELATIVA A NETBEANS.
[http://i260.photobucket.com/albums/ii27/kronox199/tuto-hsqldbconnetbeansPASO1.png]

-Segundo se copian todos los archivos generados (5) en el primer paso (generalmente quedan en C:) al directorio del programa (en lo posible crear directorio en raiz de proyecto, ej: database).
[http://i260.photobucket.com/albums/ii27/kronox199/tuto-hsqldbconnetbeansPASO2.png]

-Tercero se configura la conexion dentro del codigo (getConnection) con RUTA RELATIVA A DIRECTORIO DENTRO DEL PROYECTO DESARROLLADO PARA DAR CON EL DIRECTORIO DEL 2° PASO.
[http://i260.photobucket.com/albums/ii27/kronox199/tuto-hsqldbconnetbeansPASO3.png]

#{ Embedded DB - H2 vs HSQLDB vs SQLite }

0 comentarios
[http://3rdstage.blogspot.com/2009/03/comparion-of-hsqldb-h2-sqlite.html]
[http://ricardo.strangevistas.net/grails-and-hsql-vs-h2-vs-derby.html]

#{ Embedded DB - Sun JavaDB (derby) }

0 comentarios
[http://netbeans.org/kb/docs/ide/java-db.html]
[http://java.sun.com/developer/technicalArticles/J2SE/Desktop/javadb/]
[http://forums.netbeans.org/post-70309.html#70309]
[http://www.techienuggets.com/Comments?tx=35944]

#{ Look and Feel mods }

0 comentarios
[http://kolosso.nireblog.com/post/2008/04/04/java-lookfeel]

public void setConexion(Connection conexion) {
  this.conexion = conexion;
}

import java.sql.*;
import javax.swing.JOptionPane;
/**
*
* @author radioidioteke
*/
public class Conexion {

    //Declaramos los objetos para trabajar con bd
    private java.sql.Connection conexion;
    private java.sql.Statement sentencia;
    private java.sql.ResultSet resultado;

   public void conectar()
   {
       try{
            String controlador="com.mysql.jdbc.Driver";
            Class.forName(controlador);
       }
       catch(ClassNotFoundException e)
       {JOptionPane.showMessageDialog(null, "Error en la carga del driver jdbc");}

       //Crear la conexion
       try{
            String url_bd="jdbc:mysql://localhost:3306/nombreDeTuBaseDeDatos";
            String user="root"; //El nombre de usuario mySql
            String clave="root"; //contraseña mySql la que pones cuando instalas mySql

            conexion = java.sql.DriverManager.getConnection(url_bd,user,clave);

            sentencia = conexion.createStatement(java.sql.ResultSet.TYPE_SCROLL_INSENSITIVE,
                                                java.sql.ResultSet.CONCUR_UPDATABLE);

            JOptionPane.showMessageDialog(null, "Conexion realizada exitosamente");


       }
       catch(SQLException e)
       {JOptionPane.showMessageDialog(null, "Error al crear conexion con la BD");}



   }//Fin metodo conectar

   //Metodo desconectar
   public void desconexion()
   {
       try{
       if(conexion!=null){conexion.close();}
       if(sentencia!=null){sentencia.close();}
       if(resultado!=null){resultado.close();}
       }
       catch(SQLException e)
       {JOptionPane.showMessageDialog(null, "Error al intentar la desconexion");}
   }//fin metodo desconectar

    //accesores y mutadores de los objetos conexion sentencia y resultado

    public Connection getConexion() {
        return conexion;
    }

    public void setConexion(Connection conexion) {
        this.conexion = conexion;
    }

    public ResultSet getResultado() {
        return resultado;
    }

    public void setResultado(ResultSet resultado) {
        this.resultado = resultado;
    }

    public Statement getSentencia() {
        return sentencia;
    }

    public void setSentencia(Statement sentencia) {
        this.sentencia = sentencia;
    }

  

}


Para Java existen muchos y diferentes Look&Feel. Algunos son gratis y "open source", otros son propietarios, por lo que para usarlos se deberá pagar una cierta cantidad de dinero y adquirir una licencia de uso.
Comúnmente las ventanas en Java tienen un aspecto y estilos propio pero este se puede cambiar fácilmente si se tiene solamente dos cosas a la mano: una librería adecuada creada con el propósito de cambiar el Look&Feel de Java y una sola línea de código...
El Look&Feel de nuestras aplicaciones Java varía de acuerdo a la plataforma que se use si se escoge el Look&Feel propio del Sistema Operativo; de esta forma podemos desarrollar una aplicación Java sobre la plataforma Windows y mientras la estemos desarrollando la observamos con el Look&Feel propio de Windows:
Windows Look&Feel
...esto se logra insertando el siguiente código antes de crear cualquiera de nuestras ventanas:

<pre class="brush: java">
import javax.swing.UIManager;

try{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}catch (Exception e){
  e.printStackTrace();
}
</pre>

El método "getSystemLookAndFeelClassName()" devuelve el nombre de la clase Look&Feel que implementa el sistema nativo donde se está ejecutando la aplicación. Es por ello que el "skin" o Look&Feel de nuestra aplicación variará de acuerdo al Sistema Operativo en que esta se ejecute. Ahora bien, si esta misma aplicación la ejecutamos sobre otro Sistema Operativo entonces la aplicación tomará el formato y las características visuales de este.




PONER LOS LOOK&FEEL QUE VIENEN CON JAVA
Java nos permite modificar el Look&Feel de nuestra aplicación utilizando algunos de los Look&Feel que vienen implementados en el JDK y JRE y son proveídos por Sun MicroSystems.
Algunos de estos son:
- Metal Look&Feel (El Look&Feel por defecto de Java)
- Motif Look&Feel (El Look&Feel poe defecto de Solaris)

Metal Look&Feel
Este "skin" es el Look&Feel por defecto de Java y podemos lograr que nuestra aplicación luzca de esta forma utilizando las siguientes líneas de código en el constructor de nuestra ventana:

import javax.swing.UIManager; ......
try{
UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
}catch (Exception e){e.printStackTrace();}


...o podemos utilizar estas otras líneas:

import javax.swing.UIManager; ......
try{
UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");

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


Cualquiera sea el caso siempre obtendremos el mismo resultado: Java LF

Motif Look&Feel
Este Look&Feel es el que por defecto trae Solaris y podemos simularlo para nuestra ventana de prueba que se está desarrollando sobre Windows utilizando el siguiente código:

import javax.swing.UIManager; ......
try{
UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel");
}catch (Exception e){e.printStackTrace();}


El resultado que verían sería el siguiente: Solaris Look&Feel

PONIENDO LOOK&FEEL PROPIOS
Como había dicho al principio existen muchos Look&Feel que podríamos utilizar para darle el aspecto que queramos a nuetras aplicaciones.
En Javootoo podemos encontrar una selección de algunos Look&Feel gratis y pagos. Acontinuación haré mención de algunos de ellos y les mostraré algunas instantáneas de como luce nuestra ventana de pruebas con estos Look&Feel.

TinyLaf Look&Feel
Este Look&Feel es de los que más me gusta. La licencia es GNU LGPL y soporta aplicaciones desarrolladas a partir de el JDK 1.4+
El JAR a incluir en nuestra aplicación se puede descargar desde:
Después de haberlo descargado solo tenemos que importarlo a nuestro proyecto y en el constructor de nuestra forma(Frame) principal insertamos estas líneas de código:

import javax.swing.UIManager; ......
try{
UIManager.setLookAndFeel("de.muntjak.tinylookandfeel.TinyLookAndFeel");
}catch (Exception e){e.printStackTrace();}

A continuación podemos ver cómo nos queda nuestra ventana de pruebas: Tiny LF

InfoNode Look and Feel
Look&Feel basado en el Metal Look&Feel. Tiene licencia dual: GPL y Comercial.
La librería a importar en nuestro proyecto se puede descargar desde aquí:
InfoNode
El código a insertar en nuestro constructor de la ventana principal:

import javax.swing.UIManager;
import net.infonode.gui.laf.InfoNodeLookAndFeel;
......
try{
UIManager.setLookAndFeel(new InfoNodeLookAndFeel());
}catch (Exception e){e.printStackTrace();}

...obtendremos algo parecido a esto al ejecutar la aplicación: InfoNode

Lipstik Look&Feel
Look&Feel bajo licencia GPL2 que soporta aplicaciones desarrolladas a partir del JDK 1.4 y superiores.
La librería a importar en nuestro proyecto se puede descargar desde aquí:
Lipstik
El código a insertar en nuestro constructor de la forma principal:

import javax.swing.UIManager; ......
try{
UIManager.setLookAndFeel(new com.lipstikLF.LipstikLookAndFeel());
}catch (Exception e){e.printStackTrace();}

Al ejecutar nuestra aplicación observaremos algo como esto: Lippstik LF
Napkin Look&Feel
Look&Feel bajo licencia BSD que da la impresión de que nuestra aplicación Java parece estar hecha de una servilleta :)
La librería a descargar para incluir en nuestro proyecto la podemos encontrar aquí:
Napkin
El código a insertar en el constructor de la forma principal es el siguiente:

import javax.swing.UIManager; ......
try{
UIManager.setLookAndFeel("net.sourceforge.napkinlaf.NapkinLookAndFeel");
}catch (Exception e){e.printStackTrace();}

Obtendremos, al ejecutar la aplicación, algo sumamente novedoso y, hasta cierto punto de vista gracioso: Napkin LF

NimROD Look&Feel
Look&Feel bajo licencia LGPL y que soporta aplicaciones Java a partir del JDK 1.5+
La librería a incluir en nuestro proyecto la podemos descargar desde:
NimROD
El código a insertar en el constructor del formulario principal es.

import javax.swing.UIManager; ......
try{
UIManager.setLookAndFeel("com.nilo.plaf.nimrod.NimRODLookAndFeel");
}catch (Exception e){e.printStackTrace();}

...obtendremos algo como esto al compilar y ejecutar la aplicación: NimROD LF

EN RESUMEN
Los Look&Feel en Java pueden ser considerados herramientas muy útiles que permiten personalizar su aplicación al modo que usted prefiera. No solamente puede emplear los Look&Feel que ya están hecho sino que puede desarrollar los suyos propios. Claro, esto conllevaría un gran esfuerzo por parte del desarrollador y, además, tener conocimientos de programación Java 2d y de las primitivas gráficas de Java.
En Javootoo se pueden encontrar muchos otros Look&Feel que podrían servirle para brindar un aspecto más o menos profesional a su aplicación Java en dependencia de cual escoja.


Es importante conocer que no todos los Look&Feel aquí mencionados son sumamente estables y algunos tienen problemas a la hora de tratar de representar ciertos componentes Swing, pero lo cierto es que resulta una alternativa sumamente buena y apreciable poder contar con todos estos "skins" para nuestras aplicaciones Java.
TIP
Se debe tener cuidado a la hora de invocar el método setLookAndFeel de la clase UIManager ya que muchas personas cometen el error de invocar este método en el constructor de un JFrame después de haber realizado la llamada al método initComponents() y quedan asombrados de ver que el Look&Feel de la aplicación no ha cambiado de forma según usted especificó. El problema es que el método initComponents() crea e inicializa los objetos(botones, combos, etc.) que existen en el Frame principal con el Look&Feel que, supuestamente, se debe haber definido antes de llamarse este, y como usted ha invocado al método setLookAndFeel() después de haberse ejecutado initComponents() entonces no se cargará la aplicación con el Look&Feel definido por usted. Invoque el método setLookAndFeel() antes de realizar la llamada al método initComponents().
 
 
Buffer de Código | © Design by DheTemplate.com and Theme 2 Blog

Find more free Blogger templates at DheTemplate.com - Daily Updates Free Blogger Templates