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

com.vaadin.ui.HasComponents Maven / Gradle / Ivy

There is a newer version: 8.27.3
Show newest version
/*
 * Copyright (C) 2000-2024 Vaadin Ltd
 *
 * This program is available under Vaadin Commercial License and Service Terms.
 *
 * See  for the full
 * license.
 */
package com.vaadin.ui;

import java.io.Serializable;
import java.lang.reflect.Method;
import java.util.Iterator;

import com.vaadin.event.SerializableEventListener;
import com.vaadin.shared.Registration;
import com.vaadin.util.ReflectTools;

/**
 * Interface that must be implemented by all {@link Component}s that contain
 * other {@link Component}s.
 *
 * @author Vaadin Ltd
 * @since 7.0.0
 *
 */
public interface HasComponents extends Component, Iterable {
    /**
     * Gets an iterator to the collection of contained components. Using this
     * iterator it is possible to step through all components contained in this
     * container.
     * 

* The iterator is typically unmodifiable, and calls to * {@link Iterator#remove()} throw an exception. * * @return the component iterator. */ @Override public Iterator iterator(); /** * Interface for {@link HasComponents} implementations that support sending * attach and detach events for components. * * @since 7.0 */ public interface ComponentAttachDetachNotifier extends Serializable { /** * Listens the component attach events. * * @see Registration * * @param listener * the listener to add, not null * @return a registration object for removing the listener * @since 8.0 */ public Registration addComponentAttachListener( ComponentAttachListener listener); /** * Stops the listening component attach events. * * @param listener * the listener to removed. * * @deprecated As of 8.0, replaced by {@link Registration#remove()} in * the registration object returned from * {@link #addComponentAttachListener(ComponentAttachListener)} * . * @since 8.0 */ @Deprecated public void removeComponentAttachListener( ComponentAttachListener listener); /** * Listens the component detach events. */ public Registration addComponentDetachListener( ComponentDetachListener listener); /** * Stops the listening component detach events. */ @Deprecated public void removeComponentDetachListener( ComponentDetachListener listener); } /** * Component attach listener interface. */ @FunctionalInterface public interface ComponentAttachListener extends SerializableEventListener { public static final Method attachMethod = ReflectTools.findMethod( ComponentAttachListener.class, "componentAttachedToContainer", ComponentAttachEvent.class); /** * A new component is attached to container. * * @param event * the component attach event. */ public void componentAttachedToContainer(ComponentAttachEvent event); } /** * Component detach listener interface. */ @FunctionalInterface public interface ComponentDetachListener extends SerializableEventListener { public static final Method detachMethod = ReflectTools.findMethod( ComponentDetachListener.class, "componentDetachedFromContainer", ComponentDetachEvent.class); /** * A component has been detached from container. * * @param event * the component detach event. */ public void componentDetachedFromContainer(ComponentDetachEvent event); } /** * Component attach event sent when a component is attached to container. */ @SuppressWarnings("serial") public static class ComponentAttachEvent extends Component.Event { private final Component component; /** * Creates a new attach event. * * @param container * the container the component has been detached to. * @param attachedComponent * the component that has been attached. */ public ComponentAttachEvent(HasComponents container, Component attachedComponent) { super(container); component = attachedComponent; } /** * Gets the component container. * */ public HasComponents getContainer() { return (HasComponents) getSource(); } /** * Gets the attached component. * */ public Component getAttachedComponent() { return component; } } /** * Component detach event sent when a component is detached from container. */ @SuppressWarnings("serial") public static class ComponentDetachEvent extends Component.Event { private final Component component; /** * Creates a new detach event. * * @param container * the container the component has been detached from. * @param detachedComponent * the component that has been detached. */ public ComponentDetachEvent(HasComponents container, Component detachedComponent) { super(container); component = detachedComponent; } /** * Gets the component container. * */ public HasComponents getContainer() { return (HasComponents) getSource(); } /** * Gets the detached component. * * @return the detached component. */ public Component getDetachedComponent() { return component; } } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy