亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? tablesorter.java

?? java tutotrials or beginners
?? JAVA
?? 第 1 頁 / 共 2 頁
字號:
/* * Copyright (c) 1995 - 2008 Sun Microsystems, Inc.  All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * *   - Redistributions of source code must retain the above copyright *     notice, this list of conditions and the following disclaimer. * *   - Redistributions in binary form must reproduce the above copyright *     notice, this list of conditions and the following disclaimer in the *     documentation and/or other materials provided with the distribution. * *   - Neither the name of Sun Microsystems nor the names of its *     contributors may be used to endorse or promote products derived *     from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ package components;import java.awt.*;import java.awt.event.*;import java.util.*;import java.util.List;import javax.swing.*;import javax.swing.event.TableModelEvent;import javax.swing.event.TableModelListener;import javax.swing.table.*;/** * 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. * <p/> * 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. * <p/> * 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: * <ul> * <li> * 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). * <li> * 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}. * <li> * 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. * </ul> * <p/> * 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 {    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 COMPARABLE_COMAPRATOR = new Comparator() {        public int compare(Object o1, Object o2) {            return ((Comparable) o1).compareTo(o2);        }    };    public static final Comparator LEXICAL_COMPARATOR = new Comparator() {        public int compare(Object o1, Object o2) {            return o1.toString().compareTo(o2.toString());        }    };    private Row[] viewToModel;    private int[] modelToView;    private JTableHeader tableHeader;    private MouseListener mouseListener;    private TableModelListener tableModelListener;    private Map columnComparators = new HashMap();    private List sortingColumns = new ArrayList();    public TableSorter() {        this.mouseListener = new MouseHandler();        this.tableModelListener = new TableModelHandler();    }    public TableSorter(TableModel tableModel) {        this();        setTableModel(tableModel);    }    public TableSorter(TableModel tableModel, JTableHeader tableHeader) {        this();        setTableHeader(tableHeader);        setTableModel(tableModel);    }    private void clearSortingState() {        viewToModel = null;        modelToView = null;    }    public TableModel getTableModel() {        return tableModel;    }    public void setTableModel(TableModel tableModel) {        if (this.tableModel != null) {            this.tableModel.removeTableModelListener(tableModelListener);        }        this.tableModel = tableModel;        if (this.tableModel != null) {            this.tableModel.addTableModelListener(tableModelListener);        }        clearSortingState();        fireTableStructureChanged();    }    public JTableHeader getTableHeader() {        return tableHeader;    }    public void setTableHeader(JTableHeader tableHeader) {        if (this.tableHeader != null) {            this.tableHeader.removeMouseListener(mouseListener);            TableCellRenderer defaultRenderer = this.tableHeader.getDefaultRenderer();            if (defaultRenderer instanceof SortableHeaderRenderer) {                this.tableHeader.setDefaultRenderer(((SortableHeaderRenderer) defaultRenderer).tableCellRenderer);            }        }        this.tableHeader = tableHeader;        if (this.tableHeader != null) {            this.tableHeader.addMouseListener(mouseListener);            this.tableHeader.setDefaultRenderer(                    new SortableHeaderRenderer(this.tableHeader.getDefaultRenderer()));        }    }    public boolean isSorting() {        return sortingColumns.size() != 0;    }    private Directive getDirective(int column) {        for (int i = 0; i < sortingColumns.size(); i++) {            Directive directive = (Directive)sortingColumns.get(i);            if (directive.column == column) {                return directive;            }        }        return EMPTY_DIRECTIVE;    }    public int getSortingStatus(int column) {        return getDirective(column).direction;    }    private void sortingStatusChanged() {        clearSortingState();        fireTableDataChanged();        if (tableHeader != null) {            tableHeader.repaint();        }    }    public void setSortingStatus(int column, int status) {        Directive directive = getDirective(column);        if (directive != EMPTY_DIRECTIVE) {            sortingColumns.remove(directive);        }        if (status != NOT_SORTED) {            sortingColumns.add(new Directive(column, status));        }        sortingStatusChanged();    }    protected Icon getHeaderRendererIcon(int column, int size) {        Directive directive = getDirective(column);        if (directive == EMPTY_DIRECTIVE) {            return null;        }        return new Arrow(directive.direction == DESCENDING, size, sortingColumns.indexOf(directive));    }    private void cancelSorting() {        sortingColumns.clear();        sortingStatusChanged();    }    public void setColumnComparator(Class type, Comparator comparator) {        if (comparator == null) {            columnComparators.remove(type);        } else {            columnComparators.put(type, comparator);        }    }    protected Comparator getComparator(int column) {        Class columnType = tableModel.getColumnClass(column);        Comparator comparator = (Comparator) columnComparators.get(columnType);        if (comparator != null) {            return comparator;        }        if (Comparable.class.isAssignableFrom(columnType)) {            return COMPARABLE_COMAPRATOR;        }        return LEXICAL_COMPARATOR;    }    private Row[] getViewToModel() {        if (viewToModel == null) {            int tableModelRowCount = tableModel.getRowCount();            viewToModel = new Row[tableModelRowCount];            for (int row = 0; row < tableModelRowCount; row++) {

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美午夜一区二区三区免费大片| 91精品国产综合久久精品性色| 三级欧美韩日大片在线看| 精品剧情在线观看| 在线视频国内自拍亚洲视频| 国产经典欧美精品| 日韩精品三区四区| 亚洲另类在线一区| 中文字幕欧美日韩一区| 日韩欧美在线网站| 欧美在线一区二区三区| 成人综合在线视频| 国产呦精品一区二区三区网站| 性感美女极品91精品| 亚洲你懂的在线视频| 国产喷白浆一区二区三区| 91精品国产高清一区二区三区 | 亚洲一区二区五区| 日本一二三不卡| 精品福利在线导航| 91精品国产乱码| 欧美日韩国产精品自在自线| 91色综合久久久久婷婷| 国产寡妇亲子伦一区二区| 久久国产乱子精品免费女| 日韩综合小视频| 亚洲一区二区成人在线观看| 亚洲伦在线观看| 中文字幕在线不卡| 国产日韩欧美不卡在线| 国产欧美日韩中文久久| 精品电影一区二区| 亚洲精品一区二区在线观看| 欧美一级久久久久久久大片| 91精品国产综合久久蜜臀| 欧美精品一二三区| 欧美三级中文字幕在线观看| 欧美日韩视频在线观看一区二区三区| 色狠狠桃花综合| 日本精品一区二区三区高清| 在线一区二区三区四区五区| 欧美三级韩国三级日本三斤| 欧美日韩亚洲国产综合| 91精品国产乱码久久蜜臀| 日韩欧美一级在线播放| 精品入口麻豆88视频| 精品国产麻豆免费人成网站| 精品国产精品网麻豆系列| 久久久久久久久久久久电影| 久久综合中文字幕| 欧美极品xxx| 亚洲人成亚洲人成在线观看图片| 亚洲日本乱码在线观看| 亚洲一区电影777| 午夜激情一区二区| 国产综合色产在线精品| 成人av网址在线| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 一级女性全黄久久生活片免费| 一级做a爱片久久| 蜜臀av一区二区| 国产精品99久久久| 91在线视频网址| 欧美精品黑人性xxxx| 精品国内片67194| 国产精品久久久久久久蜜臀 | 国产精品原创巨作av| 成人免费毛片app| 在线看日韩精品电影| 欧美二区在线观看| 久久久久久久久久久久久久久99 | 国产在线精品不卡| 91丨porny丨国产入口| 欧美精品一二三区| 日本一区二区三级电影在线观看| 亚洲美女免费在线| 免费观看在线综合色| 风流少妇一区二区| 欧美日韩亚洲综合在线| 久久先锋影音av| 亚洲综合色成人| 国产在线不卡一区| 欧美性受极品xxxx喷水| 久久综合久久99| 亚洲成人激情自拍| 国产一区二区在线观看免费 | 欧美视频你懂的| 久久精品在线免费观看| 亚洲综合精品久久| 风间由美性色一区二区三区| 欧美区在线观看| 国产精品久久久久毛片软件| 看国产成人h片视频| 色综合久久久久综合体| 久久奇米777| 日韩av网站在线观看| 99久久er热在这里只有精品15| 欧美一二三区精品| 一区二区三区免费网站| 国产成人自拍在线| 欧美一区二区三区免费大片| 亚洲男帅同性gay1069| 国产在线一区二区| 在线播放亚洲一区| 亚洲免费观看高清| 国产成人av电影在线| 日韩免费高清av| 亚洲成人免费在线| 99精品久久只有精品| 久久久影视传媒| 奇米777欧美一区二区| 在线免费观看日本一区| 成人免费在线视频观看| 国产999精品久久久久久| 欧美www视频| 日日摸夜夜添夜夜添精品视频| 色悠悠亚洲一区二区| 国产精品久久久久天堂| 国产成人无遮挡在线视频| 欧美成人r级一区二区三区| 日韩精品一二三区| 欧洲精品视频在线观看| 亚洲黄色性网站| 北条麻妃一区二区三区| 欧美激情一区二区三区全黄 | 91麻豆蜜桃一区二区三区| 国产免费观看久久| 国产suv精品一区二区6| 欧美激情一区二区三区四区| 粉嫩久久99精品久久久久久夜| 久久亚洲精品国产精品紫薇| 国产在线麻豆精品观看| 精品成人在线观看| 国产一区二区视频在线| 久久久久久久综合狠狠综合| 国产综合久久久久影院| 国产欧美日韩在线视频| 成人性视频网站| 国产精品嫩草99a| av亚洲精华国产精华精| 自拍偷拍亚洲综合| 欧美在线制服丝袜| 三级成人在线视频| 日韩美女天天操| 国产成人综合精品三级| 国产精品久久久久久久久图文区| av影院午夜一区| 一区二区三区精品久久久| 欧美在线看片a免费观看| 亚洲电影一区二区| 日韩一区二区在线播放| 国产在线视视频有精品| 中文字幕精品三区| 91蜜桃婷婷狠狠久久综合9色| 欧美亚洲一区二区在线| 国产午夜精品久久| 欧美日韩亚洲综合| 91极品美女在线| 国产99久久久久久免费看农村| 亚洲成av人片一区二区| 亚洲色图色小说| 国产欧美日韩在线视频| 日韩精品资源二区在线| 亚洲精品一二三| 成人免费视频一区| 亚洲蜜臀av乱码久久精品 | 大陆成人av片| 亚洲欧美色图小说| 欧美伦理电影网| 国产真实精品久久二三区| 日韩理论电影院| 制服丝袜av成人在线看| 丁香天五香天堂综合| 亚洲一区视频在线观看视频| 精品国产亚洲在线| 99国产精品久久久久| 日韩av二区在线播放| 免费成人美女在线观看.| 久久久久久久久久久久电影| 色天使色偷偷av一区二区| 免费看日韩精品| 中文字幕在线观看一区| 制服丝袜在线91| 99精品久久免费看蜜臀剧情介绍| 美女网站一区二区| 亚洲人亚洲人成电影网站色| 欧美成人性战久久| 欧美在线观看视频一区二区三区| 国产专区欧美精品| 水蜜桃久久夜色精品一区的特点| 中文天堂在线一区| 欧美一区二区视频网站| 91小视频免费看| 国产一区二区三区免费看| 亚洲高清不卡在线| 亚洲欧洲另类国产综合| 久久免费精品国产久精品久久久久| 在线观看一区不卡| av亚洲精华国产精华精华 | 成人免费视频免费观看|