Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance. Project price only 1 $
You can buy this project and download/modify it how often you want.
/*
* MCS Media Computer Software Copyright (c) 2006 by MCS
* -------------------------------------- Created on 16.08.2006 by w.klaas
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package de.mcs.jmeasurement.gui;
import java.awt.Color;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import javax.swing.Icon;
import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.JTableHeader;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumnModel;
import javax.swing.table.TableModel;
/**
* TableSorter is a decorator for TableModels; adding sorting functionality to a
* supplied TableModel. TableSorter does not store or copy the data in its
* TableModel; instead it maintains a map from the row indexes of the view to
* the row indexes of the model. As requests are made of the sorter (like
* getValueAt(row, col)) they are passed to the underlying model after the row
* numbers have been translated via the internal mapping array. This way, the
* TableSorter appears to hold another copy of the table with the rows in a
* different order. TableSorter registers itself as a listener to the
* underlying model, just as the JTable itself would. Events recieved from the
* model are examined, sometimes manipulated (typically widened), and then
* passed on to the TableSorter's listeners (typically the JTable). If a change
* to the model has invalidated the order of TableSorter's rows, a note of this
* is made and the sorter will resort the rows the next time a value is
* requested. When the tableHeader property is set, either by using the
* setTableHeader() method or the two argument constructor, the table header may
* be used as a complete UI for TableSorter. The default renderer of the
* tableHeader is decorated with a renderer that indicates the sorting status of
* each column. In addition, a mouse listener is installed with the following
* behavior:
*
*
Mouse-click: Clears the sorting status of all other columns and advances
* the sorting status of that column through three values: {NOT_SORTED,
* ASCENDING, DESCENDING} (then back to NOT_SORTED again).
*
SHIFT-mouse-click: Clears the sorting status of all other columns and
* cycles the sorting status of the column through the same three values, in the
* opposite order: {NOT_SORTED, DESCENDING, ASCENDING}.
*
CONTROL-mouse-click and CONTROL-SHIFT-mouse-click: as above except that
* the changes to the column do not cancel the statuses of columns that are
* already sorting - giving a way to initiate a compound sort.
*
* This is a long overdue rewrite of a class of the same name that first
* appeared in the swing table demos in 1997.
*
* @author Philip Milne
* @author Brendon McLean
* @author Dan van Enckevort
* @author Parwinder Sekhon
* @version 2.0 02/27/04
*/
public class TableSorter extends AbstractTableModel {
/**
*
*/
private static final long serialVersionUID = -2029168204352941768L;
protected TableModel tableModel;
public static final int DESCENDING = -1;
public static final int NOT_SORTED = 0;
public static final int ASCENDING = 1;
private static Directive EMPTY_DIRECTIVE = new Directive(-1, NOT_SORTED);
public static final Comparator