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

📄 basicpopupmenuui.java

📁 java jdk 1.4的源码
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
	     if (p[0] instanceof JMenuBar) {		 lastGrabbedMenuBarChild = true;	     } else {		 lastGrabbedMenuBarChild = false;	     }             Component ignore = null;	    if(c instanceof java.awt.Window) {		((java.awt.Window)c).addWindowListener(this);		((java.awt.Window)c).addWindowFocusListener(this);                		((java.awt.Window)c).addComponentListener(this);		grabbed.addElement(c);	    }            else if (c instanceof JRootPane) {                // Only add listeners to the glass pane if it listeners,                // otherwise if the glass pane is visible no mouse move                // events will come to us.                ignore = ((JRootPane)c).getGlassPane();                if (ignore.getMouseListeners().length > 0 ||                           ignore.getMouseMotionListeners().length > 0 ||                           ignore.getMouseWheelListeners().length > 0) {                    ignore = null;                }            }	    synchronized(c.getTreeLock()) {		int ncomponents = c.getComponentCount();		Component[] component = c.getComponents();		for (int i = 0 ; i < ncomponents ; i++) {		    Component comp = component[i];		    if(!comp.isVisible())			continue;                    if (comp != ignore) {                        comp.addMouseListener(this);                        comp.addMouseMotionListener(this);                        comp.addMouseWheelListener(this);                        grabbed.addElement(comp);                    }                    if (comp instanceof Container) {                        Container cont = (Container) comp;                        grabContainer(cont, excluded);                    }                 }            }	            }	        void ungrabContainers() {            int i,c;            Component cpn;            for(i=0,c=grabbed.size();i<c;i++) {                cpn = (Component)grabbed.elementAt(i);                if(cpn instanceof java.awt.Window) {                    ((java.awt.Window)cpn).removeWindowListener(this);                    ((java.awt.Window)cpn).removeWindowFocusListener(this);                    ((java.awt.Window)cpn).removeComponentListener(this);                } else {                    cpn.removeMouseListener(this);                    cpn.removeMouseMotionListener(this);                    cpn.removeMouseWheelListener(this);                }            }            grabbed = new Vector();	    lastGrabbed = null;	    lastGrabbedMenuBarChild = false;        }	        public void mousePressed(MouseEvent e) {            Component c = (Component)e.getSource();            MenuSelectionManager msm = MenuSelectionManager.defaultManager();	    	    cancelPopupMenu();	    /*	      if(msm.isComponentPartOfCurrentMenu(popupMenu) && msm.isComponentPartOfCurrentMenu(c)) {	      return;	      } else {	      cancelPopupMenu();	      }	      */        }                public void mouseReleased(MouseEvent e) {            MenuSelectionManager.defaultManager().processMouseEvent(e);        }        public void mouseEntered(MouseEvent e) {            // MenuSelectionManager.defaultManager().processMouseEvent(e);        }        public void mouseExited(MouseEvent e) {            // MenuSelectionManager.defaultManager().processMouseEvent(e);        }        public void mouseMoved(MouseEvent e) {            // MenuSelectionManager.defaultManager().processMouseEvent(e);        }        public void mouseDragged(MouseEvent e) {            MenuSelectionManager.defaultManager().processMouseEvent(e);        }        public void mouseClicked(MouseEvent e) {        }        public void mouseWheelMoved(MouseWheelEvent e) {            cancelPopupMenu();        }        public void componentResized(ComponentEvent e) {            cancelPopupMenu();        }        public void componentMoved(ComponentEvent e) {            cancelPopupMenu();        }        public void componentShown(ComponentEvent e) {            cancelPopupMenu();        }        public void componentHidden(ComponentEvent e) {            cancelPopupMenu();        }        public void windowOpened(WindowEvent e) {}        public void windowClosing(WindowEvent e) {            cancelPopupMenu();        }        public void windowClosed(WindowEvent e) {            cancelPopupMenu();        }        public void windowIconified(WindowEvent e) {            cancelPopupMenu();        }        public void windowDeiconified(WindowEvent e) {}        public void windowActivated(WindowEvent e) {        }        public void windowDeactivated(WindowEvent e) {        }        public void windowLostFocus(WindowEvent e) {        }        public void windowGainedFocus(WindowEvent e) {        }    }    public boolean isPopupTrigger(MouseEvent e) {	return ((e.getID()==MouseEvent.MOUSE_RELEASED) 		&& ((e.getModifiers() & MouseEvent.BUTTON3_MASK)!=0));    }	        // for auditory feedback    private transient PopupMenuListener basicPopupMenuListener = null;    // for auditory feedback    private PopupMenuListener createPopupMenuListener() {        return new BasicPopupMenuListener();    }    /**     * This Listener fires the Action that provides the correct auditory     * feedback.     *     * @since 1.4     */    private class BasicPopupMenuListener implements PopupMenuListener {        public void popupMenuCanceled(PopupMenuEvent e) {	}        public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {	}        public void popupMenuWillBecomeVisible(PopupMenuEvent e) {	    // Fire the Action that renders the auditory cue.	    JPopupMenu pm = (JPopupMenu)e.getSource();	    ActionMap map = pm.getActionMap();	    if (map != null) {		Action audioAction = map.get("PopupMenu.popupSound");		if (audioAction != null) {		    // pass off firing the Action to a utility method		    BasicLookAndFeel lf = (BasicLookAndFeel)			                   UIManager.getLookAndFeel();		    lf.playSound(audioAction);		}	    }	}    }    private static class CancelAction extends AbstractAction {	public void actionPerformed(ActionEvent e) {			    // 4234793: This action should call JPopupMenu.firePopupMenuCanceled but it's	    // a protected method. The real solution could be to make 	    // firePopupMenuCanceled public and call it directly.	    JPopupMenu lastPopup = (JPopupMenu)getLastPopup();	    if (lastPopup != null) {		lastPopup.putClientProperty("JPopupMenu.firePopupMenuCanceled", Boolean.TRUE);	    }	    MenuElement path[] = MenuSelectionManager.defaultManager().getSelectedPath();	    if(path.length > 4) { /* PENDING(arnaud) Change this to 2 when a mouse grabber is available for MenuBar */		MenuElement newPath[] = new MenuElement[path.length - 2];		System.arraycopy(path,0,newPath,0,path.length-2);		MenuSelectionManager.defaultManager().setSelectedPath(newPath);	    } else		MenuSelectionManager.defaultManager().clearSelectedPath();	}    }    private static class ReturnAction extends AbstractAction {	public void actionPerformed(ActionEvent e) {            KeyboardFocusManager fmgr =                KeyboardFocusManager.getCurrentKeyboardFocusManager();            Component focusOwner = fmgr.getFocusOwner();            if(focusOwner != null && !(focusOwner instanceof JRootPane)) {                return;            }            MenuSelectionManager msm = MenuSelectionManager.defaultManager();	    MenuElement path[] = msm.getSelectedPath();	    MenuElement lastElement;	    if(path.length > 0) {		lastElement = path[path.length-1];		if(lastElement instanceof JMenu) {		    MenuElement newPath[] = new MenuElement[path.length+1];		    System.arraycopy(path,0,newPath,0,path.length);		    newPath[path.length] = ((JMenu)lastElement).getPopupMenu();		    msm.setSelectedPath(newPath);		} else if(lastElement instanceof JMenuItem) {                    JMenuItem mi = (JMenuItem)lastElement;                    if (mi.getUI() instanceof BasicMenuItemUI) {                        ((BasicMenuItemUI)mi.getUI()).doClick(msm);                    }                    else {                        msm.clearSelectedPath();                        mi.doClick(0);                    }		}	    }	}    }    private static MenuElement nextEnabledChild(MenuElement e[],                                                int fromIndex, int toIndex) {	for (int i=fromIndex; i<=toIndex; i++) {	    if (e[i] != null) {		Component comp = e[i].getComponent();		if (comp != null && comp.isEnabled()) return e[i];	    }	}	return null;    }    private static MenuElement previousEnabledChild(MenuElement e[],                                                int fromIndex, int toIndex) {	for (int i=fromIndex; i>=toIndex; i--) {	    if (e[i] != null) {		Component comp = e[i].getComponent();		if (comp != null && comp.isEnabled()) return e[i];	    }	}	return null;    }    private static MenuElement findEnabledChild(MenuElement e[], int fromIndex,                                                boolean forward) {        MenuElement result = null;        if (forward) {            result = nextEnabledChild(e, fromIndex+1, e.length-1);            if (result == null) result = nextEnabledChild(e, 0, fromIndex-1);        } else {            result = previousEnabledChild(e, fromIndex-1, 0);            if (result == null) result = previousEnabledChild(e, e.length-1,                                                              fromIndex+1);        }	return result;    }    private static MenuElement findEnabledChild(MenuElement e[],                                   MenuElement elem, boolean forward) {        for (int i=0; i<e.length; i++) {            if (e[i] == elem) {                return findEnabledChild(e, i, forward);            }        }        return null;    }    private static class SelectNextItemAction extends AbstractAction {        static boolean FORWARD = true;        static boolean BACKWARD = false;        boolean direction;        SelectNextItemAction(boolean dir) {            direction = dir;        }	public void actionPerformed(ActionEvent e) {            MenuSelectionManager msm = MenuSelectionManager.defaultManager();            MenuElement path[] = msm.getSelectedPath();            if (path.length < 2) {                return;            }            int len = path.length;            if (path[0] instanceof JMenuBar &&                path[1] instanceof JMenu && len == 2) {                // a toplevel menu is selected, but its popup not shown.                // Show the popup and select the first item                JPopupMenu popup = ((JMenu)path[1]).getPopupMenu();                MenuElement next =                    findEnabledChild(popup.getSubElements(), -1, FORWARD);                MenuElement[] newPath;                if (next != null) {                    // an enabled item found -- include it in newPath                    newPath = new MenuElement[4];                    newPath[3] = next;                } else {                    // menu has no enabled items -- still must show the popup                    newPath = new MenuElement[3];                }                System.arraycopy(path, 0, newPath, 0, 2);                newPath[2] = popup;                msm.setSelectedPath(newPath);            } else if (path[len-1] instanceof JPopupMenu &&                       path[len-2] instanceof JMenu) {                // a menu (not necessarily toplevel) is open and its popup                // shown. Select the appropriate menu item                JMenu menu = (JMenu)path[len-2];                JPopupMenu popup = menu.getPopupMenu();                MenuElement next =                    findEnabledChild(popup.getSubElements(), -1, direction);                if (next != null) {                    MenuElement[] newPath = new MenuElement[len+1];                    System.arraycopy(path, 0, newPath, 0, len);                    newPath[len] = next;                    msm.setSelectedPath(newPath);                } else {                    // all items in the popup are disabled.                    // We're going to find the parent popup menu and select                    // its next item. If there's no parent popup menu (i.e.                    // current menu is toplevel), do nothing                    if (len > 2 && path[len-3] instanceof JPopupMenu) {                        popup = ((JPopupMenu)path[len-3]);                        next = findEnabledChild(popup.getSubElements(),                                                menu, direction);                        if (next != null && next != menu) {                            MenuElement[] newPath = new MenuElement[len-1];                            System.arraycopy(path, 0, newPath, 0, len-2);                            newPath[len-2] = next;                            msm.setSelectedPath(newPath);                        }                    }                }            } else {                // just select the next item, no path expansion needed                MenuElement subs[] = path[len-2].getSubElements();                MenuElement nextChild =                    findEnabledChild(subs, path[len-1], direction);                if (nextChild == null) {                    nextChild = findEnabledChild(subs, -1, direction);                }                if (nextChild != null) {

⌨️ 快捷键说明

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