V - 
        JLayer的视图组件的类型 
       public final class JLayer<V extends Component> extends JComponent implements Scrollable, PropertyChangeListener, Accessible
JLayer是用于Swing组件的通用装饰器,可以实现各种先进的绘画效果,并且可以接收在其边框内生成的所有AWTEvent的通知。 
        JLayer将绘画和输入事件的处理委托给一个执行实际装饰的LayerUI对象。 
 在风俗画在实施LayerUI为JLayer本身及其所有子组件和事件通知工作。 该组合使您可以通过添加新的高级功能来丰富现有组件,例如临时锁定层次结构,复合组件的数据提示,增强的鼠标滚动等等。 
 JLayer是一个很好的解决方案,如果您只需要对复合组件进行自定义绘画或从其子组件捕获输入事件。 
  import javax.swing.*;
 import javax.swing.plaf.LayerUI;
 import java.awt.*;
 public class JLayerSample {
     private static JLayer<JComponent> createLayer() {
         // This custom layerUI will fill the layer with translucent green
         // and print out all mouseMotion events generated within its borders
         LayerUI<JComponent> layerUI = new LayerUI<JComponent>() {
             public void paint(Graphics g, JComponent c) {
                 // paint the layer as is
                 super.paint(g, c);
                 // fill it with the translucent green
                 g.setColor(new Color(0, 128, 0, 128));
                 g.fillRect(0, 0, c.getWidth(), c.getHeight());
             }
             public void installUI(JComponent c) {
                 super.installUI(c);
                 // enable mouse motion events for the layer's subcomponents
                 ((JLayer) c).setLayerEventMask(AWTEvent.MOUSE_MOTION_EVENT_MASK);
             }
             public void uninstallUI(JComponent c) {
                 super.uninstallUI(c);
                 // reset the layer event mask
                 ((JLayer) c).setLayerEventMask(0);
             }
             // overridden method which catches MouseMotion events
             public void eventDispatched(AWTEvent e, JLayer<? extends JComponent> l) {
                 System.out.println("AWTEvent detected: " + e);
             }
         };
         // create a component to be decorated with the layer
         JPanel panel = new JPanel();
         panel.add(new JButton("JButton"));
         // create the layer for the panel using our custom layerUI
         return new JLayer<JComponent>(panel, layerUI);
     }
     private static void createAndShowGUI() {
         final JFrame frame = new JFrame();
         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         // work with the layer as with any other Swing component
         frame.add(createLayer());
         frame.setSize(200, 200);
         frame.setLocationRelativeTo(null);
         frame.setVisible(true);
     }
     public static void main(String[] args) throws Exception {
         SwingUtilities.invokeAndWait(new Runnable() {
             public void run() {
                 createAndShowGUI();
             }
         });
     }
 }  
       注意: JLayer不支持以下方法: 
       Container.add(java.awt.Component) Container.add(String, java.awt.Component) Container.add(java.awt.Component, int) Container.add(java.awt.Component, Object) Container.add(java.awt.Component, Object, int) UnsupportedOperationException被抛出,添加一个组件到JLayer使用setView(Component)或setGlassPane(JPanel) 。 
      JLayer(Component) , setView(Component) , getView() , LayerUI , JLayer(Component, LayerUI) , setUI(javax.swing.plaf.LayerUI) , getUI() 
       JComponent.AccessibleJComponentContainer.AccessibleAWTContainerComponent.AccessibleAWTComponent, Component.BaselineResizeBehavior, Component.BltBufferStrategy, Component.FlipBufferStrategylistenerList, TOOL_TIP_TEXT_KEY, ui, UNDEFINED_CONDITION, WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, WHEN_FOCUSED, WHEN_IN_FOCUSED_WINDOWaccessibleContext, BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENTABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH| Constructor and Description | 
|---|
| JLayer() 
             创建一个新的 JLayer对象与一个null视图组件和默认LayerUI。 | 
| JLayer(V view) 
             创建一个新的 JLayer对象,默认值为LayerUI。 | 
| JLayer(V view, LayerUI<V> ui) 
             创建一个新的 JLayer具有指定视图组件和对象LayerUI对象。 | 
| Modifier and Type | Method and Description | 
|---|---|
| protected void | addImpl(Component comp, Object constraints, int index)
              这种方法不支持 
              JLayer,总是抛出UnsupportedOperationException | 
