1 /* 2 * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 package javax.swing; 26 27 import java.awt.*; 28 import java.awt.event.*; 29 30 /** 31 * Any component that can be placed into a menu should implement this interface. 32 * This interface is used by {@code MenuSelectionManager} 33 * to handle selection and navigation in menu hierarchies. 34 * 35 * @author Arnaud Weber 36 * @since 1.2 37 */ 38 39 public interface MenuElement { 40 41 /** 42 * Processes a mouse event. {@code event} is a {@code MouseEvent} with 43 * source being the receiving element's component. {@code path} is the 44 * path of the receiving element in the menu hierarchy including the 45 * receiving element itself. {@code manager} is the 46 * {@code MenuSelectionManager}for the menu hierarchy. This method should 47 * process the {@code MouseEvent} and change the menu selection if necessary 48 * by using {@code MenuSelectionManager}'s API Note: you do not have to 49 * forward the event to sub-components. This is done automatically by the 50 * {@code MenuSelectionManager}. 51 * 52 * @param event a {@code MouseEvent} to be processed 53 * @param path the path of the receiving element in the menu hierarchy 54 * @param manager the {@code MenuSelectionManager} for the menu hierarchy 55 */ 56 public void processMouseEvent(MouseEvent event, MenuElement path[], MenuSelectionManager manager); 57 58 59 /** 60 * Process a key event. 61 * 62 * @param event a {@code KeyEvent} to be processed 63 * @param path the path of the receiving element in the menu hierarchy 64 * @param manager the {@code MenuSelectionManager} for the menu hierarchy 65 */ 66 public void processKeyEvent(KeyEvent event, MenuElement path[], MenuSelectionManager manager); 67 68 /** 69 * Call by the {@code MenuSelectionManager} when the {@code MenuElement} is 70 * added or removed from the menu selection. 71 * 72 * @param isIncluded can be used to indicate if this {@code MenuElement} is 73 * active (if it is a menu) or is on the part of the menu path that 74 * changed (if it is a menu item). 75 */ 76 public void menuSelectionChanged(boolean isIncluded); 77 78 /** 79 * This method should return an array containing the sub-elements for the 80 * receiving menu element. 81 * 82 * @return an array of {@code MenuElement}s 83 */ 84 public MenuElement[] getSubElements(); 85 86 /** 87 * This method should return the {@code java.awt.Component} used to paint the 88 * receiving element. The returned component will be used to convert events 89 * and detect if an event is inside a {@code MenuElement}'s component. 90 * 91 * @return the {@code Component} value 92 */ 93 public Component getComponent(); 94 }