⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jxtableheader.java

📁 java实现浏览器等本地桌面的功能
💻 JAVA
字号:
/* * $Id: JXTableHeader.java,v 1.8 2005/10/12 11:26:55 kleopatra Exp $ * * Copyright 2004 Sun Microsystems, Inc., 4150 Network Circle, * Santa Clara, California 95054, U.S.A. All rights reserved. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. *  * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU * Lesser General Public License for more details. *  * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA */package org.jdesktop.swingx;import java.awt.event.MouseEvent;import javax.swing.JComponent;import javax.swing.JTable;import javax.swing.SwingUtilities;import javax.swing.event.MouseInputListener;import javax.swing.table.JTableHeader;import javax.swing.table.TableCellRenderer;import javax.swing.table.TableColumn;import javax.swing.table.TableColumnModel;import org.jdesktop.swingx.table.ColumnHeaderRenderer;/** * TableHeader with extended functionality if associated Table is of * type JXTable.<p> *  * The enhancements: * <ul> * <li> toggles sort of column on mouseClicked if table isSortable * <li> uses ColumnHeaderRenderer which can show the sort icon * <li> triggers column pack (== auto-resize to exactly fit the contents) *  on double-click in resize region. * </ul> *  * @author Jeanette Winzenburg */public class JXTableHeader extends JTableHeader {    public JXTableHeader() {        super();    }    public JXTableHeader(TableColumnModel columnModel) {        super(columnModel);    }    /**     * Sets the associated JTable. Enables enhanced header     * features if table is of type JXTable.<p>     *      * PENDING: who is responsible for synching the columnModel?     */    public void setTable(JTable table) {        super.setTable(table);//        setColumnModel(table.getColumnModel());        // the additional listening option makes sense only if the table        // actually is a JXTable        if (getXTable() != null) {            installHeaderListener();        } else {            uninstallHeaderListener();        }    }    public JXTable getXTable() {        if (!(getTable() instanceof JXTable))            return null;        return (JXTable) getTable();    }        public void updateUI() {        super.updateUI();        if (getDefaultRenderer() instanceof JComponent) {            ((JComponent) getDefaultRenderer()).updateUI();                 }    }    /**     * returns the (visible) view index for the given column     * or -1 if not visible or not contained in this header's     * columnModel.     *      *      * @param aColumn     * @return     */    private int getViewIndexForColumn(TableColumn aColumn) {        if (aColumn == null)            return -1;        TableColumnModel cm = getColumnModel();        for (int column = 0; column < cm.getColumnCount(); column++) {            if (cm.getColumn(column) == aColumn) {                return column;            }        }        return -1;    }    protected TableCellRenderer createDefaultRenderer() {        return ColumnHeaderRenderer.createColumnHeaderRenderer();    }    protected void installHeaderListener() {        if (headerListener == null) {            headerListener = new HeaderListener();            addMouseListener(headerListener);            addMouseMotionListener(headerListener);        }    }    protected void uninstallHeaderListener() {        if (headerListener != null) {            removeMouseListener(headerListener);            removeMouseMotionListener(headerListener);            headerListener = null;        }    }    private MouseInputListener headerListener;    private class HeaderListener implements MouseInputListener {        private TableColumn cachedResizingColumn;        public void mouseClicked(MouseEvent e) {            if (shouldIgnore(e)) {                return;            }            if (isInResizeRegion(e)) {                doResize(e);            } else {                doSort(e);            }        }        private boolean shouldIgnore(MouseEvent e) {            return !SwingUtilities.isLeftMouseButton(e)              || !table.isEnabled();        }        private void doSort(MouseEvent e) {            JXTable table = getXTable();            if (!table.isSortable() || (e.getClickCount() != 1))                return;            if ((e.getModifiersEx() & e.SHIFT_DOWN_MASK) == e.SHIFT_DOWN_MASK) {                table.resetSorter();            } else {                int column = columnAtPoint(e.getPoint());                if (column >= 0) {                    table.setSorter(column);                }                uncacheResizingColumn();            }            repaint();        }        private void doResize(MouseEvent e) {            if (e.getClickCount() != 2)                return;            int column = getViewIndexForColumn(cachedResizingColumn);            if (column >= 0) {                (getXTable()).packColumn(column, 5);            }            uncacheResizingColumn();        }        public void mouseReleased(MouseEvent e) {            cacheResizingColumn(e);        }        public void mousePressed(MouseEvent e) {            cacheResizingColumn(e);        }        private void cacheResizingColumn(MouseEvent e) {            if (e.getClickCount() != 1)                return;            TableColumn column = getResizingColumn();            if (column != null) {                cachedResizingColumn = column;            }        }        private void uncacheResizingColumn() {            cachedResizingColumn = null;        }        private boolean isInResizeRegion(MouseEvent e) {            return cachedResizingColumn != null; // inResize;        }        public void mouseEntered(MouseEvent e) {        }        public void mouseExited(MouseEvent e) {            uncacheResizingColumn();        }        public void mouseDragged(MouseEvent e) {            uncacheResizingColumn();        }        public void mouseMoved(MouseEvent e) {        }    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -