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.