⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 componentstylesupport.java

📁 java css java css java css java css
💻 JAVA
字号:
/* * Copyright 2008 Sun Microsystems, Inc.  All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation.   * * This code 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 * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, * CA 95054 USA or visit www.sun.com if you need additional information or * have any questions. */package com.sun.stylesheet.styleable;import java.awt.*;import java.awt.event.*;import java.lang.reflect.*;import java.util.*;import javax.swing.*;import com.sun.stylesheet.*;import com.sun.stylesheet.types.*;/** * Implements <code>Styleable</code> support for {@link Component Components}. * *@author Ethan Nicholas */public class ComponentStyleSupport extends BeanStyleSupport {    static Class jsgPanel;    static Method getScene;    static Method getFxComponentFor;        static {        try {            Class fxComponent = Class.forName("javafx.gui.Component");            getFxComponentFor = fxComponent.getMethod("getComponentFor",                     JComponent.class);        }        catch (ClassNotFoundException e) {            // ignore        }        catch (NoSuchMethodException e) {            throw new RuntimeException(e);        }                try {            jsgPanel = Class.forName("com.sun.scenario.scenegraph.JSGPanel");            getScene = jsgPanel.getMethod("getScene");        }        catch (ClassNotFoundException e) {            // ignore        }        catch (NoSuchMethodException e) {            throw new RuntimeException(e);        }    }            /** Maps PseudoclassListeners to their mouse over adapters. */    private Map<PseudoclassListener, MouseListener> mouseOverListeners;    /** Maps PseudoclassListeners to their mouse down adapters. */    private Map<PseudoclassListener, MouseListener> mouseDownListeners;    /** Maps PseudoclassListeners to their FocusListener adapters. */    private Map<PseudoclassListener, FocusListener> focusListeners;          /**     * Creates a new <code>ComponentStyleSupport</code> for the specified class.     *     *@param cls the specific component class to support     */    public ComponentStyleSupport(Class cls) {        super(cls);    }        /**     * Returns the value of {@link Component#getName}.     *     *@param object the object whose ID is being determined     *@return the object's ID     */    public String getID(Object object) {        return ((Component) object).getName();    }     /**     * Returns the component's style class.  {@link Component Components} do not      * support style classes and so return <code>null</code>, but {@link      * JComponent JComponents} return the value of      * <code>getClientProperty(Stylesheet.STYLE_CLASS_KEY)</code>.     *     *@param object the object whose style class is being determined     *@return the object's style clas     */    public String getStyleClass(Object object) {        if (object instanceof JComponent)            return (String) ((JComponent) object).getClientProperty(                    Stylesheet.STYLE_CLASS_KEY);        else            return null;    }            public Class[] getObjectClasses(Object object) {        Class[] result = super.getObjectClasses(object);        if (object instanceof JComponent && getFxComponentFor != null) {            try {                Object fxObject = getFxComponentFor.invoke(null, object);                if (fxObject != null) {                    Method getRootJComponent = fxObject.getClass().getMethod(                            "getRootJComponent");                    if (getRootJComponent.invoke(fxObject) == object) {                        Class[] tmp = result;                        Class[] interfaces =                                 fxObject.getClass().getInterfaces();                        result = new Class[tmp.length + interfaces.length + 1];                        System.arraycopy(tmp, 0, result, 0, tmp.length);                        System.arraycopy(interfaces, 0, result, tmp.length,                                 interfaces.length);                        result[result.length - 1] = fxObject.getClass();                    }                }            }            catch (Exception e) {                e.printStackTrace();            }        }        return result;    }            /**     * Returns the component's parent wrapped in a <code>Styleable</code>.     *     *@param object the object whose parent is being determined     *@return the object's parent     */    public Styleable getStyleableParent(Object object) {        Container parent = ((Component) object).getParent();        return parent != null ? TypeManager.getStyleable(parent) : null;    }    /**     * Returns the component's children wrapped in a <code>Styleable</code>.     *     *@param object the object whose children are being determined     *@return the object's children     */    public Styleable[] getStyleableChildren(Object object) {        if (jsgPanel != null && jsgPanel.isInstance(object)) {            try {                return new Styleable[] {                         TypeManager.getStyleable(getScene.invoke(object)) };            }            catch (Exception e) {                throw new RuntimeException(e);            }        }        else if (object instanceof Container) {            Container c = (Container) object;            Styleable[] result = new Styleable[c.getComponentCount()];            for (int i = 0; i < result.length; i++)                result[i] = TypeManager.getStyleable(c.getComponent(i));            return result;        }        else            return new Styleable[0];    }    private synchronized FocusListener getFocusListener(            final PseudoclassListener listener,             final PseudoclassEvent event,             final boolean inverse) {        if (focusListeners == null)            focusListeners = new HashMap<PseudoclassListener, FocusListener>();        FocusListener result = focusListeners.get(listener);        if (result == null) {            result = new FocusListener() {                public void focusGained(FocusEvent e) {                    if (inverse)                        listener.pseudoclassRemoved(event);                    else                        listener.pseudoclassAdded(event);                }                        public void focusLost(FocusEvent e) {                    if (inverse)                        listener.pseudoclassAdded(event);                    else                        listener.pseudoclassRemoved(event);                }            };            focusListeners.put(listener, result);        }        return result;    }    private synchronized MouseListener getMouseOverListener(            final PseudoclassListener listener,             final PseudoclassEvent event,             final boolean inverse) {        if (mouseOverListeners == null)            mouseOverListeners =                     new HashMap<PseudoclassListener, MouseListener>();        MouseListener result = mouseOverListeners.get(listener);        if (result == null) {            result = new MouseAdapter() {                @Override                public void mouseEntered(MouseEvent e) {                    if (inverse)                        listener.pseudoclassRemoved(event);                    else                        listener.pseudoclassAdded(event);                }                        @Override                public void mouseExited(MouseEvent e) {                    if (inverse)                        listener.pseudoclassAdded(event);                    else                        listener.pseudoclassRemoved(event);                }            };            mouseOverListeners.put(listener, result);        }        return result;    }            private synchronized MouseListener getMouseDownListener(            final PseudoclassListener listener,             final PseudoclassEvent event,             final boolean inverse) {        if (mouseDownListeners == null)            mouseDownListeners =                     new HashMap<PseudoclassListener, MouseListener>();        MouseListener result = mouseDownListeners.get(listener);        if (result == null) {            result = new MouseAdapter() {                @Override                public void mousePressed(MouseEvent e) {                    if (inverse)                        listener.pseudoclassRemoved(event);                    else                        listener.pseudoclassAdded(event);                }                        @Override                public void mouseReleased(MouseEvent e) {                    if (inverse)                        listener.pseudoclassAdded(event);                    else                        listener.pseudoclassRemoved(event);                }            };            mouseDownListeners.put(listener, result);        }        return result;    }            public void addPseudoclassListener(DefaultStyleable styleable,             String pseudoclass, final PseudoclassListener listener)             throws StylesheetException {        final PseudoclassEvent event = new PseudoclassEvent(styleable,                 pseudoclass);        Component component = (Component) styleable.getBaseObject();        if (pseudoclass.equals("focused") || pseudoclass.equals("unfocused")) {            boolean inverse = pseudoclass.equals("unfocused");            if (component.hasFocus() != inverse)                listener.pseudoclassAdded(event);            component.addFocusListener(getFocusListener(listener, event,                     inverse));        }        else if (pseudoclass.equals("mouseover") ||                 pseudoclass.equals("mouseout")) {            boolean inverse = pseudoclass.equals("mouseout");            if (inverse)                listener.pseudoclassAdded(event);            component.addMouseListener(getMouseOverListener(listener, event,                     inverse));        }        else if (pseudoclass.equals("mousedown") ||                 pseudoclass.equals("mouseup")) {            boolean inverse = pseudoclass.equals("mouseup");            if (inverse)                listener.pseudoclassAdded(event);            component.addMouseListener(getMouseDownListener(listener, event,                     inverse));        }        else            super.addPseudoclassListener(styleable, pseudoclass, listener);    }            public void removePseudoclassListener(DefaultStyleable styleable,             String pseudoclass, final PseudoclassListener listener)             throws StylesheetException {        Component component = (Component) styleable.getBaseObject();        if (pseudoclass.equals("focused") || pseudoclass.equals("unfocused")) {            boolean inverse = pseudoclass.equals("unfocused");            component.removeFocusListener(getFocusListener(listener, null,                     inverse));        }        else if (pseudoclass.equals("mouseover") ||                 pseudoclass.equals("mouseout")) {            boolean inverse = pseudoclass.equals("mouseout");            component.removeMouseListener(getMouseOverListener(listener, null,                     inverse));        }        else if (pseudoclass.equals("mousedown") ||                 pseudoclass.equals("mouseup")) {            boolean inverse = pseudoclass.equals("mouseup");            component.removeMouseListener(getMouseDownListener(listener, null,                     inverse));        }        else            super.removePseudoclassListener(styleable, pseudoclass, listener);    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -