1 43 44 package org.jfree.ui; 45 46 import java.awt.event.MouseEvent ; 47 import java.awt.event.MouseListener ; 48 import java.awt.event.MouseMotionListener ; 49 50 import javax.swing.table.JTableHeader ; 51 52 58 public class SortableTableHeaderListener implements MouseListener , MouseMotionListener { 59 60 61 private SortableTableModel model; 62 63 64 private SortButtonRenderer renderer; 65 66 67 private int sortColumnIndex; 68 69 75 public SortableTableHeaderListener(final SortableTableModel model, 76 final SortButtonRenderer renderer) { 77 this.model = model; 78 this.renderer = renderer; 79 } 80 81 86 public void setTableModel(final SortableTableModel model) { 87 this.model = model; 88 } 89 90 96 public void mousePressed(final MouseEvent e) { 97 98 final JTableHeader header = (JTableHeader ) e.getComponent(); 99 100 if (header.getResizingColumn() == null) { if (header.getDraggedDistance() < 1) { final int columnIndex = header.columnAtPoint(e.getPoint()); 103 final int modelColumnIndex 104 = header.getTable().convertColumnIndexToModel(columnIndex); 105 if (this.model.isSortable(modelColumnIndex)) { 106 this.sortColumnIndex = header.getTable().convertColumnIndexToModel(columnIndex); 107 this.renderer.setPressedColumn(this.sortColumnIndex); 108 header.repaint(); 109 if (header.getTable().isEditing()) { 110 header.getTable().getCellEditor().stopCellEditing(); 111 } 112 } 113 else { 114 this.sortColumnIndex = -1; 115 } 116 } 117 } 118 119 } 120 121 126 public void mouseDragged(final MouseEvent e) { 127 128 final JTableHeader header = (JTableHeader ) e.getComponent(); 129 130 if ((header.getDraggedDistance() > 0) || (header.getResizingColumn() != null)) { 131 this.renderer.setPressedColumn(-1); 132 this.sortColumnIndex = -1; 133 } 134 } 135 136 141 public void mouseEntered(final MouseEvent e) { 142 } 144 145 150 public void mouseClicked(final MouseEvent e) { 151 } 153 154 159 public void mouseMoved(final MouseEvent e) { 160 } 162 163 168 public void mouseExited(final MouseEvent e) { 169 } 171 172 177 public void mouseReleased(final MouseEvent e) { 178 179 final JTableHeader header = (JTableHeader ) e.getComponent(); 180 181 if (header.getResizingColumn() == null) { if (this.sortColumnIndex != -1) { 183 final SortableTableModel model = (SortableTableModel) header.getTable().getModel(); 184 final boolean ascending = !model.isAscending(); 185 model.setAscending(ascending); 186 model.sortByColumn(this.sortColumnIndex, ascending); 187 188 this.renderer.setPressedColumn(-1); header.repaint(); 190 } 191 } 192 } 193 194 } 195 | Popular Tags |