Netbeans y Jtable

Javier
03 de Febrero del 2009
Hola a todos.
Necesito un poco de ayuda a la hora de usar este componente en Netbeans 6.1
La cosa esta en que hago una consulta y quiero sacarla por una tabla. El problema llega en que el JTable es estático (es decir, le has de definir el numero de filas y columnas al principio, y luego no lo puedes modificar)
Mi intencion es hacer un JTable dinámico. Se que se necesita retocar el código pregenerado por Netbeans (algo del stemodel, o del DefaultTableModel), pero la cosa está en que he probado varias cosas y ninguna funciona.
Para intentar facilitar un poco las cosas, decir que el numero de columnas si es fijo, lo que quiero es que saque simplemente el numero de filas correspondiente a la consulta SQL.
Este es el codigo autogenerado. Supongo que tendré que tocar algo del setmodel o del defaultTableModel

private void initComponents() {

jScrollPane3 = new javax.swing.JScrollPane();
ListaTareas = new javax.swing.JTable();
txtListaTareas = new javax.swing.JLabel();
btCerrar = new javax.swing.JButton();

setTitle("Gestor de Información Personal (por Javier Blanquer)");
setBounds(new java.awt.Rectangle(150, 150, 0, 0));

ListaTareas.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
// {null, null},
// {null, null},
// {null, null},
// {null, null},
// {null, null},
// {null, null},
// {null, null} */
//
},
new String [] {
"Prioridad", "Descripción"
}
) {

Class[] types = new Class [] {
java.lang.Integer.class, java.lang.Object.class
};
boolean[] canEdit = new boolean [] {
false, false
};

public Class getColumnClass(int columnIndex) {
return types [columnIndex];
}

public boolean isCellEditable(int rowIndex, int columnIndex) {
return canEdit [columnIndex];
}
});
ListaTareas.setName("Tabla"); // NOI18N
jScrollPane3.setViewportView(ListaTareas);

txtListaTareas.setFont(new java.awt.Font("Tahoma", 1, 16));
txtListaTareas.setText("LISTA DE TAREAS");
txtListaTareas.setVerticalAlignment(javax.swing.SwingConstants.TOP);

btCerrar.setText("Cerrar");
btCerrar.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btCerrarActionPerformed(evt);
}
});

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addContainerGap()
.addComponent(jScrollPane3, javax.swing.GroupLayout.DEFAULT_SIZE, 466, Short.MAX_VALUE))
.addGroup(layout.createSequentialGroup()
.addGap(149, 149, 149)
.addComponent(txtListaTareas)
.addGap(144, 144, 144))
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addContainerGap(413, Short.MAX_VALUE)
.addComponent(btCerrar)))
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(txtListaTareas)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jScrollPane3, javax.swing.GroupLayout.PREFERRED_SIZE, 243, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(11, 11, 11)
.addComponent(btCerrar)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);

pack();
}// </editor-fold>

private void btCerrarActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
this.setVisible(false);
}

/**
* @param args the command line arguments
*/
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new Listar_Tareas().setVisible(true);
}
});
}

// Variables declaration - do not modify
private javax.swing.JTable ListaTareas;
private javax.swing.JButton btCerrar;
private javax.swing.JScrollPane jScrollPane3;
private javax.swing.JLabel txtListaTareas;
// End of variables declaration


Gracias, y espero ayudas/consejos/soluciones

lucita287
03 de Febrero del 2009
Saludos Javier

yo tuve tambien ese problema y lo resolvi de esta manera en el construtor abajo donde aparece initComponents();
modifique el modelo asi como te lo pongo abajo, y luego le agregue el modelo:

DefaultTableModel modtabla = new DefaultTableModel(
new Object [0][0],
new String [] {
"Numero", "Lexema", "Tipo"
}
);
Tabla.setModel(modtabla);

ahora para ingresar columnas lo hice de esta forma
pero siempre puedes rehacer el modelo.

public void insertarregistro(int numero, String lexema,String descripcion){
Object[] registro=new Object[]{
numero, lexema, descripcion};
modtabla.addRow(registro);
}

troquetreque
03 de Febrero del 2009
muchisimas gracias, llevaba toda la mañana intententando solucionarlo y lo que hacia es: donde pones tabal.setModel(modtabla); yo hacia tabla = new JTable(new DefaultDataModel()); y no funcionaba