package com.ebenius;
import java.awt.BorderLayout;
import java.util.List;
import javax.swing.*;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import javax.swing.table.DefaultTableModel;
public class TableScrollTest {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
static void createAndShowGUI() {
final DefaultTableModel model = new DefaultTableModel(0, 2);
final JTable table = new JTable(model);
final SwingWorker<Void, Integer> sw = new SwingWorker<Void, Integer>() {
@SuppressWarnings("boxing")
@Override
protected Void doInBackground() throws Exception {
for (int i = 0; i < 1000; i++) {
Thread.sleep(200);
publish(i);
}
return null;
}
@Override
protected void process(List<Integer> chunks) {
for (int i : chunks) {
model.addRow(new Object[] { "", "" });
}
}
};
sw.execute();
model.addTableModelListener(new TableModelListener() {
public void tableChanged(TableModelEvent e) {
if (e.getType() == TableModelEvent.INSERT) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
table.scrollRectToVisible(table.getCellRect(
table.getRowCount() - 1, 0, true));
}
});
}
}
});
final JPanel contentPane = new JPanel(new BorderLayout(6, 6));
contentPane.add(new JScrollPane(table));
final JFrame f = new JFrame("Test Frame: TableScrollTest");
f.setContentPane(contentPane);
f.pack();
f.setLocationRelativeTo(null);
f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
f.setVisible(true);
}
}