Как временно запретить прослушивание мыши на окне? - PullRequest
2 голосов
/ 21 февраля 2012

Я пишу игру на Java, и это первая игра, которую я пытаюсь сделать «красивой». Игра называется Bantumi - это настольная игра, и сейчас я программирую анимацию для движений. Проблема заключается в том, что, когда анимация движения запущена, доска все еще получает событие мыши, и если пользователь выбирает новое движение, бегущее будет отброшено.

Для доски я использую класс, расширяющий JLayeredPane. Вот как у меня мои слои:

Слой 0: Отверстия с семенами, поэтому пользователи выбирают одну для движения, каждая из которых является JPanel с MouseListener.

Слой 1: выделение, которое отмечает текущее выбранное отверстие

Слой 2: Анимация движения.

Уровень 10: пользовательский класс системы уведомлений, который я написал, он говорит такие вещи, как «Ваш ход», «Повторить ход», «Вы выиграли» и т. Д.

Я хочу предотвратить любое возможное событие мыши в любом из этих слоев во время работы анимации, как мне это сделать? Я думал, что добавления панели, покрывающей всю область в топовом плеере, было достаточно, но это не сработало. Есть обходной путь?

Ответы [ 2 ]

5 голосов
/ 21 февраля 2012

Для (временного) отключения событий от MouseListener (KeyListener ....) вы можете использовать

public void consume()
Consumes this event so that it will not be processed in the 
default manner by the source which originated it.

, например

whatever.addMouseListener(new MouseListener() {

    public void mouseClicked(MouseEvent e) {
         if (somethingIsTrue) {
            //do some stuff from mouse listener         
         } else {
            e.consume();
         }
     } 
     .
     .
     .
}
4 голосов
/ 21 февраля 2012

Я думал, что добавления панели, покрывающей всю область в топ-плеере, было достаточно, но это не сработало.

Если это графический интерфейс Swing, вы уже получилиJPanel, который покрывает окно верхнего уровня, glassPane, но единственный способ сделать эту работу - это добавить MouseListener (или MouseListener и MouseMotionListener), и вы должны сделать его видимым.

Выможно получить стеклянную панель верхнего окна, вызвав getGlassPane() в окне верхнего уровня или в его корневой панели, добавив к нему MouseListener и MouseMotionListener, а затем, когда вы захотите сделать графический интерфейс невосприимчивым к событиям мыши, установите стеклянную панель видимойпозвонив по номеру setVisble(true)Вы можете отключить этот эффект, выполнив обратное, позвонив setVisble(false).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...