Форум программистов, компьютерный форум, киберфорум
Java: GUI, Графика
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
37 / 7 / 9
Регистрация: 19.09.2016
Сообщений: 908
1

Как использовать слушатель мышки?

20.01.2021, 10:50. Просмотров 2069. Ответов 8
Метки нет (Все метки)

Например, на экране есть графические объекты разных размеров/форм/цветов. Нужно, чтобы при наведении на каждый разный тип объекта производились соответствующие действия(проигрывание определенного звука). Каким образом связывать слушатель мышки и где получать эти события?
Я так понимаю, что нужно использовать mouseEntered? А как он будет знать, от какого объекта событие? Как события привязать к разным объектам?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.01.2021, 10:50
Ответы с готовыми решениями:

Слушатель мышки
Хочу рисовать линии из начала координат в место клика мышью. Клик обрабатывается, о чем в консоль...

Консоль как слушатель событий
Реально ли сделать консоль слушателем событий? - Если, к примеру, нажимаю на стрелку вниз, то...

Объясните как работает слушатель.
Ситуация такова. Имеется Фрейм. На нём кнопка conntect её обрабатывает следующий слушатель ...

2 рабочих стола с возможностью использовать разные мышки и клавиатуры
Извиняйте если не в ту тему. просто не знал куда еще написать) у соседа сгорела мать, можно ли как...

8
21 / 15 / 7
Регистрация: 09.06.2018
Сообщений: 106
20.01.2021, 10:56 2
Смотря что ты используешь для работы с графикой. Например javafx или swing или ещё что-то. Но в основном везде это вызов метода в который с помощью лямбда выражения передаётся метод, который выполняет ту или иную логику после взаимодействия с объектом.
0
55 / 37 / 19
Регистрация: 30.01.2019
Сообщений: 124
23.01.2021, 00:37 3
Можно у каждого обьекта реализовать слушателя, и соответственно , прописать действия или всем один слушатель назначить и потом по событию узнавать кто его создал и прописывать действия.
0
37 / 7 / 9
Регистрация: 19.09.2016
Сообщений: 908
23.01.2021, 22:20  [ТС] 4
Цитата Сообщение от kosta4310 Посмотреть сообщение
Можно у каждого обьекта реализовать слушателя, и соответственно , прописать действия или всем один слушатель назначить и потом по событию узнавать кто его создал и прописывать действия.
У меня больш проблема с пониманием, как управлять потоками - основной программы и слушателя. Например: на экран нарисовал и добавил координатную сетку. Добавил слушателя мыши. И теперь я не могу прослушать мышь. А если сначала добавить слушатель мыши, а потом координатную сетку, то можно вынести на экран динамическое отображение координат и оно будет работать. Почему так происходит - я совсем не понимаю. и вообще непонятно, как взаимодействует основная программа(run()) и слушатель. Анимацию тоже из основного метода программы запустить нельзя, она просто не будет работать, т.к. опять таки, слушатель и основная программа - получается параллельные процессы(потоки) в одной программе?
0
55 / 37 / 19
Регистрация: 30.01.2019
Сообщений: 124
24.01.2021, 18:28 5
Если при активности мышью в окне программы у вас выводиться sout в консоль,то мышь прослушивается и проблема в другом месте.

Добавлено через 1 минуту
sout() нужно прописать в методе run() слушателя мыши.
0
37 / 7 / 9
Регистрация: 19.09.2016
Сообщений: 908
24.01.2021, 22:31  [ТС] 6
Цитата Сообщение от kosta4310 Посмотреть сообщение
Если при активности мышью в окне программы у вас выводиться sout в консоль
Нет конечно, это было бы очевидно).
Цитата Сообщение от kosta4310 Посмотреть сообщение
sout() нужно прописать в методе run() слушателя мыши.
Что значит в методе run() слушателя? Речь о методе run() в классе, который реализует интерфейс слушателя мыши?

