package com.compomics.util.gui; import com.compomics.util.gui.tablemodels.SelfUpdatingTableModel; import java.awt.event.MouseWheelEvent; import java.awt.event.MouseWheelListener; import java.util.Timer; import java.util.TimerTask; import javax.swing.JTable; /** * MouseWheelListener for SelfUpdatingTableModels that supports scrolling in a * more efficient way. * * @author Harald Barsnes */ public class TableMouseWheelListener implements MouseWheelListener { /** * The table to be monitored. Must have a SelfUpdatingTableModel as the * table model. */ private JTable table; /** * The last time the a scrolling event was triggered. */ private long lastScrollEvent = System.currentTimeMillis(); /** * The time (in milliseconds) to wait after the last scrolling event before * checking if the user is done scrolling and if so update the table * content. */ private int scrollingTableUpdateDelay = 1500; /** * Constructor. * * @param table the table */ public TableMouseWheelListener(JTable table) { this.table = table; } @Override public void mouseWheelMoved(MouseWheelEvent e) { long now = System.currentTimeMillis(); ((SelfUpdatingTableModel) table.getModel()).setIsScrolling(true); table.revalidate(); table.repaint(); Timer timer = new Timer(); timer.schedule(new TimerTask() { @Override public void run() { long now = System.currentTimeMillis(); if (now - lastScrollEvent > (scrollingTableUpdateDelay - 700)) { ((SelfUpdatingTableModel) table.getModel()).setIsScrolling(false); table.revalidate(); table.repaint(); } } }, scrollingTableUpdateDelay); lastScrollEvent = now; } }