Zona HTML Zona Java Zona PHP Zona ASP Zona Bases de datos
-Foros de debate

Java (básico)
Lista de foros | Lista de mensajes de este foro

Privacidad: Recuerde que la información escrita en los foros de programación es 100% pública y que su ip será registrada asociada a su mensaje. Si encuentra un mensaje fuera de lugar, por favor, notifiquelo para su revisión y eliminación.

JTable
Enviado por gollum.mj el día 22 de julio de 2008

Hola, creo que por lo que he visto no es muy intuitiva la utilización de las JTable, porque todo el mundo tiene dudas, yo entre ellos.

Mi problema es el siguiente, necesito recibir en una clase la notificación del evento de que los datos de una celda fueron actualizados.

Lo que tengo implementado es lo siguiente

import javax.swing.table.AbstractTableModel;
import javax.swing.table.*;
import javax.swing.event.*;
import java.util.*;

public class MyTableModel extends AbstractTableModel {

final String[] columnNames;
final Object[][] data;


public MyTableModel(Object[][] datos,String[] colNames){
columnNames=colNames;
data=datos;
}

public int getColumnCount() {
return columnNames.length;
}

public int getRowCount() {
return data.length;
}

public String getColumnName(int col) {
return columnNames[col];
}

public Object getValueAt(int row, int col) {
return data[row][col];
}

/*

public Class getColumnClass(int c) {
return getValueAt(0, c).getClass();
}


public boolean isCellEditable(int row, int col) {
int count=getColumnCount();
if (count==4) {

switch(col) {
case 0:
return true;
//setValueAt("Nominal "+ row,row,col);
case 1:
if ((Boolean) getValueAt(row,1)){
setValueAt(new Boolean(true),row,2);
}
else {
setValueAt(new Boolean(false),row,2);
}
case 2:
if ((Boolean) getValueAt(row,2)){
setValueAt(new Boolean(true),row,1);
}
else {
setValueAt(new Boolean(false),row,1);
}
case 3:
return true;
default:
return false;
}
}
else{
return true;
}
}

public void setValueAt(Object value, int row, int col) {
data[row][col] = value;
fireTableCellUpdated(row, col);
// this.fireTableChanged(new TableModelEvent(this));
//this.fireTableDataChanged();
}


}

Este es mi modelo de la tabla, el cual funciona a la perfección, excepto porque no dispara los eventos o por ahí estoy haciendo mal algo.

En la clase que utiliza la JTable tengo lo siguiente:

public class ventana_recibo implements javax.swing.event.TableModelListener {

private void initComponents()
{

tableModel= new MyTableModel(
new Object [][] {
{"Nominal1", new Boolean(false),
new Boolean(false), new Integer(0)},
{"Nominal2", new Boolean(false),
new Boolean(false), new Integer(0)},
{"Nominal3",new Boolean(false),
new Boolean(false), new Integer(0)},
{"Nominal4", new Boolean(false),
new Boolean(false), new Integer(0)},
{"Nominal5", new Boolean(false),
new Boolean(false), new Integer(0)},
{"Nominal6", new Boolean(false),
new Boolean(false), new Integer(0)},
{"Nominal7", new Boolean(false),
new Boolean(false), new Integer(0)},
{"Nominal8", new Boolean(false),
new Boolean(false), new Integer(0)}
},

new String [] {"Concepto", "Días", "Horas", "$"});

tblNominal.setModel(tableModel);

tblNominal.addMouseListener(new java.awt.event.MouseAdapter() {
public void mousePressed(java.awt.event.MouseEvent evt) {
tblNominalMousePressed(evt);
}
});

tblNominal.getTableHeader().setReorderingAllowed(false);

tblNominal.setBounds(0,0,788,179);

tblNominal.getModel().addTableModelListener(this);

}

public void tableChanged(TableModelEvent e) {
int row = e.getFirstRow();
int column = e.getColumn();
TableModel model = (TableModel)e.getSource();
String columnName = model.getColumnName(column);
Object data = model.getValueAt(row, column);

javax.swing.JOptionPane.showConfirmDialog(null, data,"Test",0);
//...// Do something with the data...
}

}

La verdad que he probado todo lo que he encontrado, la idea es que al modificarse alguno de los campos que posee valores INT estos al ser importes actualicen un total que está en una etiqueta que obviamente no pertenece a la tabla.

Les agradezco su colaboración.

 
keylistener
Enviado por favrycio el día 22 de julio de 2008

//ANADES UN KEYLYSTENER A LA TABLA
this.jTablePaquetes.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyReleased(final java.awt.event.KeyEvent evt) {
keyRealeaseTabla(evt);
}
});



//IMPLEMENTAS EL KEYLISTENER
private void keyRealeaseTabla(final java.awt.event.KeyEvent evt) {
if(evt.getKeyCode()==KeyEvent.VK_TAB || evt.getKeyCode()==KeyEvent.VK_ENTER){
//aqui lo que quieres que haga
}
}

 
Re: keylistener
Enviado por gollum.mj el día 23 de julio de 2008

Claro, yo entiendo lo que proponés, pero quiero evitar tener que chequear eso, ya que también tendría que chequear el click del mouse, por si salen de la edición de la tabla con un click y demás listeners, cuando en realidad el código que estoy usando se supone que debería de funcionar, o por lo menos muchos lo ponene así en publicaciones. Igualmente gracias.

 

Re: keylistener
Enviado por gollum.mj el día 23 de julio de 2008

Quiero comunicarte que tu solución tampoco funciona. No debés de haber leído con precausión como funciona la tabla que trato de implementar.

 



Tienda
Patrocinados
 

Copyright © 1999-2006 Programación en castellano. Todos los derechos reservados.
Formulario de Contacto - Datos legales - Publicidad

Hospedaje web y servidores dedicados linux por Ferca Network