Capturar webcam con VB.NET

¿Que haremos? Crearemos una aplicación en Visual Studio, la cual hará uso de una webcam para capturar el video en frames independientes y depositarlos en memoria para despues mostralos al usuario a través de un picturebox y un Timer para crear la ilusión de movimiento. ¿Porque lo haremos? Porque es justo y necesario ¿Que necesitamos? [...]

Envío de correo con JavaMail/Netbeans

JavaMail es una expansión de Java que facilita el envío y recepción de e-mail desde código java. JavaMail implementa el protocolo SMTP (Simple Mail Transfer Protocol) así como los distintos tipos de conexión con servidores de correo -TLS, SSL, autentificación con usuario y password, etc [Según SantaWikipedia] ¿Qué necesitamos? JavaMail 1.4.5 Java y Netbeans 6.9 [...]

Proyecto de base de datos Firebird VB

En este proyecto realizaremos una aplicación de base de datos Firebird con el lenguaje de programación de Visual Basic de Microsoft, este proyecto tendrá las funciones básicas de gestión INSERT, DELETE, UPDATE y una interfaz de usuario para utilizarlas. ¿Que necesitamos? Visual Studio 2008 o superior Firebird última versión Firebird ADO.NET Data Provider. Conocimientos básicos [...]

Imprimir imagen con Print

La siguiente clase hace uso de PRINT para imprimir una imagen que se encuentra en un variable de tipo FileInputStream, esta clase a su vez es implementada desde una interfaz que hace fácil su uso, la clase así como todo el proyecto esta comentado. import java.io.File; import javax.print.Doc; import java.io.IOException; import javax.print.DocFlavor; import javax.print.SimpleDoc; import java.io.FileInputStream; [...]

18/12/10

JTable con Formato

JAN29


Como pasar de esto
 a esto
Eso es lo que veremos en este tutorial ;D

Paso 1: Crea un nuevo proyecto en Netbeans (ej: jcTable), añade un JFrame (nombre: interfaz) y a este añade un objeto JTable.

Paso 2: Crea una nueva clase que llamaremos "FormatoTabla.java", añade el siguiente codigo:

package jctable;
import java.awt.Color;
import java.awt.Component;
import java.awt.Font;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
/**
 * @web http://jc-mouse.blogspot.com/
 * @author Mouse
 */
public class FormatoTabla extends DefaultTableCellRenderer{    
    Font normal = new Font( "Arial",Font.PLAIN,12 );
    Font negrilla = new Font( "Helvetica",Font.BOLD,18 );
    Font cursiva = new Font( "Times new roman",Font.ITALIC,12 );

    @Override 
    public Component getTableCellRendererComponent ( JTable table, Object value, boolean selected, boolean focused, int row, int column ) 
    {
        setEnabled(table == null || table.isEnabled()); 
        
        setBackground(Color.cyan);//color de fondo
        table.setFont(normal);//tipo de fuente
        table.setForeground(Color.black);//color de texto
        setHorizontalAlignment(2);//derecha
                
        //si la celda esta vacia se reemplaza por el texto "<vacio>" y se rellena la celda de color negro y fuente color blanco
        if(String.valueOf(table.getValueAt(row,column)).equals("")||String.valueOf(table.getValueAt(row,column)).equals("<vacio>")){            
            table.setValueAt("<vacio>", row, column);
            setBackground(Color.black);                         
            table.setForeground(Color.white);
            table.setFont(cursiva);
        }
        /*--------*/
        if(String.valueOf(table.getValueAt(row,column)).equals("jc Mouse")){
            setBackground(Color.red); 
            table.setFont(negrilla);                
            setHorizontalAlignment(0);//centro
        }                        
        /*--------*/
        if(String.valueOf(table.getValueAt(row,column)).equals("de")){
            setBackground(Color.yellow);         
            table.setFont(negrilla);                
            setHorizontalAlignment(0);//centro
        }
         /*--------*/   
        if(String.valueOf(table.getValueAt(row,column)).equals("Bolivia")){
            setBackground(Color.GREEN); 
            table.setFont(negrilla);                
            setHorizontalAlignment(0);//centro
        }        
        /*--------*/
        //si la celda contiene números
        if(isNumber(String.valueOf(table.getValueAt(row,column)))){
            setBackground(Color.BLUE); 
            setHorizontalAlignment(4);//izquierda
        }      
        
        super.getTableCellRendererComponent(table, value, selected, focused, row, column);         
        return this;
 }
    
