001: /*
002: * Jacareto Copyright (c) 2002-2005
003: * Applied Computer Science Research Group, Darmstadt University of
004: * Technology, Institute of Mathematics & Computer Science,
005: * Ludwigsburg University of Education, and Computer Based
006: * Learning Research Group, Aachen University. All rights reserved.
007: *
008: * Jacareto is free software; you can redistribute it and/or
009: * modify it under the terms of the GNU General Public
010: * License as published by the Free Software Foundation; either
011: * version 2 of the License, or (at your option) any later version.
012: *
013: * Jacareto is distributed in the hope that it will be useful,
014: * but WITHOUT ANY WARRANTY; without even the implied warranty of
015: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
016: * General Public License for more details.
017: *
018: * You should have received a copy of the GNU General Public
019: * License along with Jacareto; if not, write to the Free
020: * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
021: *
022: */
023:
024: package jacareto.comp;
025:
026: import jacareto.system.Environment;
027:
028: import java.awt.Component;
029:
030: import java.util.Vector;
031:
032: import javax.accessibility.AccessibleContext;
033:
034: import javax.swing.JComponent;
035:
036: /**
037: * This is a class which provides methods for JComponents. It uses the accessibility API for the
038: * retrieval of the child components of a JComponent in addition to standard methods.
039: *
040: * @author <a href="mailto:cspannagel@web.de">Christian Spannagel</a>
041: * @version 1.0
042: */
043: public class JComponentHandler extends ContainerHandler {
044: /**
045: * Creates a new JComponent handler.
046: *
047: * @param env the environment
048: * @param components the components instance
049: */
050: public JComponentHandler(Environment env, Components components) {
051: super (env, components);
052: }
053:
054: /**
055: * Returns whether this handler is responsible for the given component. This class is
056: * responsible for JComponents.
057: *
058: * @param component the component
059: *
060: * @return <code>true</code> if this handler is responsible for the given component, otherwise
061: * <code>false</code>
062: */
063: public boolean handlesComponent(Component component) {
064: return (component != null) && component instanceof JComponent;
065: }
066:
067: /**
068: * Returns an array with components contained
069: *
070: * @param component the component
071: *
072: * @return the array
073: */
074: public Component[] getChildren(Component component) {
075: Vector children = new Vector();
076:
077: // Children retrieved from the accessible context
078: AccessibleContext context = ((JComponent) component)
079: .getAccessibleContext();
080:
081: if (context != null) {
082: int childrenCount = context.getAccessibleChildrenCount();
083:
084: for (int i = 0; i < childrenCount; i++) {
085: Object childObject = context.getAccessibleChild(i);
086:
087: if ((childObject != null)
088: && (childObject instanceof Component)) {
089: children.add(childObject);
090: }
091: }
092: }
093:
094: // Children retrieved from the component as container
095: Component[] containerChildren = super .getChildren(component);
096:
097: if (containerChildren != null) {
098: for (int i = 0; i < containerChildren.length; i++) {
099: if ((containerChildren[i] != null)
100: && !children.contains(containerChildren[i])) {
101: children.add(containerChildren[i]);
102: }
103: }
104: }
105:
106: // convert the vector to an array
107: Component[] result = new Component[children.size()];
108:
109: for (int i = 0; i < result.length; i++) {
110: result[i] = (Component) children.get(i);
111: }
112:
113: return result;
114: }
115: }
|