| void | addNotify()
              通知此组件它现在有一个父组件。 
             | 
| JPanel | createGlassPane()
              由构造函数调用方法创建一个默认值 
              glassPane。 | 
| void | doLayout()
              将其功能委托给 
              LayerUI.doLayout(JLayer)方法,如果设置为LayerUI。 | 
| AccessibleContext | getAccessibleContext()
              获取与此 
              JLayer。 | 
| JPanel | getGlassPane()
              返回 
              JLayer的glassPane组件或null。 | 
| long | getLayerEventMask()
              返回此 
              JLayer及其LayerUI接收的事件掩码的位图。 | 
| Dimension | getPreferredScrollableViewportSize()
              返回视图组件的视口的首选大小。 
             | 
| int | getScrollableBlockIncrement(Rectangle visibleRect, int orientation, int direction)
              返回滚动增量,这是显示逻辑行或列的组件所必需的,以便根据方向的值完全暴露一个行或列的块。 
             | 
| boolean | getScrollableTracksViewportHeight()
              返回 
              false以表示视口的高度不会确定图层的高度,除非图层的首选高度小于视口的高度。 | 
| boolean | getScrollableTracksViewportWidth()
              返回 
              false,以指示视口的宽度不会确定图层的宽度,除非图层的首选宽度小于视口的宽度。 | 
| int | getScrollableUnitIncrement(Rectangle visibleRect, int orientation, int direction)
              返回滚动增量,这是显示逻辑行或列的组件所必需的,以便根据方向的值完全暴露一个新行或列。 
             | 
| LayerUI<? super V> | getUI() 
             返回 LayerUI此JLayer。 | 
| V | getView()
              返回 
              JLayer的视图组件或null。 | 
| boolean | isOptimizedDrawingEnabled()JLayer覆盖此方法的默认实现(在JComponent)以返回false。 | 
| protected boolean | isPaintingOrigin()
              始终返回 
              true以使绘画来源于JLayer,或其祖先之一。 | 
| void | paint(Graphics g) | 
| protected void | paintComponent(Graphics g)
              这种方法是空的,因为所有的绘画都是由 
              paint(Graphics)和ComponentUI.update(Graphics, JComponent)方法完成的 | 
| void | paintImmediately(int x, int y, int w, int h)
              将其功能委托给 
              LayerUI.paintImmediately(int, int, int, int, JLayer)方法,如果设置为LayerUI。 | 
| void | propertyChange(PropertyChangeEvent evt)
              当绑定属性更改时,此方法将被调用。 
             | 
| void | remove(Component comp)
              从此容器中删除指定的组件。 
             | 
| void | removeAll()
              从此容器中删除所有组件。 
             | 
| void | removeNotify()
              通知此组件它不再具有父组件。 
             | 
| void | setBorder(Border border)
              不支持非 
              null边框或非零插值,以防止此组件的几何变得足够复杂,以禁止LayerUI类的LayerUI类化。 | 
| void | setGlassPane(JPanel glassPane)
              设置 
              JLayer的glassPane组件,可以是null。 | 
| void | setLayerEventMask(long layerEventMask)
              启用来自JLayer的事件 
             及其由指定的事件掩码参数定义的 
             所有后代,以传递给 
              LayerUI.eventDispatched(AWTEvent, JLayer)方法。 | 
| void | setLayout(LayoutManager mgr)
              设置此容器的布局管理器。 
             | 
| void | setUI(LayerUI<? super V> ui) 
             设置 LayerUI将执行绘图和接收JLayer输入事件。 | 
| void | setView(V view)
              设置 
              JLayer的视图组件,可以是null。 | 
| void | updateUI()
              将其功能委托给 
              LayerUI.updateUI(JLayer)方法,如果设置为LayerUI。 | 
