📄 jmenubar.java
字号:
public JMenu getMenu(int index) { if (getComponentAtIndex(index) instanceof JMenu) return (JMenu) getComponentAtIndex(index); else return null; } /** * Returns number of menu's in this menu bar * * @return number of menu's in this menu bar */ public int getMenuCount() { return getComponentCount(); } /** * Returns selection model for this menu bar. SelectionModel * keeps track of the selected menu in the menu bar. Whenever * selected property of selectionModel changes, the ChangeEvent * will be fired its ChangeListeners. * * @return selection model for this menu bar. */ public SingleSelectionModel getSelectionModel() { return selectionModel; } /** * Method of MenuElement interface. It returns subcomponents * of the menu bar, which are all the menues that it contains. * * @return MenuElement[] array containing menues in this menu bar */ public MenuElement[] getSubElements() { MenuElement[] subElements = new MenuElement[getComponentCount()]; for (int i = 0; i < getComponentCount(); i++) subElements[i] = (MenuElement) getMenu(i); return subElements; } /** * Set the "UI" property of the menu bar, which is a look and feel class * responsible for handling the menuBar's input events and painting it. * * @return The current "UI" property */ public MenuBarUI getUI() { return (MenuBarUI) ui; } /** * This method returns a name to identify which look and feel class will be * the UI delegate for the menu bar. * * @return The Look and Feel classID. "MenuBarUI" */ public String getUIClassID() { return "MenuBarUI"; } /** * Returns true if menu bar paints its border and false otherwise * * @return true if menu bar paints its border and false otherwise */ public boolean isBorderPainted() { return borderPainted; } /** * Returns true if some menu in menu bar is selected. * * @return true if some menu in menu bar is selected and false otherwise */ public boolean isSelected() { return selectionModel.isSelected(); } /** * This method does nothing by default. This method is need for the * MenuElement interface to be implemented. * * @param isIncluded true if menuBar is included in the selection * and false otherwise */ public void menuSelectionChanged(boolean isIncluded) { // Do nothing - needed for implementation of MenuElement interface } /** * Paints border of the menu bar, if its borderPainted property is set to * true. * * @param g The graphics context with which to paint the border */ protected void paintBorder(Graphics g) { if (borderPainted) getBorder().paintBorder(this, g, 0, 0, getSize(null).width, getSize(null).height); } /** * A string that describes this JMenuBar. Normally only used * for debugging. * * @return A string describing this JMenuBar */ protected String paramString() { StringBuffer sb = new StringBuffer(); sb.append(super.paramString()); sb.append(",margin="); if (getMargin() != null) sb.append(getMargin()); sb.append(",paintBorder=").append(isBorderPainted()); return sb.toString(); } /** * Process key events forwarded from MenuSelectionManager. This method * doesn't do anything. It is here to conform to the MenuElement interface. * * @param e event forwarded from MenuSelectionManager * @param path path to the menu element from which event was generated * @param manager MenuSelectionManager for the current menu hierarchy * */ public void processKeyEvent(KeyEvent e, MenuElement[] path, MenuSelectionManager manager) { // Do nothing - needed for implementation of MenuElement interface } /** * This method overrides JComponent.processKeyBinding to allow the * JMenuBar to check all the child components (recursiveley) to see * if they'll consume the event. * * @param ks the KeyStroke for the event * @param e the KeyEvent for the event * @param condition the focus condition for the binding * @param pressed true if the key is pressed */ protected boolean processKeyBinding(KeyStroke ks, KeyEvent e, int condition, boolean pressed) { // See if the regular JComponent behavior consumes the event if (super.processKeyBinding(ks, e, condition, pressed)) return true; // If not, have to recursively check all the child menu elements to see // if they want it MenuElement[] children = getSubElements(); for (int i = 0; i < children.length; i++) if (processKeyBindingHelper(children[i], ks, e, condition, pressed)) return true; return false; } /** * This is a helper method to recursively check the children of this * JMenuBar to see if they will consume a key event via key bindings. * This is used for menu accelerators. * @param menuElement the menuElement to check (and check all its children) * @param ks the KeyStroke for the event * @param e the KeyEvent that may be consumed * @param condition the focus condition for the binding * @param pressed true if the key was pressed * @return true <code>menuElement</code> or one of its children consume * the event (processKeyBinding returns true for menuElement or one of * its children). */ static boolean processKeyBindingHelper(MenuElement menuElement, KeyStroke ks, KeyEvent e, int condition, boolean pressed) { // First check the menuElement itself, if it's a JComponent if (menuElement instanceof JComponent && ((JComponent) menuElement).processKeyBinding(ks, e, condition, pressed)) return true; // If that didn't consume it, check all the children recursively MenuElement[] children = menuElement.getSubElements(); for (int i = 0; i < children.length; i++) if (processKeyBindingHelper(children[i], ks, e, condition, pressed)) return true; return false; } /** * Process mouse events forwarded from MenuSelectionManager. This method * doesn't do anything. It is here to conform to the MenuElement interface. * * @param event event forwarded from MenuSelectionManager * @param path path to the menu element from which event was generated * @param manager MenuSelectionManager for the current menu hierarchy * */ public void processMouseEvent(MouseEvent event, MenuElement[] path, MenuSelectionManager manager) { // Do nothing - needed for implementation of MenuElement interface } /** * This method overrides removeNotify() in the Container to * unregister this menu bar from the current keyboard manager. */ public void removeNotify() { KeyboardManager.getManager().unregisterJMenuBar(this); super.removeNotify(); } /** * Sets painting status of the border. If 'b' is true then menu bar's * border will be painted, and it will not be painted otherwise. * * @param b indicates if menu bar's border should be painted. */ public void setBorderPainted(boolean b) { if (b != borderPainted) { boolean old = borderPainted; borderPainted = b; firePropertyChange("borderPainted", old, b); revalidate(); repaint(); } } /** * Sets help menu for this menu bar * * @param menu help menu * * @specnote The specification states that this method is not yet implemented * and should throw an exception. */ public void setHelpMenu(JMenu menu) { // We throw an Error here, just as Sun's JDK does. throw new Error("setHelpMenu() not yet implemented."); } /** * Sets the menu bar's "margin" bound property, which represents * distance between the menubar's border and its menus. * icon. When marging property is modified, PropertyChangeEvent will * be fired to menuBar's PropertyChangeListener's. * * @param m distance between the menubar's border and its menus. * */ public void setMargin(Insets m) { if (m != margin) { Insets oldMargin = margin; margin = m; firePropertyChange("margin", oldMargin, margin); } } /** * Changes menu bar's selection to the specified menu. * This method updates selected index of menu bar's selection model, * which results in a model firing change event. * * @param sel menu to select */ public void setSelected(Component sel) { int index = getComponentIndex(sel); selectionModel.setSelectedIndex(index); } /** * Sets menuBar's selection model to the one specified * * @param model SingleSelectionModel that needs to be set for this menu bar */ public void setSelectionModel(SingleSelectionModel model) { if (selectionModel != model) { SingleSelectionModel oldModel = selectionModel; selectionModel = model; firePropertyChange("model", oldModel, selectionModel); } } /** * Set the "UI" property of the menu bar, which is a look and feel class * responsible for handling menuBar's input events and painting it. * * @param ui The new "UI" property */ public void setUI(MenuBarUI ui) { super.setUI(ui); } /** * Set the "UI" property to a class constructed, via the {@link * UIManager}, from the current look and feel. */ public void updateUI() { setUI((MenuBarUI) UIManager.getUI(this)); invalidate(); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -