java.lang.Object
java.awt.Component
java.awt.Container
javax.swing.JComponent
javax.swing.JLayer<V>
- 类型参数:
V-JLayer的视图组件的类型
- 所有已实现的接口:
ImageObserver,MenuContainer,PropertyChangeListener,Serializable,EventListener,Accessible,Scrollable
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(WindowConstants.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) 。
- 自从:
- 1.7
- 参见:
-
内部类总结
在类 javax.swing.JComponent 中声明的嵌套类/接口
JComponent.AccessibleJComponent在类 java.awt.Container 中声明的嵌套类/接口
Container.AccessibleAWTContainer -
字段摘要
在类 javax.swing.JComponent 中声明的字段
listenerList, TOOL_TIP_TEXT_KEY, ui, UNDEFINED_CONDITION, WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, WHEN_FOCUSED, WHEN_IN_FOCUSED_WINDOW在类 java.awt.Component 中声明的字段
accessibleContext, BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT在接口 java.awt.image.ImageObserver 中声明的字段
ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH -
构造方法总结
构造方法 -
方法总结
修饰符和类型方法描述protected voidJLayer不支持此方法,总是抛出UnsupportedOperationException由构造方法调用以创建默认的glassPane。voiddoLayout()如果设置了LayerUI,则将其功能委托给LayerUI.doLayout(JLayer)方法。获取与此JLayer关联的 AccessibleContext。如果视图组件是javax.swing.JComponent的实例,则将其功能委托给getView().getBorder()方法,否则返回null。返回JLayer的 glassPane 组件或null。long返回此JLayer及其LayerUI接收的事件掩码位图。返回视图组件视口的首选大小。intgetScrollableBlockIncrement(Rectangle visibleRect, int orientation, int direction) 返回一个滚动增量,对于显示逻辑行或列的组件来说,这是必需的,以便根据 orientation 的值完全暴露一个行或列块。boolean返回false表示视口的高度不决定图层的高度,除非首选的图层高度小于视口的高度。boolean返回false表示视口的宽度不决定层的宽度,除非层的首选宽度小于视口的宽度。intgetScrollableUnitIncrement(Rectangle visibleRect, int orientation, int direction) 返回一个滚动增量,对于显示逻辑行或列的组件来说,这是必需的,以便根据 orientation 的值完全暴露一个新行或新列。getUI()返回此JLayer的LayerUI。getView()返回JLayer的视图组件或null。booleanimageUpdate(Image img, int infoflags, int x, int y, int w, int h) 如果设置了LayerUI,则将其功能委托给LayerUI.imageUpdate(java.awt.Image, int, int, int, int, int, JLayer)方法。booleanJLayer覆盖此方法的默认实现(在JComponent中)以返回false。protected boolean始终返回true以导致绘画源自JLayer或其祖先之一。void将所有绘画委托给LayerUI对象。protected void这个方法是空的,因为所有的绘制都是由paint(Graphics)和ComponentUI.update(Graphics, JComponent)方法完成的voidpaintImmediately(int x, int y, int w, int h) 如果设置了LayerUI,则将其功能委托给LayerUI.paintImmediately(int, int, int, int, JLayer)方法。void当绑定属性更改时调用此方法。void如果视图组件是javax.swing.JComponent的实例,则将其功能委托给getView().setBorder(Border)方法,否则此方法为空操作。voidsetGlassPane(JPanel glassPane) 设置JLayer的 glassPane 组件,可以是null。voidsetLayerEventMask(long layerEventMask) 启用来自 JLayer 的事件和它的所有后代由要传递给LayerUI.eventDispatched(AWTEvent, JLayer)方法的指定事件掩码参数定义。voidsetLayout(LayoutManager mgr) 为此容器设置布局管理器。void设置LayerUI,它将为此JLayer执行绘画和接收输入事件。void设置JLayer的视图组件,可以是null。voidupdateUI()如果设置了LayerUI,则将其功能委托给LayerUI.updateUI(JLayer)方法。在类 javax.swing.JComponent 中声明的方法
addAncestorListener, addNotify, addVetoableChangeListener, computeVisibleRect, contains, createToolTip, disable, enable, firePropertyChange, firePropertyChange, fireVetoableChange, getActionForKeyStroke, getActionMap, getAlignmentX, getAlignmentY, getAncestorListeners, getAutoscrolls, getBaseline, getBaselineResizeBehavior, 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, removeNotify, 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, update在类 java.awt.Container 中声明的方法
add, 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, remove, removeAll, removeContainerListener, setComponentZOrder, setFocusCycleRoot, setFocusTraversalPolicy, setFocusTraversalPolicyProvider, transferFocusDownCycle, validate, validateTree在类 java.awt.Component 中声明的方法
action, 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, 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, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getToolkit, getTreeLock, gotFocus, handleEvent, hasFocus, 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, requestFocus, requestFocus, requestFocusInWindow, resize, resize, setBounds, setBounds, setComponentOrientation, setCursor, setDropTarget, setFocusable, setFocusTraversalKeysEnabled, setIgnoreRepaint, setLocale, setLocation, setLocation, setMixingCutoutShape, setName, setSize, setSize, show, show, size, toString, transferFocus, transferFocusBackward, transferFocusUpCycle
-
构造方法详细信息
-
方法详情
-
getView
返回JLayer的视图组件或null。
这是绑定属性。- 返回:
JLayer的视图组件或null(如果不存在)- 参见:
-
setView
设置JLayer的视图组件,可以是null。
这是绑定属性。- 参数:
view- 这个JLayer的视图组件- 参见:
-
setUI
设置LayerUI,它将为此JLayer执行绘画和接收输入事件。- 参数:
ui- 这个JLayer的LayerUI
-
getUI
返回此JLayer的LayerUI。- 重写:
getUI在类JComponent中- 返回:
-
这个
JLayer的LayerUI
-
getGlassPane
返回JLayer的 glassPane 组件或null。
这是绑定属性。- 返回:
JLayer的 glassPane 组件或null(如果不存在)- 参见:
-
setGlassPane
设置JLayer的 glassPane 组件,可以是null。
这是绑定属性。- 参数:
glassPane- 这个JLayer的 glassPane 组件- 参见:
-
createGlassPane
由构造方法调用以创建默认的glassPane。默认情况下,此方法创建一个新的 JPanel,其可见性设置为 true,不透明度设置为 false。- 返回:
-
默认
glassPane
-
setLayout
为此容器设置布局管理器。重写此方法以防止设置布局管理器。注意:如果
mgr是非null,此方法将抛出异常,因为JLayer不支持布局管理器。- 重写:
setLayout在类Container中- 参数:
mgr- 指定的布局管理器- 抛出:
IllegalArgumentException- 不支持此方法- 参见:
-
setBorder
如果视图组件是javax.swing.JComponent的实例,则将其功能委托给getView().setBorder(Border)方法,否则此方法为空操作。- 重写:
setBorder在类JComponent中- 参数:
border- 为view组件渲染的边框- 参见:
-
getBorder
如果视图组件是javax.swing.JComponent的实例,则将其功能委托给getView().getBorder()方法,否则返回null。- 重写:
getBorder在类JComponent中- 返回:
view组件的边框对象- 参见:
-
addImpl
JLayer不支持此方法,总是抛出UnsupportedOperationException- 重写:
addImpl在类Container中- 参数:
comp- 要添加的组件constraints- 表示此组件布局约束的对象index- 在容器列表中插入组件的位置,其中-1表示追加到末尾- 抛出:
UnsupportedOperationException- 不支持此方法- 参见:
-
isPaintingOrigin
protected boolean isPaintingOrigin()始终返回true以导致绘画源自JLayer或其祖先之一。- 重写:
isPaintingOrigin在类JComponent中- 返回:
- true
- 参见:
-
paintImmediately
public void paintImmediately(int x, int y, int w, int h) 如果设置了LayerUI,则将其功能委托给LayerUI.paintImmediately(int, int, int, int, JLayer)方法。- 重写:
paintImmediately在类JComponent中- 参数:
x- 要绘制区域的 x 值y- 要绘制区域的 y 值w- 要绘制区域的宽度h- 要绘制的区域的高度- 参见:
-
imageUpdate
如果设置了LayerUI,则将其功能委托给LayerUI.imageUpdate(java.awt.Image, int, int, int, int, int, JLayer)方法。- 指定者:
imageUpdate在接口ImageObserver中- 重写:
imageUpdate在类Component中- 参数:
img- 正在观察的图像infoflags- 请参阅imageUpdate了解更多信息x- 的x协调y- 的y协调w- 宽度h- 高度- 返回:
false如果信息标志表明图像已完全加载;true否则。- 参见:
-
paint
将所有绘画委托给LayerUI对象。- 重写:
paint在类JComponent中- 参数:
g- 渲染到的Graphics- 参见:
-
paintComponent
这个方法是空的,因为所有的绘制都是由paint(Graphics)和ComponentUI.update(Graphics, JComponent)方法完成的- 重写:
paintComponent在类JComponent中- 参数:
g- 要保护的Graphics对象- 参见:
-
isOptimizedDrawingEnabled
public boolean isOptimizedDrawingEnabled()JLayer覆盖此方法的默认实现(在JComponent中)以返回false。这确保绘图机器将调用JLayer的paint实现,而不是直接向JLayer的子级发送消息。- 重写:
isOptimizedDrawingEnabled在类JComponent中- 返回:
- false
-
propertyChange
当绑定属性更改时调用此方法。- 指定者:
propertyChange在接口PropertyChangeListener中- 参数:
evt- 描述事件源和已更改属性的 PropertyChangeEvent 对象。
-
setLayerEventMask
public void setLayerEventMask(long layerEventMask) 启用来自 JLayer 的事件和它的所有后代由要传递给LayerUI.eventDispatched(AWTEvent, JLayer)方法的指定事件掩码参数定义。如果为该
JLayer设置了LayerUI并且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
public long getLayerEventMask()返回此JLayer及其LayerUI接收的事件掩码位图。这意味着
LayerUI.eventDispatched(AWTEvent, JLayer)方法将只接收与事件掩码匹配的事件。默认情况下,
JLayer不接收任何事件。- 返回:
-
为此
JLayer接收的事件类型的位掩码
-
updateUI
public void updateUI()如果设置了LayerUI,则将其功能委托给LayerUI.updateUI(JLayer)方法。- 重写:
updateUI在类JComponent中- 参见:
-
getPreferredScrollableViewportSize
返回视图组件视口的首选大小。如果该层的视图组件实现了
Scrollable,则该方法将其实现委托给视图组件。- 指定者:
getPreferredScrollableViewportSize在接口Scrollable中- 返回:
- 视图组件视口的首选大小
- 参见:
-
getScrollableBlockIncrement
返回一个滚动增量,对于显示逻辑行或列的组件来说,这是必需的,以便根据 orientation 的值完全暴露一个行或列块。如果该层的视图组件实现了
Scrollable,则该方法将其实现委托给视图组件。- 指定者:
getScrollableBlockIncrement在接口Scrollable中- 参数:
visibleRect- 视口内可见的视图区域orientation- SwingConstants.VERTICAL 或 SwingConstants.HORIZONTAL。direction- 小于零向上/向左滚动,大于零向下/向右滚动。- 返回:
- 在指定方向滚动的“块”增量
- 参见:
-
getScrollableTracksViewportHeight
public boolean getScrollableTracksViewportHeight()返回false表示视口的高度不决定图层的高度,除非首选的图层高度小于视口的高度。如果该层的视图组件实现了
Scrollable,则该方法将其实现委托给视图组件。- 指定者:
getScrollableTracksViewportHeight在接口Scrollable中- 返回:
- 图层是否应该跟踪视口的高度
- 参见:
-
getScrollableTracksViewportWidth
public boolean getScrollableTracksViewportWidth()返回false表示视口的宽度不决定层的宽度,除非层的首选宽度小于视口的宽度。如果该层的视图组件实现了
Scrollable,则该方法将其实现委托给视图组件。- 指定者:
getScrollableTracksViewportWidth在接口Scrollable中- 返回:
- 层是否应该跟踪视口的宽度
- 参见:
-
getScrollableUnitIncrement
返回一个滚动增量,对于显示逻辑行或列的组件来说,这是必需的,以便根据 orientation 的值完全暴露一个新行或新列。理想情况下,组件应该通过返回完全暴露项目所需的距离来处理部分暴露的行或列。滚动容器,如
JScrollPane,将在每次用户请求单位滚动时使用此方法。如果该层的视图组件实现了
Scrollable,则该方法将其实现委托给视图组件。- 指定者:
getScrollableUnitIncrement在接口Scrollable中- 参数:
visibleRect- 视口内可见的视图区域orientation- SwingConstants.VERTICAL 或 SwingConstants.HORIZONTAL。direction- 小于零向上/向左滚动,大于零向下/向右滚动。- 返回:
- 在指定方向滚动的“单位”增量。该值应始终为正。
- 参见:
-
doLayout
public void doLayout()如果设置了LayerUI,则将其功能委托给LayerUI.doLayout(JLayer)方法。 -
getAccessibleContext
获取与此JLayer关联的 AccessibleContext。- 指定者:
getAccessibleContext在接口Accessible中- 重写:
getAccessibleContext在类Component中- 返回:
-
与此
JLayer关联的 AccessibleContext。
-