addAncestorListener, addVetoableChangeListener, computeVisibleRect, contains, createToolTip, disable, enable, firePropertyChange, firePropertyChange, firePropertyChange, fireVetoableChange, getActionForKeyStroke, getActionMap, getAlignmentX, getAlignmentY, getAncestorListeners, getAutoscrolls, getBaseline, getBaselineResizeBehavior, getBorder, getBounds, getClientProperty, getComponentGraphics, getComponentPopupMenu, getConditionForKeyStroke, getDebugGraphicsOptions, getDefaultLocale, getFontMetrics, getGraphics, getHeight, getInheritsPopupMenu, getInputMap, getInputMap, getInputVerifier, getInsets, getInsets, getListeners, getLocation, getMaximumSize, getMinimumSize, getNextFocusableComponent, getPopupLocation, getPreferredSize, getRegisteredKeyStrokes, getRootPane, getSize, getToolTipLocation, getToolTipText, getToolTipText, getTopLevelAncestor, getTransferHandler, getUIClassID, getVerifyInputWhenFocusTarget, getVetoableChangeListeners, getVisibleRect, getWidth, getX, getY, grabFocus, hide, isDoubleBuffered, isLightweightComponent, isManagingFocus, isOpaque, isPaintingForPrint, isPaintingTile, isRequestFocusEnabled, isValidateRoot, paintBorder, paintChildren, paintImmediately, paramString, print, printAll, printBorder, printChildren, printComponent, processComponentKeyEvent, processKeyBinding, processKeyEvent, processMouseEvent, processMouseMotionEvent, putClientProperty, registerKeyboardAction, registerKeyboardAction, removeAncestorListener, removeVetoableChangeListener, repaint, repaint, requestDefaultFocus, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, resetKeyboardActions, reshape, revalidate, scrollRectToVisible, setActionMap, setAlignmentX, setAlignmentY, setAutoscrolls, setBackground, setComponentPopupMenu, setDebugGraphicsOptions, setDefaultLocale, setDoubleBuffered, setEnabled, setFocusTraversalKeys, setFont, setForeground, setInheritsPopupMenu, setInputMap, setInputVerifier, setMaximumSize, setMinimumSize, setNextFocusableComponent, setOpaque, setPreferredSize, setRequestFocusEnabled, setToolTipText, setTransferHandler, setUI, setVerifyInputWhenFocusTarget, setVisible, unregisterKeyboardAction, updateadd, add, add, add, add, addContainerListener, addPropertyChangeListener, addPropertyChangeListener, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, findComponentAt, findComponentAt, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getComponentZOrder, getContainerListeners, getFocusTraversalKeys, getFocusTraversalPolicy, getLayout, getMousePosition, insets, invalidate, isAncestorOf, isFocusCycleRoot, isFocusCycleRoot, isFocusTraversalPolicyProvider, isFocusTraversalPolicySet, layout, list, list, locate, minimumSize, paintComponents, preferredSize, printComponents, processContainerEvent, processEvent, remove, removeContainerListener, setComponentZOrder, setFocusCycleRoot, setFocusTraversalPolicy, setFocusTraversalPolicyProvider, transferFocusDownCycle, validate, validateTreeaction, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, addMouseWheelListener, bounds, checkImage, checkImage, coalesceEvents, contains, createImage, createImage, createVolatileImage, createVolatileImage, disableEvents, dispatchEvent, enable, enableEvents, enableInputMethods, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getBackground, getBounds, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusCycleRootAncestor, getFocusListeners, getFocusTraversalKeysEnabled, getFont, getForeground, getGraphicsConfiguration, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputContext, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getLocale, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMousePosition, getMouseWheelListeners, getName, getParent, getPeer, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getToolkit, getTreeLock, gotFocus, handleEvent, hasFocus, imageUpdate, inside, isBackgroundSet, isCursorSet, isDisplayable, isEnabled, isFocusable, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, isMaximumSizeSet, isMinimumSizeSet, isPreferredSizeSet, isShowing, isValid, isVisible, keyDown, keyUp, list, list, list, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paintAll, postEvent, prepareImage, prepareImage, processComponentEvent, processFocusEvent, processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processMouseWheelEvent, remove, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, resize, resize, setBounds, setBounds, setComponentOrientation, setCursor, setDropTarget, setFocusable, setFocusTraversalKeysEnabled, setIgnoreRepaint, setLocale, setLocation, setLocation, setName, setSize, setSize, show, show, size, toString, transferFocus, transferFocusBackward, transferFocusUpCyclepublic JLayer()
JLayer对象与一个null视图组件和默认LayerUI 。 
          public JLayer(V view)
JLayer对象,默认值为LayerUI 。 
          view - 要由此装饰的 
            JLayer 
           setUI(javax.swing.plaf.LayerUI<? super V>) 
           public V getView()
