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

📄 basictableheaderui.java

📁 JAVA 所有包
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
/* * @(#)BasicTableHeaderUI.java	1.77 06/07/28 * * Copyright 2006 Sun Microsystems, Inc. All rights reserved. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */package javax.swing.plaf.basic;import java.awt.*;import java.awt.event.*;import java.util.*;import javax.swing.*;import javax.swing.event.*;import javax.swing.plaf.*;import javax.swing.table.*;import sun.swing.*;/** * BasicTableHeaderUI implementation * * @version 1.77 07/28/06 * @author Alan Chung * @author Philip Milne */public class BasicTableHeaderUI extends TableHeaderUI {    private static Cursor resizeCursor = Cursor.getPredefinedCursor(Cursor.E_RESIZE_CURSOR); //// Instance Variables//    /** The JTableHeader that is delegating the painting to this UI. */    protected JTableHeader header;    protected CellRendererPane rendererPane;    // Listeners that are attached to the JTable    protected MouseInputListener mouseInputListener;    // The column header over which the mouse currently is.    private int rolloverColumn = -1;        // The column that should be highlighted when the table header has the focus.    private int selectedColumnIndex = 0; // Read ONLY via getSelectedColumnIndex!    private static FocusListener focusListener = new FocusListener() {        public void focusGained(FocusEvent e) {            repaintHeader(e.getSource());        }                public void focusLost(FocusEvent e) {            repaintHeader(e.getSource());        }                private void repaintHeader(Object source) {            if (source instanceof JTableHeader) {                JTableHeader th = (JTableHeader)source;                BasicTableHeaderUI ui =                    (BasicTableHeaderUI)BasicLookAndFeel.                                        getUIOfType(th.getUI(),                                            BasicTableHeaderUI.class);                if (ui == null) {                    return;                }                th.repaint(th.getHeaderRect(ui.getSelectedColumnIndex()));            }        }    };        /**     * This inner class is marked &quot;public&quot; due to a compiler bug.     * This class should be treated as a &quot;protected&quot; inner class.     * Instantiate it only within subclasses of BasicTableUI.     */    public class MouseInputHandler implements MouseInputListener {        private int mouseXOffset; 	private Cursor otherCursor = resizeCursor;         public void mouseClicked(MouseEvent e) {            if (e.getClickCount() % 2 == 1 &&                    SwingUtilities.isLeftMouseButton(e)){                JTable table = header.getTable();                RowSorter sorter = table.getRowSorter();                if (sorter != null) {                    int columnIndex = header.columnAtPoint(e.getPoint());                    if (columnIndex != -1) {                        columnIndex = table.convertColumnIndexToModel(                                            columnIndex);                        sorter.toggleSortOrder(columnIndex);                    }                }            }        }        private TableColumn getResizingColumn(Point p) { 	    return getResizingColumn(p, header.columnAtPoint(p)); 	}        private TableColumn getResizingColumn(Point p, int column) {             if (column == -1) {                  return null;             }	    Rectangle r = header.getHeaderRect(column); 	    r.grow(-3, 0); 	    if (r.contains(p)) { 		return null; 	    }	    int midPoint = r.x + r.width/2; 	    int columnIndex;            if( header.getComponentOrientation().isLeftToRight() ) {                columnIndex = (p.x < midPoint) ? column - 1 : column;             } else {                columnIndex = (p.x < midPoint) ? column : column - 1;             }	    if (columnIndex == -1) { 		return null; 	    }	    return header.getColumnModel().getColumn(columnIndex);         }        public void mousePressed(MouseEvent e) {            header.setDraggedColumn(null);            header.setResizingColumn(null);            header.setDraggedDistance(0);            Point p = e.getPoint();            // First find which header cell was hit            TableColumnModel columnModel = header.getColumnModel();            int index = header.columnAtPoint(p);            if (index != -1) {                // The last 3 pixels + 3 pixels of next column are for resizing                TableColumn resizingColumn = getResizingColumn(p, index);                 if (canResize(resizingColumn, header)) {                    header.setResizingColumn(resizingColumn);                     if( header.getComponentOrientation().isLeftToRight() ) {                        mouseXOffset = p.x - resizingColumn.getWidth();                     } else {                        mouseXOffset = p.x + resizingColumn.getWidth();                     }                }                else if (header.getReorderingAllowed()) {                    TableColumn hitColumn = columnModel.getColumn(index);                    header.setDraggedColumn(hitColumn);		    mouseXOffset = p.x;                 }            }            if (header.getReorderingAllowed()) {                int oldRolloverColumn = rolloverColumn;                rolloverColumn = -1;                rolloverColumnUpdated(oldRolloverColumn, rolloverColumn);            }        }	private void swapCursor() { 	    Cursor tmp = header.getCursor(); 	    header.setCursor(otherCursor); 	    otherCursor = tmp; 	}        public void mouseMoved(MouseEvent e) {             if (canResize(getResizingColumn(e.getPoint()), header) != 		(header.getCursor() == resizeCursor)) {                swapCursor();            }            updateRolloverColumn(e);       }        public void mouseDragged(MouseEvent e) {            int mouseX = e.getX();            TableColumn resizingColumn  = header.getResizingColumn();            TableColumn draggedColumn  = header.getDraggedColumn();            boolean headerLeftToRight = header.getComponentOrientation().isLeftToRight();            if (resizingColumn != null) {		int oldWidth = resizingColumn.getWidth();		int newWidth;		if (headerLeftToRight) {                    newWidth = mouseX - mouseXOffset;                } else  {                    newWidth = mouseXOffset - mouseX;		}                mouseXOffset += changeColumnWidth(resizingColumn, header,                                                  oldWidth, newWidth);            }            else if (draggedColumn != null) {		TableColumnModel cm = header.getColumnModel();		int draggedDistance = mouseX - mouseXOffset;		int direction = (draggedDistance < 0) ? -1 : 1;		int columnIndex = viewIndexForColumn(draggedColumn);		int newColumnIndex = columnIndex + (headerLeftToRight ? direction : -direction); 		if (0 <= newColumnIndex && newColumnIndex < cm.getColumnCount()) {		    int width = cm.getColumn(newColumnIndex).getWidth();		    if (Math.abs(draggedDistance) > (width / 2)) {                        JTable table = header.getTable();			mouseXOffset = mouseXOffset + direction * width; 			header.setDraggedDistance(draggedDistance - direction * width);	                                                //Cache the selected column.                        int selectedIndex = table.convertColumnIndexToModel(                                                        getSelectedColumnIndex());                                                //Now do the move.                        cm.moveColumn(columnIndex, newColumnIndex);                                                //Update the selected index.                        selectColumn(table.convertColumnIndexToView(selectedIndex));                        return;		    }		}		setDraggedDistance(draggedDistance, columnIndex); 	    }            updateRolloverColumn(e);        }        public void mouseReleased(MouseEvent e) { 	    setDraggedDistance(0, viewIndexForColumn(header.getDraggedColumn()));             header.setResizingColumn(null);            header.setDraggedColumn(null);            updateRolloverColumn(e);        }        public void mouseEntered(MouseEvent e) {            updateRolloverColumn(e);        }        public void mouseExited(MouseEvent e) {            int oldRolloverColumn = rolloverColumn;            rolloverColumn = -1;            rolloverColumnUpdated(oldRolloverColumn, rolloverColumn);        }//// Protected & Private Methods//	private void setDraggedDistance(int draggedDistance, int column) {             header.setDraggedDistance(draggedDistance);		    if (column != -1) { 		header.getColumnModel().moveColumn(column, column); 	    }	}    }////  Factory methods for the Listeners//    /**     * Creates the mouse listener for the JTableHeader.     */    protected MouseInputListener createMouseInputListener() {        return new MouseInputHandler();    }    ////  The installation/uninstall procedures and support//    public static ComponentUI createUI(JComponent h) {        return new BasicTableHeaderUI();    }//  Installation    public void installUI(JComponent c) {        header = (JTableHeader)c;        rendererPane = new CellRendererPane();        header.add(rendererPane);        installDefaults();        installListeners();        installKeyboardActions();    }    /**     * Initialize JTableHeader properties, e.g. font, foreground, and background.     * The font, foreground, and background properties are only set if their     * current value is either null or a UIResource, other properties are set     * if the current value is null.     *     * @see #installUI     */    protected void installDefaults() {        LookAndFeel.installColorsAndFont(header, "TableHeader.background",                                         "TableHeader.foreground", "TableHeader.font");        LookAndFeel.installProperty(header, "opaque", Boolean.TRUE);    }    /**     * Attaches listeners to the JTableHeader.     */    protected void installListeners() {

⌨️ 快捷键说明

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