Я представляю себе так: В любом пользовательском классе есть основной поток, который запускается с методом main(). Если в класс добавить слушатель мыши, то это уже отдельный поток. Все что вызывается из основного метода main/run - попадает в основной поток, все что вызывается из методов слушателя - попадает в поток слушателя. Я правильно понимаю?

Еще раз:Если в каком-то из методов слушателя запустить анимацию - она не работает. Почему? Почему анимация работает только при запуске из основного потока? Если же просто отобразить какие-то данные в консоли или на экране - из потока слушателя это сделать можно. Вопрос именно в анимации. Что такого в анимации, что ее нельзя запустить из потока слушателя?
0
55 / 37 / 19
Регистрация: 30.01.2019
Сообщений: 124
24.01.2021, 23:18 7
Пример можете кинуть?
0
55 / 37 / 19
Регистрация: 30.01.2019
Сообщений: 124
25.01.2021, 15:22 8
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
 public void run() {
        ball = makeBall();
        add(ball);
        addMouseListeners();
    }
 
    public void mouseClicked(MouseEvent e) {
        System.out.println("click");
        GOval ball = (GOval) getElementAt(e.getX(), e.getY());
            if (ball != null) {
                moveBall();
        }
    }
 
    private GOval makeBall() {
        GOval circle = new GOval(
                getWidth()/2.0 - CIRCLE_RADIUS,
                getHeight()/2.0 -CIRCLE_RADIUS,
                CIRCLE_RADIUS*2,
                CIRCLE_RADIUS*2
        );
        circle.setFilled(true);
        circle.setColor(Color.BLUE);
        circle.setFillColor(Color.BLUE);
        return circle;
    }
 
    private void moveBall() {
        ball.scale(1.05);
            repaint();
    }
Вы сказали рабочий код, но у меня только рисуется круг и при клике входит в постоянный цикл. Я его убрал.
Да, в цикле не получилось у меня тоже, только по щелчку мыши меняется.

Не по теме:

Библиотекой этой раньше не пользовался, много не знаю, может как-то по другому нужно делать.



Добавлено через 10 минут
может от реализации библиотеки зависит
0
37 / 7 / 9
Регистрация: 19.09.2016
Сообщений: 908
25.01.2021, 16:17  [ТС] 9
Цитата Сообщение от kosta4310 Посмотреть сообщение
Вы сказали рабочий код
Я имел в виду, что работа с библиотекой корректная, т.е. инструкции правильные. А вот сама анимация конечно не работает, об этом и вопрос же. И вопрос не в цикле в методе анимации. Т.к. в консоль этот метод может делать выдачу в цикле. Значит поток слушателя все время активный, но у него нет возможности что-то делать в графическом окне(на канвасе).

Если например в обработчике мыши только переключать флаг: анимацию включить/выключить, анимацию постоянно крутить в цикле в главном методе, а не запускать ее на выполнение из обработчика мыши, то все работает. Почему так работает - мне непонятно.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.01.2021, 16:17

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Как можно реализовать слушатель новых сообщений?
Здравствуйте! Я хочу понять, как можно реализовать получение новых сообщений, даже когда...

Как остановить слушатель сканера отпечатков пальцев
Добрый день! Вопрос такой как после старта прослушивания сканера отпечатков принудительно...

Как сделать, чтобы для каждого пользователя был свой слушатель?
Всем привет, такая проблема: есть главный цикл слушателя longpoll, есть различные команды, одна...

Выводить координаты мышки по срабатыванию любой кнопки мышки каждый раз разными цветами
Здравствуйте , никак не могу разобраться в задании , необходимо выводить координаты мышки по...

Отслеживать движение мышки, при зажатии кнопки мышки
Всем привет! Задача такая: отслеживать движения мышки, когда зажатая левая кнопка мыши. Надо что бы...

Как использовать куки, чтобы потом было можно их использовать в запросах
Скажите полажуйста! как добавить ! куки , чтобы потом было можно использовать в запросах! тоесть ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.