jdk/src/share/classes/javax/swing/JLayer.java
author peterz
Fri, 25 Dec 2009 17:47:08 +0300
changeset 4842 c9f791782a29
parent 3975 097245f7db08
child 5451 82e4cf75e5b4
permissions -rw-r--r--
6860438: [Nimbus] Code to globally set slider's thumb background doesn't work as specified Reviewed-by: rupashka
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
3508
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
     1
/*
3733
af63479b67b8 6872492: JLayer sources contain wrong header
alexp
parents: 3508
diff changeset
     2
 * Copyright 2009 Sun Microsystems, Inc.  All Rights Reserved.
af63479b67b8 6872492: JLayer sources contain wrong header
alexp
parents: 3508
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
af63479b67b8 6872492: JLayer sources contain wrong header
alexp
parents: 3508
diff changeset
     4
 *
af63479b67b8 6872492: JLayer sources contain wrong header
alexp
parents: 3508
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
af63479b67b8 6872492: JLayer sources contain wrong header
alexp
parents: 3508
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
af63479b67b8 6872492: JLayer sources contain wrong header
alexp
parents: 3508
diff changeset
     7
 * published by the Free Software Foundation.  Sun designates this
af63479b67b8 6872492: JLayer sources contain wrong header
alexp
parents: 3508
diff changeset
     8
 * particular file as subject to the "Classpath" exception as provided
af63479b67b8 6872492: JLayer sources contain wrong header
alexp
parents: 3508
diff changeset
     9
 * by Sun in the LICENSE file that accompanied this code.
af63479b67b8 6872492: JLayer sources contain wrong header
alexp
parents: 3508
diff changeset
    10
 *
af63479b67b8 6872492: JLayer sources contain wrong header
alexp
parents: 3508
diff changeset
    11
 * This code is distributed in the hope that it will be useful, but WITHOUT
af63479b67b8 6872492: JLayer sources contain wrong header
alexp
parents: 3508
diff changeset
    12
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
af63479b67b8 6872492: JLayer sources contain wrong header
alexp
parents: 3508
diff changeset
    13
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
af63479b67b8 6872492: JLayer sources contain wrong header
alexp
parents: 3508
diff changeset
    14
 * version 2 for more details (a copy is included in the LICENSE file that
af63479b67b8 6872492: JLayer sources contain wrong header
alexp
parents: 3508
diff changeset
    15
 * accompanied this code).
af63479b67b8 6872492: JLayer sources contain wrong header
alexp
parents: 3508
diff changeset
    16
 *
af63479b67b8 6872492: JLayer sources contain wrong header
alexp
parents: 3508
diff changeset
    17
 * You should have received a copy of the GNU General Public License version
af63479b67b8 6872492: JLayer sources contain wrong header
alexp
parents: 3508
diff changeset
    18
 * 2 along with this work; if not, write to the Free Software Foundation,
af63479b67b8 6872492: JLayer sources contain wrong header
alexp
parents: 3508
diff changeset
    19
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
af63479b67b8 6872492: JLayer sources contain wrong header
alexp
parents: 3508
diff changeset
    20
 *
af63479b67b8 6872492: JLayer sources contain wrong header
alexp
parents: 3508
diff changeset
    21
 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
af63479b67b8 6872492: JLayer sources contain wrong header
alexp
parents: 3508
diff changeset
    22
 * CA 95054 USA or visit www.sun.com if you need additional information or
af63479b67b8 6872492: JLayer sources contain wrong header
alexp
parents: 3508
diff changeset
    23
 * have any questions.
3508
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
    24
 */
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
    25
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
    26
package javax.swing;
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
    27
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
    28
import javax.swing.plaf.LayerUI;
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
    29
import java.awt.*;
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
    30
import java.awt.event.*;
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
    31
import java.beans.PropertyChangeEvent;
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
    32
import java.beans.PropertyChangeListener;
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
    33
import java.io.IOException;
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
    34
import java.io.ObjectInputStream;
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
    35
import java.io.Serializable;
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
    36
import java.lang.ref.WeakReference;
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
    37
import java.util.ArrayList;
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
    38
import java.util.Iterator;
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
    39
import java.security.AccessController;
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
    40
import java.security.PrivilegedAction;
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
    41
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
    42
