tags:

views:

2890

answers:

3

We have a simple project where we read data from a socket and we want to populate a table with the coming data, but we can't find a way to add rows to a yet created JTable object, we can only find how to add rows at creation time of the table.

Is it possible to add rows dynamically to a JTable, or there is a better alternative object to deal with this way of showing data?

EDIT: Thanks a lot for your answers.

All three of them look very promising, but I have to choose only one and I think the best is Guillaume's.

+5  A: 

Once you start dynamically adding and removing elements from a JTable, you really need to start using a TableModel.

See the Java Tutorial for more details.

Paul Tomblin
+6  A: 

You should create a custom TableModel. A JTable doesn't actually store the rows, it always delegates that to a TableModel. To help you implementing it, you should make use of AbstractTableModel. Don't forget to call fireTableRowsInserted() every time you add rows. For better performances if you add a lot of rows, try to batch the updates and add many rows at a time.

Guillaume
+4  A: 

If you use the default table model for a JTable then you can add rows with following code

 if ( dest+1 < table.getRowCount()-1 )
    ( (DefaultTableModel) table.getModel() ).insertRow(dest+1, getValuesForNewRow());
  else
    ( (DefaultTableModel) table.getModel() ).addRow(getValuesForNewRow());
Peter
It's best to just keep hold of the DefaultTableModel before passing it to the JTable constructor. Then you don't need to touch the JTable or do any casting.
Tom Hawtin - tackline