title: How to get newly updated data in a cell in a DefaultTableModel
body: <p>I create a table from DefaultTableModel, and then I use table.getModel().setValueAt(value,row,col) to add the 1st value in a cell. However, when I click the mouse on that cell and change the data inside to the 2nd value. and then I get that value back by getValueAt(row,col), it always returns that first value even though on the table the 2nd value is displayed in the cell. What am I wrong?</p>
  
  <p>Hope you understand my messy idea.</p>
  
  <p>Thanks a lot!
  //////////////</p>
  
  <p>Thank you for your answer, I have copied the code from the link you gave me and run it. I have a test like this: I modify value at the Cell(0,3) and then try  getting that value out (by click the okButton) But the value is the old, NOT the new one?</p>
  
  <p>Here is the code :</p>
  
  <pre><code>package DialogExample;
  
  
  import javax.swing.JButton;
  import javax.swing.JFrame;
  import javax.swing.JPanel;
  import javax.swing.JScrollPane;
  import javax.swing.JTable;
  import javax.swing.event.TableModelEvent;
  import javax.swing.event.TableModelListener;
  import javax.swing.table.TableModel;
  
  import java.awt.Dimension;
  import java.awt.GridLayout;
  import java.awt.event.ActionEvent;
  import java.awt.event.ActionListener;
  import java.awt.event.MouseAdapter;
  import java.awt.event.MouseEvent;
  
  public class SimpleTableDemo extends JPanel implements TableModelListener {
  private boolean DEBUG = false;
   JTable table;
   JButton okButton;
  
  public JButton getOkButton() {
      okButton = new JButton("OK");
      okButton.addActionListener(new ActionListener() {
  
          @Override //// modify value at the Cell(0,3) and then get that value out. 
          /// the value is the old, NOT the new one?????
          public void actionPerformed(ActionEvent arg0) {
              int i = (Integer) table.getModel().getValueAt(0, 3);
              System.out.print(i);
          }
      });
      return okButton;
  }
  
  public SimpleTableDemo() {
      super(new GridLayout(1, 0));
  
  
      String[] columnNames = { "First Name", "Last Name", "Sport",
              "# of Years", "Vegetarian" };
  
      Object[][] data = {
              { "Kathy", "Smith", "Snowboarding", new Integer(5),
                      new Boolean(false) },
              { "John", "Doe", "Rowing", new Integer(3), new Boolean(true) },
              { "Sue", "Black", "Knitting", new Integer(2),
                      new Boolean(false) },
              { "Jane", "White", "Speed reading", new Integer(20),
                      new Boolean(true) },
              { "Joe", "Brown", "Pool", new Integer(10), new Boolean(false) } };
  
      table = new JTable(data, columnNames);
      table.setPreferredScrollableViewportSize(new Dimension(500, 70));
      table.setFillsViewportHeight(true);
  
      if (DEBUG) {
          table.addMouseListener(new MouseAdapter() {
              public void mouseClicked(MouseEvent e) {
                  printDebugData(table);
              }
          });
      }
  
      // Create the scroll pane and add the table to it.
      JScrollPane scrollPane = new JScrollPane(table);
  
      // Add the scroll pane to this panel.
      add(scrollPane);
      add(getOkButton());
  }
  
  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);
  
      // Do something with the data...
  }
  
  private void printDebugData(JTable table) {
      int numRows = table.getRowCount();
      int numCols = table.getColumnCount();
      javax.swing.table.TableModel model = table.getModel();
  
      System.out.println("Value of data: ");
      for (int i = 0; i &lt; numRows; i++) {
          System.out.print("    row " + i + ":");
          for (int j = 0; j &lt; numCols; j++) {
              System.out.print("  " + model.getValueAt(i, j));
          }
          System.out.println();
      }
      System.out.println("--------------------------");
  }
  
  /**
   * Create the GUI and show it. For thread safety, this method should be
   * invoked from the event-dispatching thread.
   */
  private static void createAndShowGUI() {
      // Create and set up the window.
      JFrame frame = new JFrame("SimpleTableDemo");
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  
      // Create and set up the content pane.
      SimpleTableDemo newContentPane = new SimpleTableDemo();
      newContentPane.setOpaque(true); // content panes must be opaque
      frame.setContentPane(newContentPane);
  
      // Display the window.
      frame.pack();
      frame.setVisible(true);
  }
  
  public static void main(String[] args) {
      // Schedule a job for the event-dispatching thread:
      // creating and showing this application's GUI.
      javax.swing.SwingUtilities.invokeLater(new Runnable() {
          public void run() {
              createAndShowGUI();
          }
      });
  }
  </code></pre>
  
  <p>}</p>