Swing JLayeredPane.getLayer () - Ошибка документации или фактический побочный эффект? - PullRequest
1 голос
/ 31 января 2009

Я пытаюсь что-то выяснить о JLayeredPane в Swing. Если кто-то использовал этот класс, обратная связь будет принята.

Документация для getLayer (JComponent c) гласит:

Получает свойство слоя для JComponent, это не вызывает никаких сторон такие эффекты, как setLayer (). (картина, добавить / удалить и т. д.) Обычно вы должны используйте метод экземпляра getLayer ().

Очевидно, что здесь есть некоторая ошибка, поскольку это метод экземпляра getLayer () (нет перегруженных версий)

Есть ли на самом деле другой вызов, который нужно сделать здесь, или кто-то просто слишком хотел скопировать из putLayer ():

Устанавливает свойство слоя на JComponent. Этот метод не вызывает любые побочные эффекты, такие как setLayer () (рисовать, добавлять / удалять и т. д.). Обычно Вы должны использовать метод экземпляра setLayer (), чтобы получить желаемые побочные эффекты (например, перерисовки).

1 Ответ

2 голосов
/ 10 февраля 2009

Как и многие вещи в 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 и его содержимого могут быстро усложниться.

...