JLayer的视图组件或null 。 
           JLayer的视图组件或 
            null如果不存在) 
           setView(Component) 
           public void setView(V view)
JLayer的视图组件,可以是null 。 
           view - 这个 
            JLayer的视图 
            JLayer 
           getView() 
           public void setUI(LayerUI<? super V> ui)
LayerUI ,它将执行绘图并接收JLayer输入事件。 
          ui - LayerUI为这JLayer 
           public JPanel getGlassPane()
JLayer的glassPane组件或null 。 
           JLayer的glassPane组件或 
            null如果不存在) 
           setGlassPane(JPanel) 
           public void setGlassPane(JPanel glassPane)
JLayer的glassPane组件,可以是null 。 
           glassPane - 这个JLayer的glassPane 
            JLayer 
           getGlassPane() 
           public JPanel createGlassPane()
glassPane 。 
           默认情况下,此方法创建一个新的JPanel,其可见性设置为true和opacity设置为false。 
          glassPane 
           public void setLayout(LayoutManager mgr)
 注意:如果mgr是非null ,此方法将抛出一个异常,布局管理器不支持在JLayer 。 
setLayout在 
            Container 
           mgr - 指定的布局管理器 
           IllegalArgumentException - 不支持此方法 
           Container.doLayout() , 
            Container.getLayout() , 
            Container.invalidate() 
           public void setBorder(Border border)
null边框或非零插值,以防止此组件的几何变得足够复杂,以禁止LayerUI类的LayerUI类化。 
           要创建带有边框的JLayer ,请将其添加到具有边框的JPanel 。 
            注意:如果border是非null ,该方法将抛出一个异常上不支持边框上JLayer 。 
setBorder在 
            JComponent 
           border - 要设置的 
            Border 
           IllegalArgumentException - 不支持此方法 
           Border , CompoundBorder 
           protected void addImpl(Component comp, Object constraints, int index)
JLayer ,总是抛出 
           UnsupportedOperationException 
          addImpl在 
            Container 
           comp - 要添加的组件 
           constraints - 表示此组件的布局约束的对象 
           index - 容器列表中插入组件的位置,其中 
            -1表示附加到最后 
           UnsupportedOperationException - 不支持此方法 
           setView(Component) , 
            setGlassPane(JPanel) 
           public void remove(Component comp)
removeLayoutComponent方法从该容器的布局中removeLayoutComponent 。 
           该方法更改布局相关信息,因此使组件层次结构无效。 如果已经显示了容器,则此后必须验证层次结构以反映更改。
remove在 
            Container 
           comp - 要删除的组件 
           Container.add(java.awt.Component) , 
            Container.invalidate() , 
            Container.validate() , 
            Container.remove(int) 
           public void removeAll()
removeLayoutComponent方法从该容器的布局中removeLayoutComponent 。 
           该方法更改布局相关信息,因此使组件层次结构无效。 如果已经显示了容器,则此后必须验证层次结构以反映更改。
protected boolean isPaintingOrigin()
true ,使绘画来源于 
           JLayer或其祖先之一。 
          isPaintingOrigin在 
            JComponent 
           JComponent.isPaintingOrigin() 
           public void paintImmediately(int x,
                             int y,
                             int w,
                             int h) 
          LayerUI.paintImmediately(int, int, int, int, JLayer)方法,如果设置为 
           LayerUI 。 
          paintImmediately在 
            JComponent 
           x - 要绘制的区域的x值 
           y - 要绘制的区域的y值 
           w - 要涂漆的区域的宽度 
           h - 要涂漆的区域的高度 
           JComponent.repaint(long, int, int, int, int) , 
            JComponent.isPaintingOrigin() 
           protected void paintComponent(Graphics g)
paint(Graphics)和 
           ComponentUI.update(Graphics, JComponent)方法完成的 
          paintComponent在 
            JComponent 
           g - 要保护的 
            Graphics对象 
           JComponent.paint(java.awt.Graphics) , ComponentUI 
           public boolean isOptimizedDrawingEnabled()
JLayer覆盖此方法的默认实现(在JComponent )以返回false 。 
           这确保了绘图机器将调用JLayer的paint实现,而不是直接发送JLayer的孩子。 
          isOptimizedDrawingEnabled在 
            JComponent 
           public void propertyChange(PropertyChangeEvent evt)
