Hace un par de días Sun públicó la versión estable de la plataforma Java SE 6 Update 10, que tiene gran importancia para todo desarrollador Java, algunas de las características que incluye son:
jueves, 23 de octubre de 2008
Lanzamiento de Java 6 Update 10
viernes, 17 de octubre de 2008
Jujuy JUG
Hola a todos!
Queriamos cometarles que ya poseemos un hosting y que estamos trabajando para montar nuestro sitio allí, por lo que vamos a dejar de usar este espacio en blogger...
Invitamos a todos para que se nos unan en este emprendimiento... Espero que nos sigan visitando, porque ahora sí vamos a comenzar a publicar cosas en serio.
Saludos.
Miembros Fundadores de Jujuy JUG
jueves, 16 de octubre de 2008
JavaSound API
JavaSound es una API de bajo nivel, para dar efectos basicos y el control de la entrada y salida de sonido de los medios de comunicación, incluidos los de audio y de Interfaz digital de instrumentos musicales (MIDI) de datos.
JavaSound API ofrece control explicito sobre las capacidades que normalmente se exige para una entrada y salida de sonido, en un framework que promueva la flexibilidad y extensibilidad.
Enlaces utiles:
Java Sound Programmer Guide
Pagina de SUN sobre la Java Spund API
Documento en Castellano basico para la JavaSound API
Como capturar Sonido desde el microfono
Lista de Tutoriales, que incluye informacion sobre JavaSound. Tiene mucha practica.RECOMENDADO
miércoles, 15 de octubre de 2008
JDK 1.4 RIP
Como adelanta Alex Miller en su blog, este 30 de octubre de 2008, el JDK 1.4 llega al final de lo que los de Sun llaman End Of Service Life (EOSL) lo que significa que la empresa dejará de darle soporte gratuito y publicar bug fixes.
Alex pone como ejemplo lo que paso con la versión 1.3, que a pesar de que se publicó un patch con los datos de las zonas horarias actualizados, ya no ha habido versiones que solucionen bugs.
El JDK 1.4 ha sido una de las versiones más usadas en la historia de Java e incluso en muchas empresas siguen confiando en él para sus desarrollos. De acuerdo a los datos de Sun, estuvo en Service Life 6 1/2 años, por lo que ya merece un descanso.
Parte d ela longevidad del 1.4 tuvo que ver con los cambios significativos que sufrió la plataforma con el JDK 5, que no hacía fácil la migración de desarrollos propios, por lo que los servidores de aplicaciones tardaron mucho en adoptarla y consecuentemente, los programadores de aplicaciones.
Por cierto, según la misma tabla de Sun, el JDK 5 termina su vida de servicio en octubre del próximo año...
Fuente: JavaHispano,jdk 1.4 RIP
lunes, 13 de octubre de 2008
Uso de JTable III - 3. Seleccionar una Fila del JTable
Hacer esto es muy sencillo, nada mas usando las funciones getSelectedRow() y getValueAt(fila, columna) del JTable.
Ø getSelectedRow() devuelve un entero con el número de fila seleccionado, si se marcan varias filas, devuelve el número de la ultima fila seleccionada.
Ø getSelectedColumn() devuelve un entero con el número de columna seleccionado.
Ø getValueAt(fila, columna) devuelve un objeto del tipo Object con el contenido de la celda especificada. Para trabajar ese contenido solo tenemos que convertirlo al tipo de dato que queremos. Ej (String.valueOf(jTableDatos.getValueAt(1,1)) esto nos devuelve un String con el apellido que figura en la fila 1). Cabe recordar que las filas empiezan en 0.
Ejemplo:
Obtenemos el número de fila seleccionado
int fila=miJTable.getSelectedRow();
Luego con la funcion getValueAt le pasamos como parámetro la fila y el número de columna que queremos
String valorCelda = (String) miJTable.getValueAt(fila,0);
Ejemplo:
En este ejemplo, cargue dos filas en la tabla, luego seleccione la tercera columna de la segunda fila con el valor Gutty. La ventana muestra lo siguiente:
El código encargado de sacar los datos del JTable es el siguiente:
private void jTableDatosMouseClicked(java.awt.event.MouseEvent evt)
{
// primero, obtengo la fila seleccionada
int fila = this.jTableDatos.getSelectedRow();
// luego, obtengo la columna seleccionada
int columna = this.jTableDatos.getSelectedColumn();
// por ultimo, obtengo el valor de la celda
String dato = String.valueOf(this.jTableDatos.getValueAt(fila,columna));
// ahora creo la ventana que me va a mostrar esos datos
VentanaMostrarCelda mostrarCelda = new VentanaMostrarCelda(this,true);
// llamo al metodo en la ventana mostrarCelda encargado de mostrar los datos
mostrarCelda.mostrar(fila,columna,dato);
// hago visible la ventana
mostrarCelda.setVisible(true);
}
En este caso, programe el evento mouseClicked(). Particularmente no recomiendo programar algoritmos dentro de la declaración de eventos, puesto que si queremos utilizar el mismo método, vamos a tener que volver a escribir el código y eso significa redundancia.
En la ventana que muestra los datos existe un método encargado de mostrar los datos recibidos de la ventana principal:
public void mostrar(int fila, int columna, String dato)
{
this.jTextColumna.setText(String.valueOf(columna));
this.jTextFila.setText(String.valueOf(fila));
this.jTextValor.setText(dato.trim());
}
jueves, 9 de octubre de 2008
3ras Jornadas de Software Libre
Las 3ras Jornadas de Software Libre de Catamarca se realizarán los días 31 de octubre y 1 de noviembre del 2008 en la Universidad Nacional de Catamarca , organizado por GULCAr (Grupo de Usuarios de Software Libre de Catamarca).
Objetivos de las jornadas:
Promover un espacio comunitario en reflexión en torno a la realidad del Software Libre y su vinculación activa con el desarrollo tecnológico sustentable.
Uso de JTable II - 2. Introducir contenido al JTable
Si tenemos una tabla de 5 columnas, el tamaño del vector necesariamente debe ser menor o igual 5. Si creamos un vector de 3 elementos y le asignamos valores, cuando agreguemos la fila al JTable, esta tendrá las 3 primeras columnas con datos y las restantes en blanco, esto es útil cuando tenemos columnas con tipos de datos numéricos, booleanos o los que queremos dejar en blanco para rellenar luego (como en el detalle de una factura por ejemplo, donde dejamos libre una columna para rellenar con la cantidad del producto que se esta facturando).
Con el siguiente ejemplo muestro como es que se hace esto. Como ya mencione, utilizo Netbeans para desarrollar el ejemplo así que asumo que el IDE crea las declaraciones para crear el objeto JTable.
El ejemplo completo consiste en una interfase en la que escribimos el DNI, apellido y nombre de una persona y luego la agregamos al JTable.
El ejemplo completo se puede descargar de aquí
A continuación voy mostrar e intentar explicar la parte que nos interesa, la de cómo agregar datos al JTable.
El sistema corriendo se ve de la siguiente manera:
El código necesario para poder cargar datos al JTable es el siguiente
private void agregarDatos()
{
// obtengo el modelo de la tabla (El TableModel)
DefaultTableModel modelo = (DefaultTableModel)this.jTableDatos.getModel();
// defino el vector que contendra los datos a cargar en la tabla
String datos[] = new String[3];// como la tabla contiene 3 columnas, le asigno 3 como tamaño al vector
// ahora cargo el vector con los datos que cargo el usuario.
datos[0] = this.jTextDni.getText().trim();// primero el DNI, el trim() es para que no se cargue el espacio en blanco
datos[1] = this.jTextApellido.getText().trim();// ahora el apellido.
datos[2] = this.jTextNombre.getText().trim(); // por ultimo el nombre.
//ahora agrego los datos al TableModel
modelo.addRow(datos);
// y listo, los datos aparecen en la tabla
}
Cada vez que se presione el botón “Agregar”, el sistema toma los datos cargados en los JTextField y los agrega a la tabla
martes, 7 de octubre de 2008
Uso de JTable I - 1. Algo de teoria
Muchas veces he tenido que realizar algún software que use JTable y cuando ya pensaba que nada nuevo me iba a hacer falta aprender surgía alguna complicación y tenía que tratarla de forma especial, por lo que tenía que pasar algunas horas en google tratando de encontrar esa forma especial de trabajar con los problemas. Lo que pretendo con esta serie de post es compartir un poco las formas de usar un JTable de muchas diferentes maneras, aunque de seguro no son todas pero a medida que vaya aprendiendo cosas nuevas las voy a ir posteando.
Todos los ejemplos que presento han sido creados por mi para mostrar como trabaja la funcionalidad que intento mostrar, aunque el código no siempre va a ser totalmente mío, en la medida que pueda voy a citar la fuente pues el merito es de ellos, además, a veces ni se que es lo que hacen pero igual funciona jejeje. Después de todo, mientras funcione, solo modificamos lo que nos sirve J Los ejemplos fueron escritos usando NetBeans como IDE.
Espero que les sea útil.
Los temas a tratar en la serie de post son los siguientes:
- Algo de teoría.
- Introducir contenido al JTable.
- Seleccionar una fila del JTable.
- Limpiando el contenido del JTable.
- Establecer el tamaño de las columnas por defecto.
- Validar el contenido de los campos.
- Definir el número de columnas en tiempo de ejecución.
- Cualquier otra cosa que salga o consulta sobre el tema.
- ALGO DE TEORIA.
Con la clase JTable, se pueden mostrar tablas de datos, y opcionalmente permitir que el usuario los edite. JTable no contiene ni almacena datos; simplemente es una vista de nuestros datos.
Algunos de los constructores que emplea esta clase son los siguientes:
Ø JTable()
o Construye un JTable()
predeterminado
Ø JTable(int numRows, int numColumns)
o Construye un JTable()
con numRows
y numColumns
de celdas vacías, utilizando DefaultTableModel
Ø JTable(Object[][] rowData, Object[] columnNames)
o Construye un JTable()
visualizando los valores de rowData
en una matriz bidimencional, utilizando columnNames
como nombres para las columnas
Ø JTable(TableModel dm)
o Construye un JTable()
con dm
como modelo de tabla, un modelo de columna predeterminado y un modelo de selección predeterminado
Ø JTable(TableModel dm, TableColumnModel cm)
o Construye un JTable()
con dm
como modelo de tabla, cm
como modelo de columna y un modelo de selección predeterminado.
Ø JTable(TableModel dm, TableColumnModel cm, ListSelectionModel sm)
o Construye un JTable()
con dm
como modelo de tabla, cm
como modelo de columna y sm
como modelo de selección.
Ø JTable(Vector rowData, Vector columnNames)
o Construye un JTable()
para visualizar los valores del Vector
de Vectores, rowData
, con nombres de columnas dados en columnNames.
En el siguiente ejemplo, para crear un JTable se emplea el siguiente código
private javax.swing.JTable jTableDatos;
jTableDatos = new javax.swing.JTable(); // estamos usando el primer constructor de la lista.
Pero como había mencionado antes, la clase JTable solo muestra los datos. Para determinar que es lo que queremos mostrar tenemos que utilizar un TableModel.
El modelo de tabla o TableModel
Los modelos de tabla son objetos que implementan la interfase TableModel; a través de ellos es posible personalizar mucho más y mejor el comportamiento de los componentes JTable, permitiendo utilizar al máximo sus potencialidades. Todas las tablas cuentan con un modelo de tabla.
La clase AbstractTableModel es la que implementa directamente a la interfase TableModel, aunque es esta clase la que se recomienda extender para utilizarla como modelo de tabla, existe un modelo de tabla predeterminado que facilita mucho el trabajo con tablas. Este modelo predeterminado es la clase DefaultTableModel.
Sus constructores son los siguientes:
Ø DefaultTableModel()
o Construye un DefaultTableModel.
Ø DefaultTableModel(int numRows, int numColumns)
o Construye un DefaultTableModel
con numRows
y numColumns
Ø DefaultTableModel(Object[][] data, Object[] columnNames)
o Construye un DefaultTableModel
e inicia la tabla pasando data
y columnNames
al método setDataVector()
Ø DefaultTableModel(Object[] columnNames, int numRows)
o Construye un DefaultTableModel
con un número de columnas equivalentes al número de elementos o valores nulos en columnNames
y numRows
Ø DefaultTableModel(Vector columnNames, int numRows)
o Construye un DefaultTableModel
con un número de columnas equivalentes al número de elementos o valores nulos en columnNames
y numRows.
Ø DefaultTableModel(Vector data, Vector columNames)
o Construye un DefaultTableModel
e inicia la tabla pasando data y columnNames
al método setDataVector()
Si bien el modelo predeterminado DefaultTableModel nos facilita mucho el trabajo, no es el optimo dado que emplea demasiados recursos, sin embargo, para aplicaciones pequeñas funciona bastante bien. Mas adelante, en otro articulo sobre optimización de código Java voy a mostrar como mejor el rendimiento de los JTable.
En el ejemplo ya teníamos creado el JTable, ahora hay que agregarle el TableModel. Nuestro código queda así:
private javax.swing.JTable jTableDatos;
jTableDatos = new javax.swing.JTable(); // estamos usando el primer constructor de la lista.
jTableDatos.setModel(new javax.swing.table.DefaultTableModel(
new Object [][]
{
// no se agrega ninguna fila
},
new String []
{
"D.N.I", "Apellido", "Nombre"
}
)); // estamos usando el tercer constructor de la lista
Ahora ya tenemos creado la tabla con tres columnas (“D.N.I”, “Apellido” y “Nombre”) y ninguna fila, pero si al momento de llenar datos en la tabla, estos superan el tamaño del JTable (superan el numero de filas que el JTable esta mostrando), no podremos visualizarlos. Para ello necesitamos tener las barras de desplazamiento horizontal y vertical (JScrollPanel). Esto se consigue creando un JSCrollPanel y agregando a este el JTable que ya tenemos creado. Nuestro código queda de la siguiente manera:
jScrollPane1 = new javax.swing.JScrollPane();
jTableDatos = new javax.swing.JTable();
jTableDatos.setModel(new javax.swing.table.DefaultTableModel(
new Object [][]
{
},
new String []
{
"D.N.I", "Apellido", "Nombre"
}
));
jScrollPane1.setViewportView(jTableDatos);
Y listo, ya tenemos creado nuestra tabla con barras de desplazamiento horizontal y vertical.
Sin embargo, todo esto nos lo podemos ahorrar simplemente arrastrando el componente JTable de la lista de componentes del IDE NetBeans, pero siempre es bueno saber de donde es que vienen las cosas.