Swing JLayeredPane.getLayer() - 文档错误或实际的副作用?

时间:2009-01-31 20:14:59

标签: java swing jlayeredpane

我正试图在Swing中找出关于JLayeredPane的内容。如果有人使用过本课程,我们将不胜感激。

getLayer(JComponent c)的文档声明:

  

获取a的图层属性   JComponent,它不会导致任何一方   像setLayer()这样的效果。 (绘画,   添加/删除等)通常你应该   使用实例方法getLayer()。

显然,这里有一些错误,因为这是实例方法getLayer()(没有重载版本)

实际上是否应该在此处进行不同的调用,或者是否有人急于从putLayer()进行复制:

  

设置图层属性   JComponent的。这种方法不会导致   任何副作用,如setLayer()   (绘画,添加/删除等)。一般   你应该使用实例方法   setLayer(),以获得   期望的副作用(如   重绘)。

1 个答案:

答案 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和内容可能会很快变得复杂。