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

📄 basictableheaderui.java

📁 JAVA 所有包
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
        mouseInputListener = createMouseInputListener();        header.addMouseListener(mouseInputListener);        header.addMouseMotionListener(mouseInputListener);        header.addFocusListener(focusListener);    }    /**     * Register all keyboard actions on the JTableHeader.     */    protected void installKeyboardActions() {        InputMap keyMap = (InputMap)DefaultLookup.get(header, this,                "TableHeader.ancestorInputMap");	SwingUtilities.replaceUIInputMap(header,                                                JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, keyMap);        LazyActionMap.installLazyActionMap(header, BasicTableHeaderUI.class,                "TableHeader.actionMap");    }// Uninstall methods    public void uninstallUI(JComponent c) {        uninstallDefaults();        uninstallListeners();        uninstallKeyboardActions();        header.remove(rendererPane);        rendererPane = null;        header = null;    }    protected void uninstallDefaults() {}    protected void uninstallListeners() {        header.removeMouseListener(mouseInputListener);        header.removeMouseMotionListener(mouseInputListener);        mouseInputListener = null;    }    /**     * Unregisters default key actions.     */    protected void uninstallKeyboardActions() {        SwingUtilities.replaceUIInputMap(header, JComponent.WHEN_FOCUSED, null);        SwingUtilities.replaceUIActionMap(header, null);    }    /**     * Populates TableHeader's actions.     */    static void loadActionMap(LazyActionMap map) {        map.put(new Actions(Actions.TOGGLE_SORT_ORDER));        map.put(new Actions(Actions.SELECT_COLUMN_TO_LEFT));        map.put(new Actions(Actions.SELECT_COLUMN_TO_RIGHT));        map.put(new Actions(Actions.MOVE_COLUMN_LEFT));        map.put(new Actions(Actions.MOVE_COLUMN_RIGHT));        map.put(new Actions(Actions.RESIZE_LEFT));        map.put(new Actions(Actions.RESIZE_RIGHT));        map.put(new Actions(Actions.FOCUS_TABLE));    }//// Support for mouse rollover//    /**     * Returns the index of the column header over which the mouse     * currently is. When the mouse is not over the table header,     * -1 is returned.     *     * @see #rolloverColumnUpdated(int, int)     * @return the index of the current rollover column     * @since 1.6     */    protected int getRolloverColumn() {        return rolloverColumn;    }    /**     * This method gets called every time the rollover column in the table     * header is updated. Every look and feel supporting rollover effect     * in table header should override this method and repaint the header.     *     * @param oldColumn the index of the previous rollover column or -1 if the     * mouse was not over a column     * @param newColumn the index of the new rollover column or -1 if the mouse     * is not over a column     * @see #getRolloverColumn()     * @see JTableHeader#getHeaderRect(int)     * @since 1.6     */    protected void rolloverColumnUpdated(int oldColumn, int newColumn) {    }    private void updateRolloverColumn(MouseEvent e) {        if (header.getDraggedColumn() == null &&            header.contains(e.getPoint())) {            int col = header.columnAtPoint(e.getPoint());            if (col != rolloverColumn) {                int oldRolloverColumn = rolloverColumn;                rolloverColumn = col;                rolloverColumnUpdated(oldRolloverColumn, rolloverColumn);            }        }    }//// Support for keyboard and mouse access//    private int selectNextColumn(boolean doIt) {        int newIndex = getSelectedColumnIndex();        if (newIndex < header.getColumnModel().getColumnCount() - 1) {            newIndex++;            if (doIt) {                selectColumn(newIndex);            }        }        return newIndex;    }        private int selectPreviousColumn(boolean doIt) {        int newIndex = getSelectedColumnIndex();        if (newIndex > 0) {            newIndex--;            if (doIt) {                selectColumn(newIndex);            }        }        return newIndex;    }        /**     * Selects the specified column in the table header. Repaints the     * affected header cells and makes sure the newly selected one is visible.     */    void selectColumn(int newColIndex) {        Rectangle repaintRect = header.getHeaderRect(selectedColumnIndex);        header.repaint(repaintRect);        selectedColumnIndex = newColIndex;        repaintRect = header.getHeaderRect(newColIndex);        header.repaint(repaintRect);                            scrollToColumn(newColIndex);        return;    }        /**     * Used by selectColumn to scroll horizontally, if necessary,     * to ensure that the newly selected column is visible.     */    private void scrollToColumn(int col) {        Container container;        JTable table;                //Test whether the header is in a scroll pane and has a table.        if ((header.getParent() == null) ||            ((container = header.getParent().getParent()) == null) ||            !(container instanceof JScrollPane) ||            ((table = header.getTable()) == null)) {            return;        }        //Now scroll, if necessary.        Rectangle vis = table.getVisibleRect();        Rectangle cellBounds = table.getCellRect(0, col, true);        vis.x = cellBounds.x;        vis.width = cellBounds.width;        table.scrollRectToVisible(vis);    }        private int getSelectedColumnIndex() {        int numCols = header.getColumnModel().getColumnCount();        if (selectedColumnIndex >= numCols && numCols > 0) {            selectedColumnIndex = numCols - 1;        }        return selectedColumnIndex;    }        private static boolean canResize(TableColumn column,                                     JTableHeader header) {         return (column != null) && header.getResizingAllowed()                                && column.getResizable();     }        private int changeColumnWidth(TableColumn resizingColumn,                                  JTableHeader th,                                  int oldWidth, int newWidth) {        resizingColumn.setWidth(newWidth);                Container container;        JTable table;        if ((th.getParent() == null) ||            ((container = th.getParent().getParent()) == null) ||            !(container instanceof JScrollPane) ||            ((table = th.getTable()) == null)) {            return 0;        }        if (!container.getComponentOrientation().isLeftToRight() &&                !th.getComponentOrientation().isLeftToRight()) {                JViewport viewport = ((JScrollPane)container).getViewport();                int viewportWidth = viewport.getWidth();                int diff = newWidth - oldWidth;                int newHeaderWidth = table.getWidth() + diff;                /* Resize a table */                Dimension tableSize = table.getSize();                tableSize.width += diff;                table.setSize(tableSize);                /* If this table is in AUTO_RESIZE_OFF mode and                 * has a horizontal scrollbar, we need to update                 * a view's position.                 */                if ((newHeaderWidth >= viewportWidth) &&                    (table.getAutoResizeMode() == JTable.AUTO_RESIZE_OFF)) {                    Point p = viewport.getViewPosition();                    p.x = Math.max(0, Math.min(newHeaderWidth - viewportWidth,                                               p.x + diff));                    viewport.setViewPosition(p);                    return diff;            }        }        return 0;    }//// Baseline//    /**     * Returns the baseline.     *     * @throws NullPointerException {@inheritDoc}     * @throws IllegalArgumentException {@inheritDoc}     * @see javax.swing.JComponent#getBaseline(int, int)     * @since 1.6     */    public int getBaseline(JComponent c, int width, int height) {        super.getBaseline(c, width, height);        int baseline = -1;        TableColumnModel columnModel = header.getColumnModel();        for(int column = 0; column < columnModel.getColumnCount();            column++) {             TableColumn aColumn = columnModel.getColumn(column);             Component comp = getHeaderRenderer(column);             Dimension pref = comp.getPreferredSize();            int columnBaseline = comp.getBaseline(pref.width, height);            if (columnBaseline >= 0) {                if (baseline == -1) {                    baseline = columnBaseline;                }                else if (baseline != columnBaseline) {                    baseline = -1;                    break;                }            }        }        return baseline;    }//// Paint Methods and support//    public void paint(Graphics g, JComponent c) {	if (header.getColumnModel().getColumnCount() <= 0) { 	    return; 	}        boolean ltr = header.getComponentOrientation().isLeftToRight();	Rectangle clip = g.getClipBounds();         Point left = clip.getLocation();        Point right = new Point( clip.x + clip.width - 1, clip.y );	TableColumnModel cm = header.getColumnModel();         int cMin = header.columnAtPoint( ltr ? left : right );        int cMax = header.columnAtPoint( ltr ? right : left );        // This should never happen.         if (cMin == -1) {	    cMin =  0;        }        // If the table does not have enough columns to fill the view we'll get -1.        // Replace this with the index of the last column.        if (cMax == -1) {	    cMax = cm.getColumnCount()-1;          }	TableColumn draggedColumn = header.getDraggedColumn(); 	int columnWidth;        Rectangle cellRect = header.getHeaderRect(ltr ? cMin : cMax); 	TableColumn aColumn;	if (ltr) {	    for(int column = cMin; column <= cMax ; column++) { 		aColumn = cm.getColumn(column); 		columnWidth = aColumn.getWidth();		cellRect.width = columnWidth;		if (aColumn != draggedColumn) {		    paintCell(g, cellRect, column);		} 		cellRect.x += columnWidth;	    }	} else {	    for(int column = cMax; column >= cMin; column--) {

⌨️ 快捷键说明

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