001 package nl.cwi.sen1.visplugin.table.model; 002 003 import java.awt.event.MouseAdapter; 004 import java.awt.event.MouseEvent; 005 import javax.swing.table.JTableHeader; 006 007 /** 008 * Header listener, class which tranforms the header item to buttons. Also 009 * listenens to the button events and redirects them. 010 * 011 * @author Anton Gerdessen 012 * @date 12-03-2007 013 */ 014 015 public class HeaderListener extends MouseAdapter { 016 017 JTableHeader header; 018 SortButtonRenderer renderer; 019 020 /** 021 * Constructor 022 * 023 * @param header The header to listen to 024 * @param renderer The rededer to which the incoming events are directed 025 * @author Anton Gerdessen 026 * @date 12-03-2007 027 */ 028 public HeaderListener(JTableHeader header, SortButtonRenderer renderer) { 029 this.header = header; 030 this.renderer = renderer; 031 } 032 033 /** 034 * Handle the incoming mouse event from the header button. 035 * repaint the header with the sort indication and sort the column. 036 * 037 * @param event mousePressed event from the header 038 * @author Anton Gerdessen 039 * @date 12-03-2007 040 */ 041 public void mousePressed(MouseEvent event) { 042 // Determine on which column the sort will be based. 043 int coloumToSort = header.columnAtPoint(event.getPoint()); 044 int sortCol = header.getTable().convertColumnIndexToModel(coloumToSort); 045 renderer.setSelectedColumn(coloumToSort); 046 header.repaint(); 047 048 // Determine the sort order and sort the table based on the column. 049 boolean isAscent = false; 050 if (renderer.getState(coloumToSort) == SortButtonRenderer.ASC ) { 051 isAscent = true; 052 } 053 054 ((SortableTableModel) header.getTable().getModel()).sortByColumn( 055 sortCol, isAscent); 056 } 057 058 /** 059 * Handle the mouse released from the header button. 060 * Force a repaint to show the 'new' button. 061 * 062 * @param event mouseReleased event from the header 063 * @author Anton Gerdessen 064 * @date 12-03-2007 065 */ 066 public void mouseReleased(MouseEvent event) { 067 header.repaint(); 068 } 069 }