我正试图在Swing中找出关于JLayeredPane的内容。如果有人使用过本课程,我们将不胜感激。
getLayer(JComponent c)的文档声明:
获取a的图层属性 JComponent,它不会导致任何一方 像setLayer()这样的效果。 (绘画, 添加/删除等)通常你应该 使用实例方法getLayer()。
显然,这里有一些错误,因为这是实例方法getLayer()(没有重载版本)
实际上是否应该在此处进行不同的调用,或者是否有人急于从putLayer()进行复制:
设置图层属性 JComponent的。这种方法不会导致 任何副作用,如setLayer() (绘画,添加/删除等)。一般 你应该使用实例方法 setLayer(),以获得 期望的副作用(如 重绘)。
答案 0 :(得分:2)
与Swing中的许多内容一样,您的问题的答案在swing源代码中显示出来。来自JLayeredPane.java:
public static int getLayer(JComponent c) {
Integer i;
if((i = (Integer)c.getClientProperty(LAYER_PROPERTY)) != null)
return i.intValue();
return DEFAULT_LAYER.intValue();
}
public int getLayer(Component c) {
Integer i;
if(c instanceof JComponent)
i = (Integer)((JComponent)c).getClientProperty(LAYER_PROPERTY);
else
i = (Integer)getComponentToLayer().get((Component)c);
if(i == null)
return DEFAULT_LAYER.intValue();
return i.intValue();
}
看起来你看到一些差异的原因是JComponent实例的层存储为JComponent实例的属性,但Component实例的层存储在JLayeredPane的哈希表中。因此,getLayer(JComponent c)可以是静态的,而getLayer(Component c)则不能。
正如您可能想象的那样,这只是这堂课陌生感的开始。验证和绘制JLayeredPane和内容可能会很快变得复杂。