propertyChange在接口 
            PropertyChangeListener 
           evt - 描述事件源和已更改的属性的PropertyChangeEvent对象。 
           public void setLayerEventMask(long layerEventMask)
LayerUI.eventDispatched(AWTEvent, JLayer)方法。 
            事件被传递提供LayerUI设置为这个JLayer和JLayer可以显示。 
 下面的示例示出了如何正确地使用该方法在LayerUI实现: 
  public void installUI(JComponent c) {
       super.installUI(c);
       JLayer l = (JLayer) c;
       // this LayerUI will receive only key and focus events
       l.setLayerEventMask(AWTEvent.KEY_EVENT_MASK | AWTEvent.FOCUS_EVENT_MASK);
    }
    public void uninstallUI(JComponent c) {
       super.uninstallUI(c);
       JLayer l = (JLayer) c;
       // JLayer must be returned to its initial state
       l.setLayerEventMask(0);
    }  
           默认情况下, JLayer收到事件,其事件掩码为0 。 
          layerEventMask - 要接收的事件类型的位掩码 
           getLayerEventMask() , 
            LayerUI.eventDispatched(AWTEvent, JLayer) , 
            Component.isDisplayable() 
           public long getLayerEventMask()
JLayer及其LayerUI接收的事件掩码的位图。 
            这意味着LayerUI.eventDispatched(AWTEvent, JLayer)方法将只接收与事件掩码匹配的事件。 
 默认情况下JLayer收到任何事件。 
JLayer 
           public void updateUI()
LayerUI.updateUI(JLayer)方法,如果设置为 
           LayerUI 。 
          public Dimension getPreferredScrollableViewportSize()
 如果此层的视图组件实现Scrollable ,则此方法将其实现委托给视图组件。 
getPreferredScrollableViewportSize在接口 
            Scrollable 
           Scrollable 
           public int getScrollableBlockIncrement(Rectangle visibleRect, int orientation, int direction)
 如果此层的视图组件实现Scrollable ,则此方法将其实现委托给视图组件。 
getScrollableBlockIncrement在接口 
            Scrollable 
           visibleRect - 在视口内可见的视图区域 
           orientation - SwingConstants.VERTICAL或SwingConstants.HORIZONTAL。 
           direction - 向上/向左滚动小于0,向下/向右大于零。 
           Scrollable 
           public boolean getScrollableTracksViewportHeight()
false以指示视口的高度不会确定图层的高度,除非图层的首选高度小于视口的高度。 
            如果此层的视图组件实现Scrollable ,则此方法将其实现委托给视图组件。 
getScrollableTracksViewportHeight中的 
            Scrollable 
           Scrollable 
           public boolean getScrollableTracksViewportWidth()
false ,以表示视口的宽度不会确定图层的宽度,除非图层的首选宽度小于视口的宽度。 
            如果此层的视图组件实现Scrollable ,则此方法将其实现委托给视图组件。 
getScrollableTracksViewportWidth在接口 
            Scrollable 
           Scrollable 
           public int getScrollableUnitIncrement(Rectangle visibleRect, int orientation, int direction)
 滚动容器,如JScrollPane ,将在用户请求单位滚动时使用此方法。 
 如果此层的视图组件实现Scrollable ,则此方法将其实现委托给视图组件。 
getScrollableUnitIncrement在接口 
            Scrollable 
           visibleRect - 在视口内可见的视图区域 
           orientation - SwingConstants.VERTICAL或SwingConstants.HORIZONTAL。 
           direction - 向上/向左滚动小于0,向下/向右大于零。 
           Scrollable 
           public void addNotify()
KeyboardAction事件侦听器。 
           该方法在内部被工具包调用,不应该被程序直接调用。 
          public void removeNotify()
KeyboardAction 。 
           该方法在内部被工具包调用,不应该被程序直接调用。 
          public void doLayout()
LayerUI.doLayout(JLayer)方法,如果设置为 
           LayerUI 。 
          public AccessibleContext getAccessibleContext()
JLayer 。 
          getAccessibleContext在接口 
            Accessible 
           getAccessibleContext在 
            Component类 
           JLayer 。 
            Submit a bug or feature 
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
 Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.