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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? tablesorter.java

?? 一個java與數據庫連接的好例子
?? JAVA
字號:
/* * @(#)TableSorter.java	1.14 04/07/26 *  * Copyright (c) 2004 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: *  * -Redistribution of source code must retain the above copyright notice, this *  list of conditions and the following disclaimer. *  * -Redistribution 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, Inc. or the names of contributors may  * be used to endorse or promote products derived from this software without  * specific prior written permission. *  * This software is provided "AS IS," without a warranty of any kind. ALL  * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING * ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE * OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN MIDROSYSTEMS, INC. ("SUN") * AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE * AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS * DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST  * REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL,  * INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY  * OF LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE,  * EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. *  * You acknowledge that this software is not designed, licensed or intended * for use in the design, construction, operation or maintenance of any * nuclear facility. *//* * @(#)TableSorter.java	1.14 04/07/26 *//** * A sorter for TableModels. The sorter has a model (conforming to TableModel)  * and itself implements TableModel. TableSorter does not store or copy  * the data in the TableModel, instead it maintains an array of  * integers which it keeps the same size as the number of rows in its  * model. When the model changes it notifies the sorter that something  * has changed eg. "rowsAdded" so that its internal array of integers  * can be reallocated. As requests are made of the sorter (like  * getValueAt(row, col) it redirects them to its model via the mapping  * array. That way the TableSorter appears to hold another copy of the table  * with the rows in a different order. The sorting algorthm used is stable  * which means that it does not move around rows when its comparison  * function returns 0 to denote that they are equivalent.  * * @version 1.14 07/26/04 * @author Philip Milne */package test;import java.util.*;import javax.swing.table.TableModel;import javax.swing.event.TableModelEvent;// Imports for picking up mouse events from the JTable. import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import java.awt.event.InputEvent;import javax.swing.JTable;import javax.swing.table.JTableHeader;import javax.swing.table.TableColumn;import javax.swing.table.TableColumnModel;public class TableSorter extends TableMap{    int             indexes[];    Vector          sortingColumns = new Vector();    boolean         ascending = true;    int compares;    public TableSorter()    {        indexes = new int[0]; // For consistency.            }    public TableSorter(TableModel model)    {        setModel(model);    }    public void setModel(TableModel model) {        super.setModel(model);         reallocateIndexes();     }    public int compareRowsByColumn(int row1, int row2, int column)    {        Class type = model.getColumnClass(column);        TableModel data = model;        // Check for nulls        Object o1 = data.getValueAt(row1, column);        Object o2 = data.getValueAt(row2, column);         // If both values are null return 0        if (o1 == null && o2 == null) {            return 0;         }        else if (o1 == null) { // Define null less than everything.             return -1;         }         else if (o2 == null) {             return 1;         }/* We copy all returned values from the getValue call in casean optimised model is reusing one object to return many values.The Number subclasses in the JDK are immutable and so will not be used in this way but other subclasses of Number might want to do this to save space and avoid unnecessary heap allocation. */        if (type.getSuperclass() == java.lang.Number.class)            {                Number n1 = (Number)data.getValueAt(row1, column);                double d1 = n1.doubleValue();                Number n2 = (Number)data.getValueAt(row2, column);                double d2 = n2.doubleValue();                if (d1 < d2)                    return -1;                else if (d1 > d2)                    return 1;                else                    return 0;            }        else if (type == java.util.Date.class)            {                Date d1 = (Date)data.getValueAt(row1, column);                long n1 = d1.getTime();                Date d2 = (Date)data.getValueAt(row2, column);                long n2 = d2.getTime();                if (n1 < n2)                    return -1;                else if (n1 > n2)                    return 1;                else return 0;            }        else if (type == String.class)            {                String s1 = (String)data.getValueAt(row1, column);                String s2    = (String)data.getValueAt(row2, column);                int result = s1.compareTo(s2);                if (result < 0)                    return -1;                else if (result > 0)                    return 1;                else return 0;            }        else if (type == Boolean.class)            {                Boolean bool1 = (Boolean)data.getValueAt(row1, column);                boolean b1 = bool1.booleanValue();                Boolean bool2 = (Boolean)data.getValueAt(row2, column);                boolean b2 = bool2.booleanValue();                if (b1 == b2)                    return 0;                else if (b1) // Define false < true                    return 1;                else                    return -1;            }        else            {                Object v1 = data.getValueAt(row1, column);                String s1 = v1.toString();                Object v2 = data.getValueAt(row2, column);                String s2 = v2.toString();                int result = s1.compareTo(s2);                if (result < 0)                    return -1;                else if (result > 0)                    return 1;                else return 0;            }    }    public int compare(int row1, int row2)    {        compares++;        for(int level = 0; level < sortingColumns.size(); level++)            {                Integer column = (Integer)sortingColumns.elementAt(level);                int result = compareRowsByColumn(row1, row2, column.intValue());                if (result != 0)                    return ascending ? result : -result;            }        return 0;    }    public void  reallocateIndexes()    {        int rowCount = model.getRowCount();        // Set up a new array of indexes with the right number of elements        // for the new data model.        indexes = new int[rowCount];        // Initialise with the identity mapping.        for(int row = 0; row < rowCount; row++)            indexes[row] = row;    }    public void tableChanged(TableModelEvent e)    {	System.out.println("Sorter: tableChanged");         reallocateIndexes();        super.tableChanged(e);    }    public void checkModel()    {        if (indexes.length != model.getRowCount()) {            System.err.println("Sorter not informed of a change in model.");        }    }    public void  sort(Object sender)    {        checkModel();        compares = 0;        // n2sort();        // qsort(0, indexes.length-1);        shuttlesort((int[])indexes.clone(), indexes, 0, indexes.length);        System.out.println("Compares: "+compares);    }    public void n2sort() {        for(int i = 0; i < getRowCount(); i++) {            for(int j = i+1; j < getRowCount(); j++) {                if (compare(indexes[i], indexes[j]) == -1) {                    swap(i, j);                }            }        }    }    // This is a home-grown implementation which we have not had time    // to research - it may perform poorly in some circumstances. It    // requires twice the space of an in-place algorithm and makes    // NlogN assigments shuttling the values between the two    // arrays. The number of compares appears to vary between N-1 and    // NlogN depending on the initial order but the main reason for    // using it here is that, unlike qsort, it is stable.    public void shuttlesort(int from[], int to[], int low, int high) {        if (high - low < 2) {            return;        }        int middle = (low + high)/2;        shuttlesort(to, from, low, middle);        shuttlesort(to, from, middle, high);        int p = low;        int q = middle;        /* This is an optional short-cut; at each recursive call,        check to see if the elements in this subset are already        ordered.  If so, no further comparisons are needed; the        sub-array can just be copied.  The array must be copied rather        than assigned otherwise sister calls in the recursion might        get out of sinc.  When the number of elements is three they        are partitioned so that the first set, [low, mid), has one        element and and the second, [mid, high), has two. We skip the        optimisation when the number of elements is three or less as        the first compare in the normal merge will produce the same        sequence of steps. This optimisation seems to be worthwhile        for partially ordered lists but some analysis is needed to        find out how the performance drops to Nlog(N) as the initial        order diminishes - it may drop very quickly.  */        if (high - low >= 4 && compare(from[middle-1], from[middle]) <= 0) {            for (int i = low; i < high; i++) {                to[i] = from[i];            }            return;        }        // A normal merge.         for(int i = low; i < high; i++) {            if (q >= high || (p < middle && compare(from[p], from[q]) <= 0)) {                to[i] = from[p++];            }            else {                to[i] = from[q++];            }        }    }    public void swap(int i, int j) {        int tmp = indexes[i];        indexes[i] = indexes[j];        indexes[j] = tmp;    }    // The mapping only affects the contents of the data rows.    // Pass all requests to these rows through the mapping array: "indexes".    public Object getValueAt(int aRow, int aColumn)    {        checkModel();        return model.getValueAt(indexes[aRow], aColumn);    }    public void setValueAt(Object aValue, int aRow, int aColumn)    {        checkModel();        model.setValueAt(aValue, indexes[aRow], aColumn);    }    public void sortByColumn(int column) {        sortByColumn(column, true);    }    public void sortByColumn(int column, boolean ascending) {        this.ascending = ascending;        sortingColumns.removeAllElements();        sortingColumns.addElement(new Integer(column));        sort(this);        super.tableChanged(new TableModelEvent(this));     }    // There is no-where else to put this.     // Add a mouse listener to the Table to trigger a table sort     // when a column heading is clicked in the JTable.     public void addMouseListenerToHeaderInTable(JTable table) {         final TableSorter sorter = this;         final JTable tableView = table;         tableView.setColumnSelectionAllowed(false);         MouseAdapter listMouseListener = new MouseAdapter() {            public void mouseClicked(MouseEvent e) {                TableColumnModel columnModel = tableView.getColumnModel();                int viewColumn = columnModel.getColumnIndexAtX(e.getX());                 int column = tableView.convertColumnIndexToModel(viewColumn);                 if(e.getClickCount() == 1 && column != -1) {                    System.out.println("Sorting ...");                     int shiftPressed = e.getModifiers()&InputEvent.SHIFT_MASK;                     boolean ascending = (shiftPressed == 0);                     sorter.sortByColumn(column, ascending);                 }             }         };        JTableHeader th = tableView.getTableHeader();         th.addMouseListener(listMouseListener);     }}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美探花视频资源| 亚洲女爱视频在线| 99久久国产综合精品色伊| 亚洲精品水蜜桃| 精品蜜桃在线看| 91一区二区三区在线播放| 久久精品国产亚洲a| 亚洲精品视频一区| 久久精品欧美日韩精品| 在线不卡免费av| 欧洲一区二区三区免费视频| 国产精品白丝av| 美女视频黄频大全不卡视频在线播放| 国产亲近乱来精品视频| 欧美一区二区三区在线看| 一本色道久久综合亚洲aⅴ蜜桃| 精品一区二区三区免费毛片爱| 亚洲国产精品久久久男人的天堂| 欧美激情一区二区在线| 26uuu精品一区二区| 91.麻豆视频| 精品视频一区二区不卡| 91影院在线免费观看| 国产99久久久久久免费看农村| 精品一区二区在线播放| 石原莉奈一区二区三区在线观看| 亚洲精品国产精华液| 国产精品久久福利| 欧美国产精品专区| 久久精品人人做| 久久综合色综合88| 久久久综合激的五月天| 欧美成人乱码一区二区三区| 欧美一区二区二区| 日韩一区二区三区高清免费看看| 91精品国产欧美一区二区| 欧美日韩一级片在线观看| 欧美无乱码久久久免费午夜一区| 色噜噜偷拍精品综合在线| 色就色 综合激情| 91极品美女在线| 在线观看区一区二| 欧美日韩国产首页| 在线不卡免费欧美| 精品伦理精品一区| 国产午夜精品理论片a级大结局| 久久久91精品国产一区二区精品| 欧美国产精品一区二区| 国产精品理论在线观看| 亚洲美女少妇撒尿| 午夜精品一区二区三区三上悠亚| 热久久国产精品| 久久国产福利国产秒拍| 国产一区二区福利| 成人动漫一区二区| 色诱亚洲精品久久久久久| 欧洲国内综合视频| 日韩一区二区免费在线电影| 久久九九久精品国产免费直播| 国产精品久久久久天堂| 亚洲精品日日夜夜| 日本中文字幕不卡| 国产在线精品免费av| 不卡视频免费播放| 欧美视频你懂的| 日韩精品一区二| 欧美激情综合在线| 亚洲一区在线视频| 黄色精品一二区| av不卡在线观看| 欧美丰满高潮xxxx喷水动漫| 久久嫩草精品久久久精品一| 日韩理论在线观看| 欧美在线观看视频在线| 日韩精品一区在线观看| 中文字幕一区二区三区视频| 一区二区三区在线免费观看| 免费在线观看视频一区| 成人av电影免费观看| 欧美日韩一区二区三区四区| 久久婷婷综合激情| 洋洋成人永久网站入口| 国产综合久久久久久久久久久久| 91在线看国产| 欧美videossexotv100| 最好看的中文字幕久久| 美女精品一区二区| 91麻豆国产在线观看| 精品国产一区久久| 亚洲在线观看免费视频| 国产高清亚洲一区| 欧美老女人在线| 亚洲欧美综合色| 久久99精品久久只有精品| 欧美在线不卡一区| 国产精品视频在线看| 免费成人在线播放| 欧美亚洲一区二区在线观看| 国产清纯白嫩初高生在线观看91| 日韩电影在线一区二区三区| 99视频精品在线| 国产午夜精品久久| 日本美女视频一区二区| 色美美综合视频| 国产日产欧美精品一区二区三区| 日本三级韩国三级欧美三级| 欧美在线观看视频一区二区三区| 欧美国产日韩亚洲一区| 国内外成人在线| 欧美一区二区三区在线观看| 亚洲一区二区三区美女| proumb性欧美在线观看| 久久久久久影视| 狠狠色综合日日| 日韩三区在线观看| 五月婷婷欧美视频| 欧美优质美女网站| 亚洲欧美日韩在线| 91在线一区二区| 国产精品高潮呻吟久久| 国产成人免费av在线| 久久亚区不卡日本| 韩国精品主播一区二区在线观看 | 韩日欧美一区二区三区| 在线播放日韩导航| 午夜精品久久一牛影视| 欧美日韩中文精品| 五月激情综合色| 欧美欧美午夜aⅴ在线观看| 一区二区高清在线| 欧美影院午夜播放| 亚洲国产成人91porn| 欧美午夜电影一区| 天堂蜜桃一区二区三区 | 日韩一级完整毛片| 天天av天天翘天天综合网色鬼国产| 91麻豆高清视频| 亚洲综合色区另类av| 欧美三级三级三级| 婷婷综合久久一区二区三区| 欧美日本视频在线| 蜜桃在线一区二区三区| 日韩久久久精品| 国产精品18久久久久久久久久久久| 国产亚洲精品超碰| 成人av免费观看| 亚洲欧美日韩国产一区二区三区| 色偷偷成人一区二区三区91 | 一区二区三区色| 欧美亚洲综合久久| 麻豆精品在线观看| 久久婷婷久久一区二区三区| 大白屁股一区二区视频| 亚洲欧美偷拍三级| 欧美精品 国产精品| 老司机精品视频在线| 久久综合狠狠综合久久综合88 | 在线精品亚洲一区二区不卡| 一区二区三区中文在线| 7777精品久久久大香线蕉| 久久99久久精品| 亚洲图片激情小说| 欧美人伦禁忌dvd放荡欲情| 久久精品理论片| 亚洲国产精品精华液2区45| 一本久久a久久免费精品不卡| 亚洲亚洲人成综合网络| 日韩精品一区在线| 99久久99久久精品免费观看| 婷婷成人激情在线网| 久久综合久久综合九色| 色狠狠色噜噜噜综合网| 老司机精品视频在线| 国产精品国产馆在线真实露脸| 欧美午夜精品久久久久久孕妇| 麻豆精品一区二区三区| 亚洲色图在线视频| 日韩午夜在线影院| jvid福利写真一区二区三区| 午夜久久久久久久久| 国产免费观看久久| 欧美日韩视频不卡| 成人中文字幕合集| 婷婷开心久久网| 国产精品国产三级国产普通话99| 欧美日韩国产精品成人| 成人动漫精品一区二区| 理论电影国产精品| 一区二区理论电影在线观看| 精品剧情v国产在线观看在线| 色综合久久中文综合久久97| 国产在线精品一区二区| 亚洲 欧美综合在线网络| 中文字幕成人av| 日韩欧美中文字幕制服| 91成人在线观看喷潮| 国产成人在线视频免费播放| 人人爽香蕉精品| 亚洲一级二级三级在线免费观看| 国产片一区二区|