Невозможно установить курсор мыши JLayeredPane - PullRequest
3 голосов
/ 04 июня 2010

Я сталкиваюсь с проблемой, которую не могу ни найти, ни найти ответ в Интернете.

У меня есть JLayeredPane, и когда у него есть только одна дочерняя панель, я могу правильно установить курсор с помощью setCursor (). Курсор появляется и все в порядке. Но когда я добавляю дополнительную JPanel в JLayeredPane, курсор больше не появляется

например это работает:

m_layeredPane = new JLayeredPane();
m_layeredPane.setLayout(new WBLayoutManager());
m_layeredPane.add(m_mediaPanel, new Integer(0));
// m_layeredPane.add(m_whiteboardPanel, new Integer(1));

m_layeredPane.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); // WORKS

но это не так:

m_layeredPane = new JLayeredPane();
m_layeredPane.setLayout(new WBLayoutManager());
m_layeredPane.add(m_mediaPanel, new Integer(0));
m_layeredPane.add(m_whiteboardPanel, new Integer(1));

m_layeredPane.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); // FAILS

Кто-нибудь знает, как заставить пользовательские курсоры работать в JLayeredPane

Ответы [ 4 ]

3 голосов
/ 04 июня 2010

Если вы посмотрите на javax.swing.JLayeredPane исходный код, вы увидите, что его конструктор определен так:

public JLayeredPane() {
    setLayout(null);
}

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

1 голос
/ 13 ноября 2013

Пока тема старая, ни один из ответов не удовлетворил. Я решил проблему, вызвав метод setCursor JLayeredPane следующим образом:

this.getParent().setCursor( Cursor.getDefaultCursor() );

Где «this» - это компонент, на который я хочу изменить курсор. Его родитель - JLayeredPane (так как он добавлен к нему).

0 голосов
/ 04 июня 2010

Вы пытались взять первый рабочий код, но поместили m_mediaPanel на уровень 1?Это, вероятно, тоже не сработает.Я думаю, это связано с тем, что верхняя панель определяет курсор.На уровне 0 это можно определить по слоистой панели.

0 голосов
/ 04 июня 2010

Работает нормально для меня, когда используется демонстрационный код Как использовать многослойные панели .

Основываясь на 3 строках кода, единственное отличие, которое я вижу из этого урока, состоит в том, что вы используете менеджер макетов.

Сравните ваш код с руководством, чтобы найти другие отличия.

...