En mi aplicación utilizo una tabla java que es similar al ejemplo this. Mi problema es que cuando cambio el valor de una celda (incluso en el ejemplo anterior), el modelo de datos no se actualiza hasta que hago clic en una celda diferente. Incluso si hago clic en el área gris debajo de la tabla después de cambiar el valor de la celda, el modelo no cambiará. Creo que la razón es que las células se mantienen enfocadas hasta que haga clic en una celda diferente. ¿Cómo puedo evitar esto y actualizar el modelo sin hacer clic en la celda de la tabla? Gracias de antemanoLa actualización de JTable Cell no funciona
tengo editar el código de ejemplo anterior para reflejar el problema
public class JTableDemo extends JApplet {
private JTextArea txt = new JTextArea(4, 20);
// The TableModel controls all the data:
class DataModel extends AbstractTableModel {
Object[][] data = { { "one", "two", "three", "four" },
{ "five", "six", "seven", "eight" },
{ "nine", "ten", "eleven", "twelve" }, };
// Prints data when table changes:
class TML implements TableModelListener {
public void tableChanged(TableModelEvent e) {
txt.setText(""); // Clear it
for (int i = 0; i < data.length; i++) {
for (int j = 0; j < data[0].length; j++)
txt.append(data[i][j] + " ");
txt.append("\n");
}
}
}
public DataModel() {
addTableModelListener(new TML());
fireTableDataChanged();
}
public int getColumnCount() {
return data[0].length;
}
public int getRowCount() {
return data.length;
}
public Object getValueAt(int row, int col) {
return data[row][col];
}
public void setValueAt(Object val, int row, int col) {
data[row][col] = val;
System.out.println(val);
// Indicate the change has happened:
fireTableDataChanged();
}
public boolean isCellEditable(int row, int col) {
return true;
}
}
public void init() {
Container cp = getContentPane();
JTable table = new JTable(new DataModel());
cp.add(new JScrollPane(table));
cp.add(BorderLayout.SOUTH, txt);
}
public static void main(String[] args) {
run(new JTableDemo(), 350, 200);
}
public static void run(JApplet applet, int width, int height) {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(applet);
frame.setSize(width, height);
applet.init();
applet.start();
frame.setVisible(true);
}
}
Al ejecutar el ejemplo se puede ver el contenido de la tabla en el área de texto debajo de la mesa. Después de actualizar una celda, debería aparecer en el cuadro de texto a continuación. Pero el método 'setValueAt' no llamará hasta que haga clic en una celda diferente.
¿Puedes editar tu pregunta y agregar un [SSCCE] (http://sscce.org) que muestre el problema? –
parecida a SSCCE +1 – mKorbel