All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.eclipse.wb.swing.FocusTraversalOnArray Maven / Gradle / Ivy

The newest version!
/*******************************************************************************
 * Copyright (c) 2011 Google, Inc.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *    Google, Inc. - initial API and implementation
 *******************************************************************************/
package org.eclipse.wb.swing;

import java.awt.Component;
import java.awt.Container;
import java.awt.FocusTraversalPolicy;

/**
 * Cyclic focus traversal policy based on array of components.
 * 

* This class may be freely distributed as part of any application or plugin. * * @author scheglov_ke */ public class FocusTraversalOnArray extends FocusTraversalPolicy { private final Component m_Components[]; //////////////////////////////////////////////////////////////////////////// // // Constructor // //////////////////////////////////////////////////////////////////////////// public FocusTraversalOnArray(Component components[]) { m_Components = components; } //////////////////////////////////////////////////////////////////////////// // // Utilities // //////////////////////////////////////////////////////////////////////////// private int indexCycle(int index, int delta) { int size = m_Components.length; int next = (index + delta + size) % size; return next; } private Component cycle(Component currentComponent, int delta) { int index = -1; loop : for (int i = 0; i < m_Components.length; i++) { Component component = m_Components[i]; for (Component c = currentComponent; c != null; c = c.getParent()) { if (component == c) { index = i; break loop; } } } // try to find enabled component in "delta" direction int initialIndex = index; while (true) { int newIndex = indexCycle(index, delta); if (newIndex == initialIndex) { break; } index = newIndex; // Component component = m_Components[newIndex]; if (component.isEnabled() && component.isVisible() && component.isFocusable()) { return component; } } // not found return currentComponent; } //////////////////////////////////////////////////////////////////////////// // // FocusTraversalPolicy // //////////////////////////////////////////////////////////////////////////// public Component getComponentAfter(Container container, Component component) { return cycle(component, 1); } public Component getComponentBefore(Container container, Component component) { return cycle(component, -1); } public Component getFirstComponent(Container container) { return m_Components[0]; } public Component getLastComponent(Container container) { return m_Components[m_Components.length - 1]; } public Component getDefaultComponent(Container container) { return getFirstComponent(container); } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy