Main.java Source code

Java tutorial

Introduction

Here is the source code for Main.java

Source

//package com.java2s;
/*
 * This file is part of WebLookAndFeel library.
 *
 * WebLookAndFeel library is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * WebLookAndFeel library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with WebLookAndFeel library.  If not, see <http://www.gnu.org/licenses/>.
 */

import javax.swing.*;

import java.awt.*;

import java.util.*;
import java.util.List;

public class Main {
    /**
     * Client property key that identifies that component can handle enabled state changes.
     */
    public static final String HANDLES_ENABLE_STATE = "HANDLES_ENABLE_STATE";

    /**
     * Disables component and all of its children recursively.
     *
     * @param component       component to disable
     * @param startFromChilds whether should disable only component childs or not
     * @param excludePanels   whether should exclude panels from disabling or not
     * @param excluded        components to exclude from disabling
     * @return list of actually disabled components
     */
    public static List<Component> disableRecursively(final Component component, final boolean startFromChilds,
            final boolean excludePanels, final Component... excluded) {
        return disableRecursively(component, startFromChilds, excludePanels, Arrays.asList(excluded));
    }

    /**
     * Disables component and all of its children recursively.
     *
     * @param component       component to disable
     * @param startFromChilds whether should disable only component childs or not
     * @param excludePanels   whether should exclude panels from disabling or not
     * @param excluded        components to exclude from disabling
     * @return list of actually disabled components
     */
    public static List<Component> disableRecursively(final Component component, final boolean startFromChilds,
            final boolean excludePanels, final List<Component> excluded) {
        final List<Component> disabled = new ArrayList<Component>();
        disableRecursively(component, startFromChilds, excludePanels, excluded, disabled);
        return disabled;
    }

    /**
     * Disables component and all of its children recursively.
     *
     * @param component       component to disable
     * @param startFromChilds whether should disable only component childs or not
     * @param excludePanels   whether should exclude panels from disabling or not
     * @param excluded        components to exclude from disabling
     * @param disabled        list of actually disabled components
     */
    private static void disableRecursively(final Component component, final boolean startFromChilds,
            final boolean excludePanels, final List<Component> excluded, final List<Component> disabled) {
        final boolean b = !startFromChilds && !excluded.contains(component)
                && !(component instanceof JPanel && excludePanels);
        if (b && component.isEnabled()) {
            component.setEnabled(false);
            disabled.add(component);
        }
        if (component instanceof Container) {
            if (b && isHandlesEnableState(component)) {
                return;
            }
            final Container container = (Container) component;
            for (final Component child : container.getComponents()) {
                disableRecursively(child, false, excludePanels, excluded, disabled);
            }
        }
    }

    /**
     * Returns whether HANDLES_ENABLE_STATE mark is set in this component to true or not.
     *
     * @param component component to process
     * @return true if HANDLES_ENABLE_STATE mark is set in this component to true, false otherwise
     */
    public static boolean isHandlesEnableState(final Component component) {
        if (component instanceof JComponent) {
            final Object handlesEnabledState = ((JComponent) component).getClientProperty(HANDLES_ENABLE_STATE);
            if (handlesEnabledState != null && handlesEnabledState instanceof Boolean
                    && (Boolean) handlesEnabledState) {
                return true;
            }
        }
        return false;
    }
}