/**
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
    43
 * {@code JLayer} is a universal decorator for Swing components
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
    44
 * which enables you to implement various advanced painting effects as well as
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
    45
 * receive notifications of all {@code AWTEvent}s generated within its borders.
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
    46
 * <p/>
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
    47
 * {@code JLayer} delegates the handling of painting and input events to a
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
    48
 * {@link javax.swing.plaf.LayerUI} object, which performs the actual decoration.
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
    49
 * <p/>
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
    50
 * The custom painting implemented in the {@code LayerUI} and events notification
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
    51
 * work for the JLayer itself and all its subcomponents.
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
    52
 * This combination enables you to enrich existing components
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
    53
 * by adding new advanced functionality such as temporary locking of a hierarchy,
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
    54
 * data tips for compound components, enhanced mouse scrolling etc and so on.
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
    55
 * <p/>
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
    56
 * {@code JLayer} is a good solution if you only need to do custom painting
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
    57
 * over compound component or catch input events from its subcomponents.
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
    58
 * <pre>
3973
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
    59
 * import javax.swing.*;
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
    60
 * import javax.swing.plaf.LayerUI;
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
    61
 * import java.awt.*;
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
    62
 *
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
    63
 * public class JLayerSample {
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
    64
 *
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
    65
 *     private static JLayer&lt;JComponent&gt; createLayer() {
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
    66
 *         // This custom layerUI will fill the layer with translucent green
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
    67
 *         // and print out all mouseMotion events generated within its borders
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
    68
 *         LayerUI&lt;JComponent&gt; layerUI = new LayerUI&lt;JComponent&gt;() {
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
    69
 *
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
    70
 *             public void paint(Graphics g, JComponent c) {
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
    71
 *                 // paint the layer as is
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
    72
 *                 super.paint(g, c);
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
    73
 *                 // fill it with the translucent green
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
    74
 *                 g.setColor(new Color(0, 128, 0, 128));
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
    75
 *                 g.fillRect(0, 0, c.getWidth(), c.getHeight());
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
    76
 *             }
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
    77
 *
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
    78
 *             public void installUI(JComponent c) {
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
    79
 *                 super.installUI(c);
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
    80
 *                 // enable mouse motion events for the layer's subcomponents
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
    81
 *                 ((JLayer) c).setLayerEventMask(AWTEvent.MOUSE_MOTION_EVENT_MASK);
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
    82
 *             }
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
    83
 *
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
    84
 *             public void uninstallUI(JComponent c) {
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
    85
 *                 super.uninstallUI(c);
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
    86
 *                 // reset the layer event mask
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
    87
 *                 ((JLayer) c).setLayerEventMask(0);
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
    88
 *             }
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
    89
 *
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
    90
 *             // overridden method which catches MouseMotion events
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
    91
 *             public void eventDispatched(AWTEvent e, JLayer&lt;? extends JComponent&gt; l) {
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
    92
 *                 System.out.println("AWTEvent detected: " + e);
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
    93
 *             }
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
    94
 *         };
3508
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
    95
 *         // create a component to be decorated with the layer
3973
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
    96
 *         JPanel panel = new JPanel();
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
    97
 *         panel.add(new JButton("JButton"));
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
    98
 *
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
    99
 *         // create the layer for the panel using our custom layerUI
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
   100
 *         return new JLayer&lt;JComponent&gt;(panel, layerUI);
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
   101
 *     }
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
   102
 *
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
   103
 *     private static void createAndShowGUI() {
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
   104
 *         final JFrame frame = new JFrame();
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
   105
 *         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
   106
 *
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
   107
 *         // work with the layer as with any other Swing component
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
   108
 *         frame.add(createLayer());
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
   109
 *
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
   110
 *         frame.setSize(200, 200);
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
   111
 *         frame.setLocationRelativeTo(null);
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
   112
 *         frame.setVisible(true);
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
   113
 *     }
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
   114
 *
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
   115
 *     public static void main(String[] args) throws Exception {
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
   116
 *         SwingUtilities.invokeAndWait(new Runnable() {
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
   117
 *             public void run() {
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
   118
 *                 createAndShowGUI();
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
   119
 *             }
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
   120
 *         });
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
   121
 *     }
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
   122
 * }
3508
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   123
 * </pre>
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   124
 *
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   125
 * <b>Note:</b> {@code JLayer} doesn't support the following methods:
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   126
 * <ul>
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   127
 * <li>{@link Container#add(java.awt.Component)}</li>
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   128
 * <li>{@link Container#add(String, java.awt.Component)}</li>
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   129
 * <li>{@link Container#add(java.awt.Component, int)}</li>
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   130
 * <li>{@link Container#add(java.awt.Component, Object)}</li>
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   131
 * <li>{@link Container#add(java.awt.Component, Object, int)}</li>
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   132
 * </ul>
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   133
 * using any of of them will cause {@code UnsupportedOperationException} to be thrown,
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   134
 * to add a component to {@code JLayer}
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   135
 * use {@link #setView(Component)} or {@link #setGlassPane(JPanel)}.
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   136
 *
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   137
 * @param <V> the type of {@code JLayer}'s view component
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   138
 *
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   139
 * @see #JLayer(Component)
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   140
 * @see #setView(Component)
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   141
 * @see #getView()
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   142
 * @see javax.swing.plaf.LayerUI
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   143
 * @see #JLayer(Component, LayerUI)
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   144
 * @see #setUI(javax.swing.plaf.LayerUI)
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   145
 * @see #getUI()
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   146
 * @since 1.7
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   147
 *
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   148
 * @author Alexander Potochkin
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   149
 */
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   150
public final class JLayer<V extends Component>
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   151
        extends JComponent
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   152
        implements Scrollable, PropertyChangeListener {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   153
    private V view;
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   154
    // this field is necessary because JComponent.ui is transient
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   155
    // when layerUI is serializable
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   156
    private LayerUI<? super V> layerUI;
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   157
    private JPanel glassPane;
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   158
    private boolean isPainting;
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   159
    private static final DefaultLayerLayout sharedLayoutInstance =
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   160
            new DefaultLayerLayout();
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   161
    private long eventMask;
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   162
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   163
    private static final LayerEventController eventController =
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   164
            new LayerEventController();
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   165
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   166
    private static final long ACCEPTED_EVENTS =
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   167
            AWTEvent.COMPONENT_EVENT_MASK |
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   168
                    AWTEvent.CONTAINER_EVENT_MASK |
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   169
                    AWTEvent.FOCUS_EVENT_MASK |
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   170
                    AWTEvent.KEY_EVENT_MASK |
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   171
                    AWTEvent.MOUSE_WHEEL_EVENT_MASK |
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   172
                    AWTEvent.MOUSE_MOTION_EVENT_MASK |
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   173
                    AWTEvent.MOUSE_EVENT_MASK |
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   174
                    AWTEvent.INPUT_METHOD_EVENT_MASK |
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   175
                    AWTEvent.HIERARCHY_EVENT_MASK |
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   176
                    AWTEvent.HIERARCHY_BOUNDS_EVENT_MASK;
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   177
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   178
    /**
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   179
     * Creates a new {@code JLayer} object with a {@code null} view component
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   180
     * and {@code null} {@link javax.swing.plaf.LayerUI}.
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   181
     *
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   182
     * @see #setView
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   183
     * @see #setUI
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   184
     */
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   185
    public JLayer() {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   186
        this(null);
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   187
    }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   188
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   189
    /**
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   190
     * Creates a new {@code JLayer} object
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   191
     * with {@code null} {@link javax.swing.plaf.LayerUI}.
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   192
     *
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   193
     * @param view the component to be decorated by this {@code JLayer}
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   194
     *
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   195
     * @see #setUI
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   196
     */
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   197
    public JLayer(V view) {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   198
        this(view, null);
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   199
    }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   200
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   201
    /**
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   202
     * Creates a new {@code JLayer} object with the specified view component
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   203
     * and {@link javax.swing.plaf.LayerUI} object.
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   204
     *
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   205
     * @param view the component to be decorated
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   206
     * @param ui the {@link javax.swing.plaf.LayerUI} delegate
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   207
     * to be used by this {@code JLayer}
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   208
     */
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   209
    public JLayer(V view, LayerUI<V> ui) {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   210
        setLayout(sharedLayoutInstance);
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   211
        setGlassPane(createGlassPane());
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   212
        setView(view);
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   213
        setUI(ui);
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   214
    }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   215
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   216
    /**
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   217
     * Returns the {@code JLayer}'s view component or {@code null}.
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   218
     * <br/>This is a bound property.
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   219
     *
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   220
     * @return the {@code JLayer}'s view component
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   221
     *         or {@code null} if none exists
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   222
     *
3748
b88af44d77a8 6875153: JLayer.isOptimizedDrawingEnabled() throws NPE for null glass pane set
alexp
parents: 3743
diff changeset
   223
     * @see #setView(Component)
3508
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   224
     */
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   225
    public V getView() {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   226
        return view;
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   227
    }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   228
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   229
    /**
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   230
     * Sets the {@code JLayer}'s view component, which can be {@code null}.
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   231
     * <br/>This is a bound property.
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   232
     *
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   233
     * @param view the view component for this {@code JLayer}
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   234
     *
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   235
     * @see #getView()
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   236
     */
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   237
    public void setView(V view) {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   238
        Component oldView = getView();
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   239
        if (oldView != null) {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   240
            super.remove(oldView);
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   241
        }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   242
        if (view != null) {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   243
            super.addImpl(view, null, getComponentCount());
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   244
        }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   245
        this.view = view;
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   246
        firePropertyChange("view", oldView, view);
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   247
        revalidate();
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   248
        repaint();
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   249
    }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   250
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   251
    /**
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   252
     * Sets the {@link javax.swing.plaf.LayerUI} which will perform painting
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   253
     * and receive input events for this {@code JLayer}.
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   254
     *
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   255
     * @param ui the {@link javax.swing.plaf.LayerUI} for this {@code JLayer}
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   256
     */
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   257
    public void setUI(LayerUI<? super V> ui) {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   258
        this.layerUI = ui;
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   259
        super.setUI(ui);
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   260
    }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   261
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   262
    /**
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   263
     * Returns the {@link javax.swing.plaf.LayerUI} for this {@code JLayer}.
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   264
     *
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   265
     * @return the {@code LayerUI} for this {@code JLayer}
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   266
     */
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   267
    public LayerUI<? super V> getUI() {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   268
        return layerUI;
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   269
    }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   270
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   271
    /**
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   272
     * Returns the {@code JLayer}'s glassPane component or {@code null}.
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   273
     * <br/>This is a bound property.
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   274
     *
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   275
     * @return the {@code JLayer}'s glassPane component
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   276
     *         or {@code null} if none exists
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   277
     *
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   278
     * @see #setGlassPane(JPanel)
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   279
     */
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   280
    public JPanel getGlassPane() {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   281
        return glassPane;
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   282
    }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   283
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   284
    /**
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   285
     * Sets the {@code JLayer}'s glassPane component, which can be {@code null}.
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   286
     * <br/>This is a bound property.
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   287
     *
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   288
     * @param glassPane the glassPane component of this {@code JLayer}
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   289
     *
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   290
     * @see #getGlassPane()
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   291
     */
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   292
    public void setGlassPane(JPanel glassPane) {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   293
        Component oldGlassPane = getGlassPane();
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   294
        if (oldGlassPane != null) {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   295
            super.remove(oldGlassPane);
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   296
        }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   297
        if (glassPane != null) {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   298
            super.addImpl(glassPane, null, 0);
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   299
        }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   300
        this.glassPane = glassPane;
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   301
        firePropertyChange("glassPane", oldGlassPane, glassPane);
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   302
        revalidate();
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   303
        repaint();
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   304
    }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   305
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   306
    /**
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   307
     * Called by the constructor methods to create a default {@code glassPane}.
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   308
     * By default this method creates a new JPanel with visibility set to true
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   309
     * and opacity set to false.
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   310
     *
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   311
     * @return the default {@code glassPane}
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   312
     */
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   313
    public JPanel createGlassPane() {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   314
        return new DefaultLayerGlassPane();
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   315
    }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   316
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   317
    /**
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   318
     * This method is not supported by {@code JLayer}
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   319
     * and always throws {@code UnsupportedOperationException}
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   320
     *
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   321
     * @throws UnsupportedOperationException this method is not supported
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   322
     *
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   323
     * @see #setView(Component)
3748
b88af44d77a8 6875153: JLayer.isOptimizedDrawingEnabled() throws NPE for null glass pane set
alexp
parents: 3743
diff changeset
   324
     * @see #setGlassPane(JPanel)
3508
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   325
     */
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   326
    protected void addImpl(Component comp, Object constraints, int index) {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   327
        throw new UnsupportedOperationException(
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   328
                "Adding components to JLayer is not supported, " +
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   329
                        "use setView() or setGlassPane() instead");
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   330
    }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   331
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   332
    /**
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   333
     * {@inheritDoc}
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   334
     */
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   335
    public void remove(Component comp) {
3975
097245f7db08 6875716: JLayer.remove((Component)null) should behave consistently in (not) throwing NPE
alexp
parents: 3973
diff changeset
   336
        if (comp == null) {
097245f7db08 6875716: JLayer.remove((Component)null) should behave consistently in (not) throwing NPE
alexp
parents: 3973
diff changeset
   337
            super.remove(comp);
097245f7db08 6875716: JLayer.remove((Component)null) should behave consistently in (not) throwing NPE
alexp
parents: 3973
diff changeset
   338
        } else if (comp == getView()) {
3508
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   339
            setView(null);
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   340
        } else if (comp == getGlassPane()) {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   341
            setGlassPane(null);
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   342
        } else {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   343
            super.remove(comp);
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   344
        }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   345
    }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   346
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   347
    /**
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   348
     * {@inheritDoc}
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   349
     */
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   350
    public void removeAll() {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   351
        setView(null);
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   352
        setGlassPane(null);
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   353
    }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   354
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   355
    /**
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   356
     * Delegates all painting to the {@link javax.swing.plaf.LayerUI} object.
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   357
     *
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   358
     * @param g the {@code Graphics} to render to
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   359
     */
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   360
    public void paint(Graphics g) {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   361
        if (!isPainting) {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   362
            isPainting = true;
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   363
            super.paintComponent(g);
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   364
            isPainting = false;
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   365
        } else {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   366
            super.paint(g);
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   367
        }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   368
    }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   369
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   370
    /**
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   371
     * This method is empty, because all painting is done by
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   372
     * {@link #paint(Graphics)} and
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   373
     * {@link javax.swing.plaf.LayerUI#update(Graphics, JComponent)} methods
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   374
     */
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   375
    protected void paintComponent(Graphics g) {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   376
    }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   377
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   378
    /**
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   379
     * To enable the correct painting of the {@code glassPane} and view component,
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   380
     * the {@code JLayer} overrides the default implementation of
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   381
     * this method to return {@code false} when the {@code glassPane} is visible.
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   382
     *
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   383
     * @return false if {@code JLayer}'s {@code glassPane} is visible
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   384
     */
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   385
    public boolean isOptimizedDrawingEnabled() {
3748
b88af44d77a8 6875153: JLayer.isOptimizedDrawingEnabled() throws NPE for null glass pane set
alexp
parents: 3743
diff changeset
   386
        return glassPane == null || !glassPane.isVisible();
3508
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   387
    }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   388
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   389
    /**
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   390
     * {@inheritDoc}
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   391
     */
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   392
    public void propertyChange(PropertyChangeEvent evt) {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   393
        if (getUI() != null) {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   394
            getUI().applyPropertyChange(evt, this);
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   395
        }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   396
    }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   397
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   398
    /**
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   399
     * Sets the bitmask of event types to receive by this {@code JLayer}.
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   400
     * Here is the list of the supported event types:
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   401
     * <ul>
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   402
     * <li>AWTEvent.COMPONENT_EVENT_MASK</li>
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   403
     * <li>AWTEvent.CONTAINER_EVENT_MASK</li>
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   404
     * <li>AWTEvent.FOCUS_EVENT_MASK</li>
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   405
     * <li>AWTEvent.KEY_EVENT_MASK</li>
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   406
     * <li>AWTEvent.MOUSE_WHEEL_EVENT_MASK</li>
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   407
     * <li>AWTEvent.MOUSE_MOTION_EVENT_MASK</li>
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   408
     * <li>AWTEvent.MOUSE_EVENT_MASK</li>
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   409
     * <li>AWTEvent.INPUT_METHOD_EVENT_MASK</li>
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   410
     * <li>AWTEvent.HIERARCHY_EVENT_MASK</li>
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   411
     * <li>AWTEvent.HIERARCHY_BOUNDS_EVENT_MASK</li>
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   412
     * </ul>
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   413
     * <p/>
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   414
     * If {@code LayerUI} is installed,
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   415
     * {@link javax.swing.plaf.LayerUI#eventDispatched(AWTEvent, JLayer)} method
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   416
     * will only receive events that match the event mask.
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   417
     * <p/>
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   418
     * The following example shows how to correclty use this method
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   419
     * in the {@code LayerUI} implementations:
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   420
     * <pre>
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   421
     *    public void installUI(JComponent c) {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   422
     *       super.installUI(c);
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   423
     *       JLayer l = (JLayer) c;
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   424
     *       // this LayerUI will receive only key and focus events
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   425
     *       l.setLayerEventMask(AWTEvent.KEY_EVENT_MASK | AWTEvent.FOCUS_EVENT_MASK);
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   426
     *    }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   427
     *
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   428
     *    public void uninstallUI(JComponent c) {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   429
     *       super.uninstallUI(c);
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   430
     *       JLayer l = (JLayer) c;
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   431
     *       // JLayer must be returned to its initial state
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   432
     *       l.setLayerEventMask(0);
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   433
     *    }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   434
     * </pre>
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   435
     *
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   436
     * By default {@code JLayer} receives no events.
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   437
     *
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   438
     * @param layerEventMask the bitmask of event types to receive
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   439
     *
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   440
     * @throws IllegalArgumentException if the {@code layerEventMask} parameter
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   441
     * contains unsupported event types
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   442
     * @see #getLayerEventMask()
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   443
     */
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   444
    public void setLayerEventMask(long layerEventMask) {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   445
        if (layerEventMask != (layerEventMask & ACCEPTED_EVENTS)) {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   446
            throw new IllegalArgumentException(
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   447
                    "The event bitmask contains unsupported event types");
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   448
        }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   449
        long oldEventMask = getLayerEventMask();
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   450
        this.eventMask = layerEventMask;
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   451
        firePropertyChange("layerEventMask", oldEventMask, layerEventMask);
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   452
        if (layerEventMask != oldEventMask) {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   453
            disableEvents(oldEventMask);
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   454
            enableEvents(eventMask);
3743
906063616ec2 6872503: JLayer event handling should be rewritten
alexp
parents: 3737
diff changeset
   455
            if (isDisplayable()) {
906063616ec2 6872503: JLayer event handling should be rewritten
alexp
parents: 3737
diff changeset
   456
                eventController.updateAWTEventListener(
906063616ec2 6872503: JLayer event handling should be rewritten
alexp
parents: 3737
diff changeset
   457
                        oldEventMask, layerEventMask);
906063616ec2 6872503: JLayer event handling should be rewritten
alexp
parents: 3737
diff changeset
   458
            }
3508
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   459
        }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   460
    }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   461
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   462
    /**
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   463
     * Returns the bitmap of event mask to receive by this {@code JLayer}
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   464
     * and its {@code LayerUI}.
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   465
     * <p/>
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   466
     * It means that {@link javax.swing.plaf.LayerUI#eventDispatched(AWTEvent, JLayer)} method
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   467
     * will only receive events that match the event mask.
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   468
     * <p/>
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   469
     * By default {@code JLayer} receives no events.
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   470
     *
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   471
     * @return the bitmask of event types to receive for this {@code JLayer}
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   472
     */
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   473
    public long getLayerEventMask() {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   474
        return eventMask;
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   475
    }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   476
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   477
    /**
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   478
     * Delegates its functionality to the {@link javax.swing.plaf.LayerUI#updateUI(JLayer)} method,
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   479
     * if {@code LayerUI} is set.
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   480
     */
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   481
    public void updateUI() {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   482
        if (getUI() != null) {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   483
            getUI().updateUI(this);
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   484
        }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   485
    }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   486
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   487
    /**
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   488
     * Returns the preferred size of the viewport for a view component.
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   489
     * <p/>
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   490
     * If the ui delegate of this layer is not {@code null}, this method delegates its
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   491
     * implementation to the {@code LayerUI.getPreferredScrollableViewportSize(JLayer)}
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   492
     *
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   493
     * @return the preferred size of the viewport for a view component
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   494
     *
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   495
     * @see Scrollable
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   496
     * @see LayerUI#getPreferredScrollableViewportSize(JLayer)
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   497
     */
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   498
    public Dimension getPreferredScrollableViewportSize() {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   499
        if (getUI() != null) {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   500
            return getUI().getPreferredScrollableViewportSize(this);
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   501
        }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   502
        return getPreferredSize();
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   503
    }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   504
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   505
    /**
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   506
     * Returns a scroll increment, which is required for components
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   507
     * that display logical rows or columns in order to completely expose
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   508
     * one block of rows or columns, depending on the value of orientation.
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   509
     * <p/>
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   510
     * If the ui delegate of this layer is not {@code null}, this method delegates its
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   511
     * implementation to the {@code LayerUI.getScrollableBlockIncrement(JLayer,Rectangle,int,int)}
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   512
     *
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   513
     * @return the "block" increment for scrolling in the specified direction
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   514
     *
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   515
     * @see Scrollable
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   516
     * @see LayerUI#getScrollableBlockIncrement(JLayer, Rectangle, int, int)
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   517
     */
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   518
    public int getScrollableBlockIncrement(Rectangle visibleRect,
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   519
                                           int orientation, int direction) {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   520
        if (getUI() != null) {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   521
            return getUI().getScrollableBlockIncrement(this, visibleRect,
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   522
                    orientation, direction);
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   523
        }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   524
        return (orientation == SwingConstants.VERTICAL) ? visibleRect.height :
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   525
                visibleRect.width;
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   526
    }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   527
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   528
    /**
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   529
     * Returns {@code false} to indicate that the height of the viewport does not
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   530
     * determine the height of the layer, unless the preferred height
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   531
     * of the layer is smaller than the height of the viewport.
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   532
     * <p/>
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   533
     * If the ui delegate of this layer is not null, this method delegates its
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   534
     * implementation to the {@code LayerUI.getScrollableTracksViewportHeight(JLayer)}
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   535
     *
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   536
     * @return whether the layer should track the height of the viewport
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   537
     *
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   538
     * @see Scrollable
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   539
     * @see LayerUI#getScrollableTracksViewportHeight(JLayer)
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   540
     */
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   541
    public boolean getScrollableTracksViewportHeight() {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   542
        if (getUI() != null) {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   543
            return getUI().getScrollableTracksViewportHeight(this);
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   544
        }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   545
        return false;
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   546
    }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   547
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   548
    /**
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   549
     * Returns {@code false} to indicate that the width of the viewport does not
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   550
     * determine the width of the layer, unless the preferred width
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   551
     * of the layer is smaller than the width of the viewport.
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   552
     * <p/>
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   553
     * If the ui delegate of this layer is not null, this method delegates its
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   554
     * implementation to the {@code LayerUI.getScrollableTracksViewportWidth(JLayer)}
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   555
     *
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   556
     * @return whether the layer should track the width of the viewport
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   557
     *
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   558
     * @see Scrollable
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   559
     * @see LayerUI#getScrollableTracksViewportWidth(JLayer)
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   560
     */
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   561
    public boolean getScrollableTracksViewportWidth() {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   562
        if (getUI() != null) {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   563
            return getUI().getScrollableTracksViewportWidth(this);
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   564
        }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   565
        return false;
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   566
    }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   567
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   568
    /**
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   569
     * Returns a scroll increment, which is required for components
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   570
     * that display logical rows or columns in order to completely expose
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   571
     * one new row or column, depending on the value of orientation.
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   572
     * Ideally, components should handle a partially exposed row or column
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   573
     * by returning the distance required to completely expose the item.
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   574
     * <p/>
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   575
     * Scrolling containers, like {@code JScrollPane}, will use this method
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   576
     * each time the user requests a unit scroll.
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   577
     * <p/>
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   578
     * If the ui delegate of this layer is not {@code null}, this method delegates its
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   579
     * implementation to the {@code LayerUI.getScrollableUnitIncrement(JLayer,Rectangle,int,int)}
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   580
     *
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   581
     * @return The "unit" increment for scrolling in the specified direction.
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   582
     *         This value should always be positive.
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   583
     *
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   584
     * @see Scrollable
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   585
     * @see LayerUI#getScrollableUnitIncrement(JLayer, Rectangle, int, int)
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   586
     */
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   587
    public int getScrollableUnitIncrement(Rectangle visibleRect, int orientation,
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   588
                                          int direction) {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   589
        if (getUI() != null) {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   590
            return getUI().getScrollableUnitIncrement(
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   591
                    this, visibleRect, orientation, direction);
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   592
        }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   593
        return 1;
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   594
    }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   595
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   596
    private void readObject(ObjectInputStream s)
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   597
            throws IOException, ClassNotFoundException {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   598
        s.defaultReadObject();
3743
906063616ec2 6872503: JLayer event handling should be rewritten
alexp
parents: 3737
diff changeset
   599
        if (layerUI != null) {
906063616ec2 6872503: JLayer event handling should be rewritten
alexp
parents: 3737
diff changeset
   600
            setUI(layerUI);
906063616ec2 6872503: JLayer event handling should be rewritten
alexp
parents: 3737
diff changeset
   601
        }
906063616ec2 6872503: JLayer event handling should be rewritten
alexp
parents: 3737
diff changeset
   602
        if (eventMask != 0) {
906063616ec2 6872503: JLayer event handling should be rewritten
alexp
parents: 3737
diff changeset
   603
            eventController.updateAWTEventListener(0, eventMask);
3508
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   604
        }
3743
906063616ec2 6872503: JLayer event handling should be rewritten
alexp
parents: 3737
diff changeset
   605
    }
906063616ec2 6872503: JLayer event handling should be rewritten
alexp
parents: 3737
diff changeset
   606
3748
b88af44d77a8 6875153: JLayer.isOptimizedDrawingEnabled() throws NPE for null glass pane set
alexp
parents: 3743
diff changeset
   607
    /**
b88af44d77a8 6875153: JLayer.isOptimizedDrawingEnabled() throws NPE for null glass pane set
alexp
parents: 3743
diff changeset
   608
     * {@inheritDoc}
b88af44d77a8 6875153: JLayer.isOptimizedDrawingEnabled() throws NPE for null glass pane set
alexp
parents: 3743
diff changeset
   609
     */
3743
906063616ec2 6872503: JLayer event handling should be rewritten
alexp
parents: 3737
diff changeset
   610
    public void addNotify() {
3748
b88af44d77a8 6875153: JLayer.isOptimizedDrawingEnabled() throws NPE for null glass pane set
alexp
parents: 3743
diff changeset
   611
        super.addNotify();
3743
906063616ec2 6872503: JLayer event handling should be rewritten
alexp
parents: 3737
diff changeset
   612
        eventController.updateAWTEventListener(0, eventMask);
906063616ec2 6872503: JLayer event handling should be rewritten
alexp
parents: 3737
diff changeset
   613
    }
906063616ec2 6872503: JLayer event handling should be rewritten
alexp
parents: 3737
diff changeset
   614
3748
b88af44d77a8 6875153: JLayer.isOptimizedDrawingEnabled() throws NPE for null glass pane set
alexp
parents: 3743
diff changeset
   615
    /**
b88af44d77a8 6875153: JLayer.isOptimizedDrawingEnabled() throws NPE for null glass pane set
alexp
parents: 3743
diff changeset
   616
     * {@inheritDoc}
b88af44d77a8 6875153: JLayer.isOptimizedDrawingEnabled() throws NPE for null glass pane set
alexp
parents: 3743
diff changeset
   617
     */
3743
906063616ec2 6872503: JLayer event handling should be rewritten
alexp
parents: 3737
diff changeset
   618
    public void removeNotify() {
3748
b88af44d77a8 6875153: JLayer.isOptimizedDrawingEnabled() throws NPE for null glass pane set
alexp
parents: 3743
diff changeset
   619
        super.removeNotify();
3743
906063616ec2 6872503: JLayer event handling should be rewritten
alexp
parents: 3737
diff changeset
   620
        eventController.updateAWTEventListener(eventMask, 0);
3508
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   621
    }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   622
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   623
    /**
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   624
     * static AWTEventListener to be shared with all AbstractLayerUIs
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   625
     */
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   626
    private static class LayerEventController implements AWTEventListener {
3743
906063616ec2 6872503: JLayer event handling should be rewritten
alexp
parents: 3737
diff changeset
   627
        private ArrayList<Long> layerMaskList =
906063616ec2 6872503: JLayer event handling should be rewritten
alexp
parents: 3737
diff changeset
   628
                new ArrayList<Long>();
3508
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   629
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   630
        private long currentEventMask;
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   631
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   632
        @SuppressWarnings("unchecked")
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   633
        public void eventDispatched(AWTEvent event) {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   634
            Object source = event.getSource();
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   635
            if (source instanceof Component) {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   636
                Component component = (Component) source;
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   637
                while (component != null) {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   638
                    if (component instanceof JLayer) {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   639
                        JLayer l = (JLayer) component;
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   640
                        LayerUI ui = l.getUI();
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   641
                        if (ui != null &&
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   642
                                isEventEnabled(l.getLayerEventMask(),
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   643
                                        event.getID())) {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   644
                            ui.eventDispatched(event, l);
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   645
                        }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   646
                    }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   647
                    component = component.getParent();
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   648
                }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   649
            }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   650
        }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   651
3743
906063616ec2 6872503: JLayer event handling should be rewritten
alexp
parents: 3737
diff changeset
   652
        private void updateAWTEventListener(long oldEventMask, long newEventMask) {
906063616ec2 6872503: JLayer event handling should be rewritten
alexp
parents: 3737
diff changeset
   653
            if (oldEventMask != 0) {
906063616ec2 6872503: JLayer event handling should be rewritten
alexp
parents: 3737
diff changeset
   654
                layerMaskList.remove(oldEventMask);
3508
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   655
            }
3743
906063616ec2 6872503: JLayer event handling should be rewritten
alexp
parents: 3737
diff changeset
   656
            if (newEventMask != 0) {
906063616ec2 6872503: JLayer event handling should be rewritten
alexp
parents: 3737
diff changeset
   657
                layerMaskList.add(newEventMask);
3508
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   658
            }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   659
            long combinedMask = 0;
3743
906063616ec2 6872503: JLayer event handling should be rewritten
alexp
parents: 3737
diff changeset
   660
            for (Long mask : layerMaskList) {
906063616ec2 6872503: JLayer event handling should be rewritten
alexp
parents: 3737
diff changeset
   661
                combinedMask |= mask;
3508
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   662
            }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   663
            if (combinedMask == 0) {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   664
                removeAWTEventListener();
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   665
            } else if (getCurrentEventMask() != combinedMask) {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   666
                removeAWTEventListener();
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   667
                addAWTEventListener(combinedMask);
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   668
            }
3743
906063616ec2 6872503: JLayer event handling should be rewritten
alexp
parents: 3737
diff changeset
   669
            currentEventMask = combinedMask;
3508
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   670
        }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   671
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   672
        private long getCurrentEventMask() {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   673
            return currentEventMask;
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   674
        }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   675
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   676
        private void addAWTEventListener(final long eventMask) {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   677
            AccessController.doPrivileged(new PrivilegedAction<Void>() {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   678
                public Void run() {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   679
                    Toolkit.getDefaultToolkit().
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   680
                            addAWTEventListener(LayerEventController.this, eventMask);
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   681
                    return null;
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   682
                }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   683
            });
3743
906063616ec2 6872503: JLayer event handling should be rewritten
alexp
parents: 3737
diff changeset
   684
3508
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   685
        }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   686
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   687
        private void removeAWTEventListener() {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   688
            AccessController.doPrivileged(new PrivilegedAction<Void>() {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   689
                public Void run() {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   690
                    Toolkit.getDefaultToolkit().
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   691
                            removeAWTEventListener(LayerEventController.this);
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   692
                    return null;
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   693
                }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   694
            });
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   695
        }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   696
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   697
        private boolean isEventEnabled(long eventMask, int id) {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   698
            return (((eventMask & AWTEvent.COMPONENT_EVENT_MASK) != 0 &&
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   699
                    id >= ComponentEvent.COMPONENT_FIRST &&
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   700
                    id <= ComponentEvent.COMPONENT_LAST)
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   701
                    || ((eventMask & AWTEvent.CONTAINER_EVENT_MASK) != 0 &&
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   702
                    id >= ContainerEvent.CONTAINER_FIRST &&
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   703
                    id <= ContainerEvent.CONTAINER_LAST)
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   704
                    || ((eventMask & AWTEvent.FOCUS_EVENT_MASK) != 0 &&
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   705
                    id >= FocusEvent.FOCUS_FIRST &&
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   706
                    id <= FocusEvent.FOCUS_LAST)
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   707
                    || ((eventMask & AWTEvent.KEY_EVENT_MASK) != 0 &&
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   708
                    id >= KeyEvent.KEY_FIRST &&
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   709
                    id <= KeyEvent.KEY_LAST)
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   710
                    || ((eventMask & AWTEvent.MOUSE_WHEEL_EVENT_MASK) != 0 &&
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   711
                    id == MouseEvent.MOUSE_WHEEL)
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   712
                    || ((eventMask & AWTEvent.MOUSE_MOTION_EVENT_MASK) != 0 &&
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   713
                    (id == MouseEvent.MOUSE_MOVED ||
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   714
                            id == MouseEvent.MOUSE_DRAGGED))
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   715
                    || ((eventMask & AWTEvent.MOUSE_EVENT_MASK) != 0 &&
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   716
                    id != MouseEvent.MOUSE_MOVED &&
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   717
                    id != MouseEvent.MOUSE_DRAGGED &&
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   718
                    id != MouseEvent.MOUSE_WHEEL &&
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   719
                    id >= MouseEvent.MOUSE_FIRST &&
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   720
                    id <= MouseEvent.MOUSE_LAST)
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   721
                    || ((eventMask & AWTEvent.INPUT_METHOD_EVENT_MASK) != 0 &&
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   722
                    id >= InputMethodEvent.INPUT_METHOD_FIRST &&
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   723
                    id <= InputMethodEvent.INPUT_METHOD_LAST)
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   724
                    || ((eventMask & AWTEvent.HIERARCHY_EVENT_MASK) != 0 &&
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   725
                    id == HierarchyEvent.HIERARCHY_CHANGED)
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   726
                    || ((eventMask & AWTEvent.HIERARCHY_BOUNDS_EVENT_MASK) != 0 &&
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   727
                    (id == HierarchyEvent.ANCESTOR_MOVED ||
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   728
                            id == HierarchyEvent.ANCESTOR_RESIZED)));
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   729
        }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   730
    }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   731
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   732
    /**
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   733
     * The default glassPane for the {@link javax.swing.JLayer}.
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   734
     * It is a subclass of {@code JPanel} which is non opaque by default.
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   735
     */
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   736
    private static class DefaultLayerGlassPane extends JPanel {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   737
        /**
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   738
         * Creates a new {@link DefaultLayerGlassPane}
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   739
         */
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   740
        public DefaultLayerGlassPane() {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   741
            setOpaque(false);
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   742
        }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   743
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   744
        /**
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   745
         * First, implementatation of this method iterates through
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   746
         * glassPane's child components and returns {@code true}
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   747
         * if any of them is visible and contains passed x,y point.
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   748
         * After that it checks if no mouseListeners is attached to this component
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   749
         * and no mouse cursor is set, then it returns {@code false},
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   750
         * otherwise calls the super implementation of this method.
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   751
         *
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   752
         * @param x the <i>x</i> coordinate of the point
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   753
         * @param y the <i>y</i> coordinate of the point
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   754
         * @return true if this component logically contains x,y
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   755
         */
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   756
        public boolean contains(int x, int y) {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   757
            for (int i = 0; i < getComponentCount(); i++) {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   758
                Component c = getComponent(i);
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   759
                Point point = SwingUtilities.convertPoint(this, new Point(x, y), c);
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   760
                if(c.isVisible() && c.contains(point)){
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   761
                    return true;
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   762
                }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   763
            }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   764
            if (getMouseListeners().length == 0
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   765
                    && getMouseMotionListeners().length == 0
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   766
                    && getMouseWheelListeners().length == 0
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   767
                    && !isCursorSet()) {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   768
                return false;
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   769
            }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   770
            return super.contains(x, y);
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   771
        }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   772
    }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   773
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   774
    /**
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   775
     * The default layout manager for the {@link javax.swing.JLayer}.<br/>
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   776
     * It places the glassPane on top of the view component
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   777
     * and makes it the same size as {@code JLayer},
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   778
     * it also makes the view component the same size but minus layer's insets<br/>
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   779
     */
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   780
    private static class DefaultLayerLayout implements LayoutManager, Serializable {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   781
        /**
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   782
         * {@inheritDoc}
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   783
         */
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   784
        public void layoutContainer(Container parent) {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   785
            JLayer layer = (JLayer) parent;
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   786
            Component view = layer.getView();
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   787
            Component glassPane = layer.getGlassPane();
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   788
            if (view != null) {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   789
                Insets insets = layer.getInsets();
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   790
                view.setLocation(insets.left, insets.top);
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   791
                view.setSize(layer.getWidth() - insets.left - insets.right,
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   792
                        layer.getHeight() - insets.top - insets.bottom);
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   793
            }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   794
            if (glassPane != null) {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   795
                glassPane.setLocation(0, 0);
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   796
                glassPane.setSize(layer.getWidth(), layer.getHeight());
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   797
            }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   798
        }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   799
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   800
        /**
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   801
         * {@inheritDoc}
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   802
         */
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   803
        public Dimension minimumLayoutSize(Container parent) {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   804
            JLayer layer = (JLayer) parent;
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   805
            Insets insets = layer.getInsets();
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   806
            Dimension ret = new Dimension(insets.left + insets.right,
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   807
                    insets.top + insets.bottom);
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   808
            Component view = layer.getView();
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   809
            if (view != null) {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   810
                Dimension size = view.getMinimumSize();
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   811
                ret.width += size.width;
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   812
                ret.height += size.height;
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   813
            }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   814
            if (ret.width == 0 || ret.height == 0) {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   815
                ret.width = ret.height = 4;
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   816
            }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   817
            return ret;
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   818
        }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   819
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   820
        /**
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   821
         * {@inheritDoc}
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   822
         */
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   823
        public Dimension preferredLayoutSize(Container parent) {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   824
            JLayer layer = (JLayer) parent;
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   825
            Insets insets = layer.getInsets();
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   826
            Dimension ret = new Dimension(insets.left + insets.right,
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   827
                    insets.top + insets.bottom);
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   828
            Component view = layer.getView();
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   829
            if (view != null) {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   830
                Dimension size = view.getPreferredSize();
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   831
                if (size.width > 0 && size.height > 0) {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   832
                    ret.width += size.width;
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   833
                    ret.height += size.height;
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   834
                }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   835
            }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   836
            return ret;
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   837
        }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   838
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   839
        /**
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   840
         * {@inheritDoc}
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   841
         */
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   842
        public void addLayoutComponent(String name, Component comp) {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   843
        }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   844
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   845
        /**
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   846
         * {@inheritDoc}
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   847
         */
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   848
        public void removeLayoutComponent(Component comp) {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   849
        }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   850
    }
3733
af63479b67b8 6872492: JLayer sources contain wrong header
alexp
parents: 3508
diff changeset
   851
}