 //
 private boolean isNumber(String cadena){
         try {
             Double.parseDouble(cadena.replace(",", ""));
         } catch (NumberFormatException nfe){
             String newCadena = cadena.replace(".", "").replace(',', '.');
             try{
                 Double.parseDouble(newCadena);
             } catch (NumberFormatException nfe2){
                 return false;
             }
        }
         return true;
    }

}

Esta clase lo que hace es utilizar el "DefaultTableCellRenderer" para dar el formato a las tablas, segun las reglas que nosotros quisieramos definir, palabras reservadas, string, numeros, celdas vacias, etc.


Paso 3: en el JFrame, debemos llamar a esta clase "FormatoTabla.java" de la siguiente manera:


public interfaz() {
   initComponents(); 
   //se asigna el formato a la tabla
   jTable1.setDefaultRenderer (Object.class, new FormatoTabla());
}
y eso es todo ;), todo cambio que realizamos en tiempo de ejecucion en el JTable, aplicara el formato que nosotros le dimos.

enlace de descarga del proyecto en Netbeans 6.0
Click para descargar

16 comentarios:

Denis dijo...

Excelente aporte, estuve tratando de hacer algo así, pero solo me funcionaba haciendo clic en el jtabla, ahoro si gracias a ti.

Slds

Cinthia A. Cuba dijo...

Muy bueno el aporte, agradezco que compartan ayudas asi..
Saludos..
Cin

Anónimo dijo...

Gracias por todos estos buenos tutoriales me han ayudado mucho como programador y no solo en java. Sabe como le puedo colocar un row header a un jtable(gracias por cualquier ayuda que me pueda brindar)

Anónimo dijo...

Muchas gracias por el aporte, esta interesante.

Saludos...

Anónimo dijo...

Muy buen aporte, gracias mouse me sirvió de mucho

Anónimo dijo...

muy bueno tu aporte, bueno quisiera saber como hacer lo siguiente tengo una tabla de cuotas con fecha de vencimiento, cuando la fecha actual sea mayor a la fecha de vencimiento, que en el jtable la columna aparesca de color rojo

Ariana dijo...

Gracias por el ejemplo, una duda como puedo hacer que se vean las líneas de las celdas por que al aplicar tu ejemplo no se muestran los bordes de las celda

Anónimo dijo...

muy muy buen aporte..... creo que la bibliotecas de java tienen que tener todas estas herramientas y dejarnos utilizar de una manera mas eficaz los Jtable.......

Vianey vargas morales dijo...
Este comentario ha sido eliminado por el autor.
Vianey vargas morales dijo...

Jc_Mouse me sale un error en el proyecto de Contactos que te sigo me sale error null porque???
lang.NullPointerException me podrias ayudar?? te lo agradeceria inmensamente

Vianey vargas morales dijo...

Amigo mouse me prodrias ayudar con este error: ??
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException me dice error null
en tu proyecto que hago de Contactos porque??

mouse dijo...

el error esta inccompleto, te dice que encuentr4a unn valor NULL en alguna propiedad o clase, pega un par de lineas mas del error que te sale

Vianey vargas morales dijo...

Amigo Mouse ya busque por muchos lados y tube solucion...
igual te agradezco por responder al comnetario muchisimas gracias amigo por sus proyectos me ha servido de mucho...

y no sin antes como siempre pidiendo un favor: es que tengo una aplicacion que inserta en la base de datos pero quiero que el momento de insertar me saque un mensaje si el codigo ya existe en la base de datos ??? como es el codigo en java de casualidad no tienes un proecto asi???
NOTA: la base datos en el campo codigo lo tengo numerico..

muchas gracias por su atencion

Anónimo dijo...

Hola amigo y si quiero que una celda numerica cambie de color por ejemplo comparando con una caja de texto por ejemplo en la celda dle jtable dice 30 y en la caja de texto 40, si es mayor sera rojo y si es menor azul, como haria saludos

mouse dijo...

pues una comparacion con IF, pero antes si trabajas con valores numericos debes comprobar que estos sean correctos, todo esto en el DefaultTableCellRenderer, ojo que la condicion la de debes indicar para filas o columnas en general, aunque tambien puedes especificar para una celda en particular con row,column

henry rodriguez dijo...

gracias por compartir

Post recomendado