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.AccessibleJComponent
Container.AccessibleAWTContainer
Component.AccessibleAWTComponent, Component.BaselineResizeBehavior, Component.BltBufferStrategy, Component.FlipBufferStrategy
listenerList, TOOL_TIP_TEXT_KEY, ui, UNDEFINED_CONDITION, WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, WHEN_FOCUSED, WHEN_IN_FOCUSED_WINDOW
accessibleContext, BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT
ABORT, 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, update
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, removeContainerListener, setComponentZOrder, setFocusCycleRoot, setFocusTraversalPolicy, setFocusTraversalPolicyProvider, transferFocusDownCycle, validate, validateTree
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, 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, transferFocusUpCycle
public 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
。