Java tutorial
import java.awt.BorderLayout; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.table.AbstractTableModel; public class MainClass extends JFrame { public MainClass() { super("Dynamic Data Test"); setSize(300, 200); setDefaultCloseOperation(EXIT_ON_CLOSE); JTable jt = new JTable(new MarketDataModel(5)); JScrollPane jsp = new JScrollPane(jt); getContentPane().add(jsp, BorderLayout.CENTER); } public static void main(String args[]) { MainClass mt = new MainClass(); mt.setVisible(true); } } class MarketDataModel extends AbstractTableModel implements Runnable { Thread runner; public MarketDataModel(int initialDelay) { Thread runner = new Thread(this); runner.start(); } double[] data = new double[] { 1, 2, 3, 4, 5 }; String[] headers = { "Symbol", "Price", "Change", "Last updated" }; public int getRowCount() { return 1; } public int getColumnCount() { return headers.length; } public String getColumnName(int c) { return headers[c]; } public Object getValueAt(int r, int c) { return data[c]; } public void updateStocks() { for (int i = 0; i < data.length; i++) { data[i] = Math.random(); } } public void run() { while (true) { updateStocks(); fireTableRowsUpdated(0, data.length - 1); try { Thread.sleep(1000); } catch (InterruptedException ie) { } } } }