5 / 6 / 4
Регистрация: 03.12.2009
Сообщений: 267

setLocationRelativeTo и getLocationOnScreen

03.03.2011, 20:30. Показов 6532. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пользуюсь методом setLocationRelativeTo со значением null чтобы переместить, окно jFrame в центр экрана. На JPanel отлавливаю событие клика мышью. Получаю координаты клика в системе координат с началом в углу монитора. Подскажите, как переместить начало системы координат для событий в левый верхний угол JPanel или хотя бы преобразовать координаты GetLocationOnScreen в координаты JPanel..
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.03.2011, 20:30
Ответы с готовыми решениями:

Неоднозначность с setLocationRelativeTo(null)
Почему такое может быть? При использовании такой конструкции: frame.setLocationRelativeTo(null), в одном случае по центру экрана...


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

Или воспользуйтесь поиском по форуму:
8
 Аватар для Skipy
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
04.03.2011, 10:11
Цитата Сообщение от Karpo Посмотреть сообщение
На JPanel отлавливаю событие клика мышью. Получаю координаты клика в системе координат с началом в углу монитора.
Это как? Координаты клика отдаются в серке компоненты, на которой он обрабатывается. Пример можно?
1
5 / 6 / 4
Регистрация: 03.12.2009
Сообщений: 267
04.03.2011, 12:26  [ТС]
Вот, на скрине видно.Получаю координаты клика с помощью getLocationOnScreen. setLocationRelativeTo(null) теперь уже убрал, чтобы разобраться. Кликаю в левый верхний угол JPanel(на скрине отметил красной точкой) и, ничего не делая с координатами, сразу по ним рисую маленький квадратик. Получаю смещение, по которому видно, что началом координат для getLocationOnScreen является угол монитора
Миниатюры
setLocationRelativeTo и getLocationOnScreen  
0
 Аватар для Skipy
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
04.03.2011, 13:36
Разумеется, для getLocationOnScreen началом координат будет угол монитора, это следует из названия. А для getLocation началом будет левый верхний угол контейнера, в котором находится компонента. И для событий MouseEvent, если взять getX() и getY(), началом координат тоже будет угол компоненты, в которой эти события генерируются. И это прямо сказано в API(http://download.oracle.com/jav... tml#getX()):

Returns the horizontal x position of the event relative to the source component.
1
5 / 6 / 4
Регистрация: 03.12.2009
Сообщений: 267
04.03.2011, 21:49  [ТС]
Спасибо, Skipy. Теперь всё работает как надо

Добавлено через 4 часа 35 минут
Расплодил уже много тем, поэтому попробую спросить здесь. Посмотрите, на мой скрин, на нём бордер JPanel находится под фоновой заливкой. Как сделать, чтобы он был поверх фона?И ещё, как сделать так чтобы площадь залитого фона уменьшилась?Нужно что-то вроде внутреннего отступа для JPanel..
0
 Аватар для Skipy
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
05.03.2011, 11:00
Вообще-то так и должно быть. Рамка входит в компоненту. Я об этом писал вот тут: . Если Вы хотите сделать область рисования внутри рамки - делайте JPanel, устанавливайте на ней рамку, BorderLayout, а внутрь по центру добавляйте Вашу компоненту, на которой Вы рисуете. Или же можете отслеживать при рисовании размеры рамки, это есть в той же статье, даже пример кода есть.
1
5 / 6 / 4
Регистрация: 03.12.2009
Сообщений: 267
05.03.2011, 23:03  [ТС]
Благодарю)

Добавлено через 6 часов 12 минут
Skipy, но ведь при BorderLayout() размеры дочернего компонента игнорируются и создать отступ от внешнего элемента не получается. Максимум что можно сделать - это пустой бордер на внешнем элементе. Или всё - таки можно как-то сделать отступ?
0
 Аватар для Skipy
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
06.03.2011, 00:43
Так. У Вас есть контейнер. В нем рамка. В нем установлен BorderLayout. И в центр контейнера добавлен один элемент. Так?

Менеджер компоновки принимает во внимание установленную рамку и раскладывает компоненты так, что она не перекрывается. Попробуйте сами, у меня сейчас под рукой среды разработки нет.
0
5 / 6 / 4
Регистрация: 03.12.2009
Сообщений: 267
06.03.2011, 15:59  [ТС]
У меня JFrame, в нём JPanel, в нём JLabel. JLabel не перекрывает рамку JPanel. Проблема в том, что я не могу расположить JLabel в центре JPanel , с отступами, чтобы JLabel не расползался по JPanel. Можно задать координаты JLabel вручную, но мне кажется, это не лучший вариант
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Ответ Создать тему
Опции темы

Новые блоги и статьи
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru