0 / 0 / 0
Регистрация: 05.10.2013
Сообщений: 8
|
|
Координаты компонента при использовании менеджера компоновки29.11.2013, 16:38. Показов 1655. Ответов 10
Метки нет Все метки)
(
Есть фрейм. Часть его занимает некий компонент(extends JPanel, если важно). По некоторому событию нужно передать в этот компонент координаты мыши. При чём координаты относительно этого самого компонента. Т.е. начало отсчёта в левом верхнем углу панели, а не всего фрейма.
Вычитать координаты самой панели не получается - используются менеджеры компоновки и все размеры и координаты компонентов равны нулю. Собственно, как получить координаты мыши относительно определённого компонента? Добавлено через 5 минут UPD. Пробовал вешать MouseMotionListener на компонент, но всё равно *задумался и ушел ещё кое-что проверить :-) * Добавлено через 14 минут Нет, MouseMotionListener тоже передаёт либо координаты относительно фрейма, либо (0, 0)...
0
|
29.11.2013, 16:38 | |
Ответы с готовыми решениями:
10
Ошибка компоновки при использовании MPIR Ошибка компоновки при использовании MPIR
|
0 / 0 / 0
Регистрация: 05.10.2013
Сообщений: 8
|
|
29.11.2013, 16:52 [ТС] | |
Программа: морской бой. Сейчас занимаюсь размещением кораблей. Слева поле (подкласс JPanel), справа - корабли (Rectangle'ы, отрисовываются поверх форму вручную). Корабли перетаскиваются (dragged) мышкой. При отпускании мышки нужно передать её координаты панели.
Попытался сделать два MouseMotionListener'а - один для панели (обновляет координаты внутри компонента), другой - для всего фрейма (отвечает за само перетаскивание кораблей). Надеюсь, более-менее понятно, извиняюсь, что сразу не объяснил сути ![]()
0
|
0 / 0 / 0
Регистрация: 05.10.2013
Сообщений: 8
|
||||||||||||||||
29.11.2013, 19:58 [ТС] | ||||||||||||||||
Listener поля:
Кликните здесь для просмотра всего текста
Listener фрейма: Кликните здесь для просмотра всего текста
И весь файл, чтоб два раза не бегать ![]() Кликните здесь для просмотра всего текста
Но событие mouseMoved из поля не вызывается, когда пользователь перетаскивает корабль. Если просто водить мышью над полем, в консоли есть сообщения из этого метода. А при перетаскивании - только mouseDragged.
0
|
0 / 0 / 0
Регистрация: 05.10.2013
Сообщений: 8
|
|
30.11.2013, 10:57 [ТС] | |
Это я собирался сделать перетаскивание только левой кнопкой мыши, но ещё не разбирался как и оставил просто бессмысленное условие) А curShip проверяется на null строчкой выше.
В общем, я пока сделал весьма костыльное решение: 1) В mouseMoved вычитаем из координат относительно экрана (getXOnScreen()) координаты относительно поля (getX()) - получаем координаты левого верхнего угла поля относительно экрана. 2) При перетаскивании вычитаем из координат мыши на экране координаты поля - получаем координаты мыши относительно поля. Это для обхода всё той же проблемы - события mouseMoved и mouseDragged не обрабатываются одновременно.
0
|
0 / 0 / 0
Регистрация: 05.10.2013
Сообщений: 8
|
|
01.12.2013, 10:56 [ТС] | |
При перетаскивании (перемещении мыши с зажатой клавишей) срабатывает именно mouseDragged(). В том то и проблема, что mouseMoved так не работает, иначе можно было бы все действия в нём прописать. Т.е. если просто водить мышкой по компоненту, то работает mouseMoved, а если всё то же самое, но при этом задержав кнопку мыши, то mouseDragged. Я рассчитывал, что во втором случае будут оба события работать.
0
|
01.12.2013, 10:56 | |
Помогаю со студенческими работами здесь
11
При использовании компонента RadioGroup Ошибка подключения к БД при использовании WPF-компонента
Как установить размера пинга при использовании компонента INDY IdIcmpClient ревизия №6 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Опции темы | |
|
Новые блоги и статьи
![]() |
||||
Динамические массивы в C++ - создание и использование
NullReferenced 27.04.2025
Динамические массивы представляют собой один из фундаментальных инструментов программирования на C++, позволяющий создавать структуры данных, размер которых определяется во время выполнения. . .
|
Асинхронный JavaScript: Промисы, Async/Await и Fetch API
Reangularity 27.04.2025
Пользователь заходит на веб-страницу, нажимает кнопку и. . . ничего не происходит. Сайт словно замер. Через несколько секунд всё внезапно оживает, но пользователь уже успел закрыть вкладку. Знакомая. . .
|
Management on GitLab and repository management in Visual Studio code
jigi33 27.04.2025
- repo management on GitLab
- CI/ CD in GitLab
- VCS repository management in Visual Studio code
(see attachments)
|
Kanban или Scrum - что выбрать?
EggHead 27.04.2025
Kanban и Scrum — уже много лет удерживают лидирующие позиции среди гибких подходов. Руководители проектов и команды разработчиков то и дело сталкиваются с дилеммой: какой из этих двух методов выбрать. . .
|
Кастомные Middleware на C# в ASP.NET Core
UnmanagedCoder 27.04.2025
Разработка веб-приложений сегодня мало напоминает монолитное программирование прошлых лет. На смену громоздким блокам кода пришла модульная архитектура, где каждый компонент выполняет строго. . .
|
Анализ и линтинг кода JavaScript: ESLint, Prettier и JSHint
run.dev 26.04.2025
JavaScript прошёл долгий путь от простого языка для анимации веб-страниц до основы современной веб-разработки. С ростом сложности приложений, увеличением кодовых баз и масштабированием команд. . .
|
Паттерны в Python: Singleton, Factory и Observer
py-thonny 26.04.2025
Паттерны проектирования — это проверенные временем решения типовых проблем разработки программного обеспечения. Их история берёт начало с книги "Приёмы объектно-ориентированного проектирования. . . .
|
Исключения в C#: Stack Overflow, Access Violation и Out of memory
stackOverflow 26.04.2025
Исключения в C# — это не только механизм оповещения о проблемах, а целое искусство управления потоком выполнения программы в экстремальных ситуациях. Обычное исключение, например,. . .
|
Логирование в C# ASP.NET Core с помощью Serilog, ElasticSearch, Kibana
stackOverflow 25.04.2025
Помните те времена, когда для анализа проблемы приходилось подключаться к серверу, искать нужный лог-файл среди десятков других и вручную фильтровать тысячи строк в поисках ошибки? К счастью, эти дни. . .
|
Структура "железный OnKeyUp" вместо антидребезга. Полностью асинхронный счётчик.
Hrethgir 25.04.2025
Программа для симуляции схемы - Logisim Evolution
В общем какое-то время отвлёкся, так было надо, теперь когда запилю это на verilog и FPGA , досоставлю заявку в ФИПС на полезную модель - не готов. . .
|