synthinternalframeui.java

来自「java jdk 1.4的源码」· Java 代码 · 共 1,486 行 · 第 1/4 页

JAVA
1,486
字号
                        deltaY = -(startingBounds.height - min.height);                    } else if(startingBounds.height + deltaY > max.height) {                        deltaY = max.height - startingBounds.height;                    }                                        if (startingBounds.y - deltaY < 0) {                        deltaY = startingBounds.y;                    }                    newX = startingBounds.x - deltaX;                    newY = startingBounds.y - deltaY;                    newW = startingBounds.width + deltaX;                    newH = startingBounds.height + deltaY;                    break;                default:                    return;            }            getDesktopManager().resizeFrame(frame, newX, newY, newW, newH);        }        public void mouseMoved(MouseEvent e) {            if (!frame.isResizable()) {                return;            }                    if (e.getSource() == frame || e.getSource() == getNorthPane()) {                Insets i = frame.getInsets();                if (e.getX() <= i.left) {                    if (e.getY() < resizeCornerSize + i.top) {                        frame.setCursor(Cursor.getPredefinedCursor(                            Cursor.NW_RESIZE_CURSOR));                    } else if (e.getY() > frame.getHeight() - resizeCornerSize                            - i.bottom) {                        frame.setCursor(Cursor.getPredefinedCursor(                            Cursor.SW_RESIZE_CURSOR));                    } else {                        frame.setCursor(Cursor.getPredefinedCursor(                            Cursor.W_RESIZE_CURSOR));                    }                } else if (e.getX() >= frame.getWidth() - i.right) {                    if (e.getY() < resizeCornerSize + i.top) {                        frame.setCursor(Cursor.getPredefinedCursor(                            Cursor.NE_RESIZE_CURSOR));                    } else if (e.getY() > frame.getHeight() - resizeCornerSize                            - i.bottom) {                        frame.setCursor(Cursor.getPredefinedCursor(                            Cursor.SE_RESIZE_CURSOR));                    } else {                        frame.setCursor(Cursor.getPredefinedCursor(                            Cursor.E_RESIZE_CURSOR));                    }                } else if (e.getY() <= i.top) {                    if (e.getX() < resizeCornerSize + i.left) {                        frame.setCursor(Cursor.getPredefinedCursor(                            Cursor.NW_RESIZE_CURSOR));                    } else if (e.getX() > frame.getWidth() - resizeCornerSize                            - i.right) {                        frame.setCursor(Cursor.getPredefinedCursor(                            Cursor.NE_RESIZE_CURSOR));                    } else {                        frame.setCursor(Cursor.getPredefinedCursor(                            Cursor.N_RESIZE_CURSOR));                    }                } else if (e.getY() >= frame.getHeight() - i.bottom) {                    if (e.getX() < resizeCornerSize + i.left) {                        frame.setCursor(Cursor.getPredefinedCursor(                            Cursor.SW_RESIZE_CURSOR));                    } else if (e.getX() > frame.getWidth() - resizeCornerSize                            - i.right) {                        frame.setCursor(Cursor.getPredefinedCursor(                            Cursor.SE_RESIZE_CURSOR));                    } else {                        frame.setCursor(Cursor.getPredefinedCursor(                            Cursor.S_RESIZE_CURSOR));                    }                }                else {                    frame.setCursor(Cursor.getPredefinedCursor(                        Cursor.DEFAULT_CURSOR));                }                return;            }            frame.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));        }                 public void mouseExited(MouseEvent e) {            frame.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));        }    }    /// End BorderListener Class    protected class ComponentHandler implements ComponentListener {        /**         * Invoked when a JInternalFrame's parent's size changes.         */        public void componentResized(ComponentEvent e) {            // Get the JInternalFrame's parent container size            Rectangle parentNewBounds = ((Component) e.getSource()).getBounds();            JInternalFrame.JDesktopIcon icon = null;            if (frame != null) {                icon = frame.getDesktopIcon();                // Resize the internal frame if it is maximized and relocate                // the associated icon as well.                if ( frame.isMaximum() ) {                    frame.setBounds(0, 0, parentNewBounds.width,                        parentNewBounds.height);                }            }            // Relocate the icon base on the new parent bounds.            if (icon != null) {                Rectangle iconBounds = icon.getBounds();                int y = iconBounds.y                    + (parentNewBounds.height- parentBounds.height);                icon.setBounds(iconBounds.x, y, iconBounds.width,                        iconBounds.height);            }            // Update the new parent bounds for next resize.            if (!parentBounds.equals(parentNewBounds)) {                parentBounds = parentNewBounds;            }            // Validate the component tree for this container.            if (frame != null) {                frame.validate();            }        }        /* Unused */        public void componentMoved(ComponentEvent e) {}        /* Unused */        public void componentShown(ComponentEvent e) {}        /* Unused */        public void componentHidden(ComponentEvent e) {}    }        protected ComponentListener createComponentListener() {        return new ComponentHandler();    }    private static boolean isDragging = false;    protected class GlassPaneDispatcher implements MouseInputListener {        private Component mouseEventTarget = null;        private Component dragSource = null;        /**         * When inactive, mouse events are forwarded as appropriate either to          * the UI to activate the frame or to the underlying child component.         */        public void mousePressed(MouseEvent e) {            // what is going on here is the GlassPane is up on the inactive            // internalframe and want's to "catch" the first mousePressed on            // the frame in order to give it to the BorderLister (and not the            // underlying component) and let it activate the frame            if (borderListener != null){                borderListener.mousePressed(e);            }             forwardMouseEvent(e);        }        /**          * Forward the mouseEntered event to the underlying child container.         * @see #mousePressed         */        public void mouseEntered(MouseEvent e) {            forwardMouseEvent(e);        }        /**          * Forward the mouseMoved event to the underlying child container.         * @see #mousePressed         */        public void mouseMoved(MouseEvent e) {            forwardMouseEvent(e);        }        /**          * Forward the mouseExited event to the underlying child container.         * @see #mousePressed         */        public void mouseExited(MouseEvent e) {            forwardMouseEvent(e);        }        /**          * Ignore mouseClicked events.         * @see #mousePressed         */         public void mouseClicked(MouseEvent e) { }        /**          * Forward the mouseReleased event to the underlying child container.         * @see #mousePressed         */        public void mouseReleased(MouseEvent e) {            forwardMouseEvent(e);        }        /**          * Forward the mouseDragged event to the underlying child container.         * @see #mousePressed         */        public void mouseDragged(MouseEvent e) {            forwardMouseEvent(e);        }        /**         * Forward a mouse event to the current mouse target, setting it         * if necessary.         */        private void forwardMouseEvent(MouseEvent e) {            // We only want to do this for the selected internal frame.            Component target =                findComponentAt(frame.getRootPane().getLayeredPane(),                     e.getX(), e.getY());            int id = e.getID();            switch(id) {                case MouseEvent.MOUSE_ENTERED:                    if (isDragging && !frame.isSelected()) {                        return;                    }                    if (target != mouseEventTarget) {                        mouseEventTarget = target;                    }                    retargetMouseEvent(id, e, mouseEventTarget);                    break;                case MouseEvent.MOUSE_PRESSED:                    if (target != mouseEventTarget) {                        mouseEventTarget = target;                    }                    retargetMouseEvent(id, e, mouseEventTarget);                    // Set the drag source in case we start dragging.                    dragSource = target;                    break;                case MouseEvent.MOUSE_EXITED:                    if (isDragging && !frame.isSelected()) {                        return;                    }                    retargetMouseEvent(id, e, mouseEventTarget);                    break;                case MouseEvent.MOUSE_CLICKED:                    retargetMouseEvent(id, e, mouseEventTarget);                    break;                case MouseEvent.MOUSE_MOVED:                    if (target != mouseEventTarget) {                        retargetMouseEvent(MouseEvent.MOUSE_EXITED, e,                                mouseEventTarget);                        mouseEventTarget = target;                        retargetMouseEvent(MouseEvent.MOUSE_ENTERED, e,                                mouseEventTarget);                    }                    retargetMouseEvent(id, e, mouseEventTarget);                    break;                case MouseEvent.MOUSE_DRAGGED:                    if (!isDragging) {                        isDragging = true;                    }                    retargetMouseEvent(id, e, dragSource);                    break;                case MouseEvent.MOUSE_RELEASED:                    if (isDragging) {                        retargetMouseEvent(id, e, dragSource);                        isDragging = false;                    } else {                        retargetMouseEvent(id, e, mouseEventTarget);                    }            }        }        /**         * Find the lightweight child component which corresponds to the         * specified location.  This is similar to the new 1.2 API in         * Container, but we need to run on 1.1.  The other changes are         * due to Container.findComponentAt's use of package-private data.         */        private Component findComponentAt(Container c, int x, int y) {            if (!c.contains(x, y)) {                return c;            }            int ncomponents = c.getComponentCount();            Component component[] = c.getComponents();            for (int i = 0 ; i < ncomponents ; i++) {                Component comp = component[i];                Point loc = comp.getLocation();                if ((comp != null) && (comp.contains(x - loc.x, y - loc.y)) &&                        (comp.getPeer() instanceof LightweightPeer) &&                        (comp.isVisible() == true)) {                    // found a component that intersects the point, see if there                    // is a deeper possibility.                    if (comp instanceof Container) {                        Container child = (Container) comp;                        Point childLoc = child.getLocation();                        Component deeper = findComponentAt(child,                            x - childLoc.x, y - childLoc.y);                        if (deeper != null) {                            return deeper;                        }                    } else {                        return comp;                    }                }            }            return c;        }            /*          * Dispatch an event clone, retargeted for the specified target.         */        private void retargetMouseEvent(int id, MouseEvent e,                Component target) {            if (target == null) {                return;            }            // fix for bug #4202966 -- hania            // When retargetting a mouse event, we need to translate            // the event's coordinates relative to the target.            Point p = SwingUtilities.convertPoint(frame.getLayeredPane(),                                                e.getX(), e.getY(),                                                target);            MouseEvent retargeted = new MouseEvent(target,                 id,                e.getWhen(),                e.getModifiers() | e.getModifiersEx(),                p.x,                p.y,                e.getClickCount(),                e.isPopupTrigger());            target.dispatchEvent(retargeted);        }    }    protected MouseInputListener createGlassPaneDispatcher(){        return new GlassPaneDispatcher();    }        protected class BasicInternalFrameListener implements            InternalFrameListener {        public void internalFrameClosing(InternalFrameEvent e) { }        public void internalFrameClosed(InternalFrameEvent e) {            frame.removeInternalFrameListener(internalFrameListener);              }        public void internalFrameOpened(InternalFrameEvent e) { }        public void internalFrameIconified(InternalFrameEvent e) { }        public void internalFrameDeiconified(InternalFrameEvent e) { }        public void internalFrameActivated(InternalFrameEvent e) {            if (!isKeyBindingRegistered()) {                setKeyBindingRegistered(true);                setupMenuOpenKey();                setupMenuCloseKey();            }            if (isKeyBindingRegistered()) {                setKeyBindingActive(true);            }        }        public void internalFrameDeactivated(InternalFrameEvent e) {            setKeyBindingActive(false);        }    }}

⌨️ 快捷键说明

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