/* The contents of this file are subject to the license and copyright terms
* detailed in the license directory at the root of the source tree (also
* available online at http://fedora-commons.org/license/).
*/
package org.fcrepo.swing.jtable;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.Vector;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.table.JTableHeader;
import javax.swing.table.TableColumnModel;
/**
* JSortTable.
*
* <p>NOTICE: Portions created by Claude Duguay are Copyright ©
* Claude Duguay, originally made available at
* http://www.fawcette.com/javapro/2002_08/magazine/columns/visualcomponents/
*
* @author Claude Duguay
* @author Chris Wilper
*/public class JSortTable
extends JTable
implements MouseListener {
private static final long serialVersionUID = 1L;
protected int sortedColumnIndex = -1;
protected boolean sortedColumnAscending = true;
public JSortTable() {
this(new DefaultSortTableModel());
}
public JSortTable(int rows, int cols) {
this(new DefaultSortTableModel(rows, cols));
}
public JSortTable(Object[][] data, Object[] names) {
this(new DefaultSortTableModel(data, names));
}
public JSortTable(Vector<Object> data, Vector<Object> names) {
this(new DefaultSortTableModel(data, names));
}
public JSortTable(SortTableModel model) {
super(model);
initSortHeader();
}
public JSortTable(SortTableModel model, TableColumnModel colModel) {
super(model, colModel);
initSortHeader();
}
public JSortTable(SortTableModel model,
TableColumnModel colModel,
ListSelectionModel selModel) {
super(model, colModel, selModel);
initSortHeader();
}
protected void initSortHeader() {
JTableHeader header = getTableHeader();
header.setDefaultRenderer(new SortHeaderRenderer());
header.addMouseListener(this);
}
public int getSortedColumnIndex() {
return sortedColumnIndex;
}
public boolean isSortedColumnAscending() {
return sortedColumnAscending;
}
public void mouseReleased(MouseEvent event) {
TableColumnModel colModel = getColumnModel();
int index = colModel.getColumnIndexAtX(event.getX());
int modelIndex = colModel.getColumn(index).getModelIndex();
SortTableModel model = (SortTableModel) getModel();
if (model.isSortable(modelIndex)) {
// toggle ascension, if already sorted
if (sortedColumnIndex == index) {
sortedColumnAscending = !sortedColumnAscending;
}
sortedColumnIndex = index;
model.sortColumn(modelIndex, sortedColumnAscending);
}
}
public void mousePressed(MouseEvent event) {
}
public void mouseClicked(MouseEvent event) {
}
public void mouseEntered(MouseEvent event) {
}
public void mouseExited(MouseEvent event) {
}
}