/*
 * Copyright (c) 2002, 2003, Oracle and/or its affiliates. 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.  Oracle designates this
 * particular file as subject to the "Classpath" exception as provided
 * by Oracle in the LICENSE file that accompanied this code.
 *
 * 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 * or visit www.oracle.com if you need additional information or have any
 * questions.
 */
package javax.swing.plaf.synth;

import javax.swing.*;
import java.util.*;

An immutable transient object containing contextual information about a Region. A SynthContext should only be considered valid for the duration of the method it is passed to. In other words you should not cache a SynthContext that is passed to you and expect it to remain valid.
Author:Scott Violet
Since:1.5
/** * An immutable transient object containing contextual information about * a <code>Region</code>. A <code>SynthContext</code> should only be * considered valid for the duration * of the method it is passed to. In other words you should not cache * a <code>SynthContext</code> that is passed to you and expect it to * remain valid. * * @since 1.5 * @author Scott Violet */
public class SynthContext { private static final Map<Class, List<SynthContext>> contextMap; private JComponent component; private Region region; private SynthStyle style; private int state; static { contextMap = new HashMap<Class, List<SynthContext>>(); } static SynthContext getContext(Class type, JComponent component, Region region, SynthStyle style, int state) { SynthContext context = null; synchronized(contextMap) { List<SynthContext> instances = contextMap.get(type); if (instances != null) { int size = instances.size(); if (size > 0) { context = instances.remove(size - 1); } } } if (context == null) { try { context = (SynthContext)type.newInstance(); } catch (IllegalAccessException iae) { } catch (InstantiationException ie) { } } context.reset(component, region, style, state); return context; } static void releaseContext(SynthContext context) { synchronized(contextMap) { List<SynthContext> instances = contextMap.get(context.getClass()); if (instances == null) { instances = new ArrayList<SynthContext>(5); contextMap.put(context.getClass(), instances); } instances.add(context); } } SynthContext() { }
Creates a SynthContext with the specified values. This is meant for subclasses and custom UI implementors. You very rarely need to construct a SynthContext, though some methods will take one.
Params:
  • component – JComponent
  • region – Identifies the portion of the JComponent
  • style – Style associated with the component
  • state – State of the component as defined in SynthConstants.
Throws:
/** * Creates a SynthContext with the specified values. This is meant * for subclasses and custom UI implementors. You very rarely need to * construct a SynthContext, though some methods will take one. * * @param component JComponent * @param region Identifies the portion of the JComponent * @param style Style associated with the component * @param state State of the component as defined in SynthConstants. * @throws NullPointerException if component, region of style is null. */
public SynthContext(JComponent component, Region region, SynthStyle style, int state) { if (component == null || region == null || style == null) { throw new NullPointerException( "You must supply a non-null component, region and style"); } reset(component, region, style, state); }
Returns the hosting component containing the region.
Returns:Hosting Component
/** * Returns the hosting component containing the region. * * @return Hosting Component */
public JComponent getComponent() { return component; }
Returns the Region identifying this state.
Returns:Region of the hosting component
/** * Returns the Region identifying this state. * * @return Region of the hosting component */
public Region getRegion() { return region; }
A convenience method for getRegion().isSubregion().
/** * A convenience method for <code>getRegion().isSubregion()</code>. */
boolean isSubregion() { return getRegion().isSubregion(); } void setStyle(SynthStyle style) { this.style = style; }
Returns the style associated with this Region.
Returns:SynthStyle associated with the region.
/** * Returns the style associated with this Region. * * @return SynthStyle associated with the region. */
public SynthStyle getStyle() { return style; } void setComponentState(int state) { this.state = state; }
Returns the state of the widget, which is a bitmask of the values defined in SynthConstants. A region will at least be in one of ENABLED, MOUSE_OVER, PRESSED or DISABLED.
See Also:
  • SynthConstants
Returns:State of Component
/** * Returns the state of the widget, which is a bitmask of the * values defined in <code>SynthConstants</code>. A region will at least * be in one of * <code>ENABLED</code>, <code>MOUSE_OVER</code>, <code>PRESSED</code> * or <code>DISABLED</code>. * * @see SynthConstants * @return State of Component */
public int getComponentState() { return state; }
Resets the state of the Context.
/** * Resets the state of the Context. */
void reset(JComponent component, Region region, SynthStyle style, int state) { this.component = component; this.region = region; this.style = style; this.state = state; } void dispose() { this.component = null; this.style = null; releaseContext(this); }
Convenience method to get the Painter from the current SynthStyle. This will NEVER return null.
/** * Convenience method to get the Painter from the current SynthStyle. * This will NEVER return null. */
SynthPainter getPainter() { SynthPainter painter = getStyle().getPainter(this); if (painter != null) { return painter; } return SynthPainter.NULL_PAINTER; } }