 |
26-01-2009, 13:25
|
#1
|
|
Registered User
Сообщений: 1,341
Проживание:
Регистрация: 08-07-2008
Status: Offline
Репутация: 0
|
Вопрос по Яве
Рас здесь такие спецы водятся, решил спросит вопрос, на который сам пока решения не нашел. Есть самодельный Component, помещенный на JPanel . Хотелось бы отловить момент, когда мыша попадает на определенную область компонента. Проблемы возникают, когда мыша нажата за границей компонента, а потом затащенна на компонент. В этом случае dragMouse не приходит. Кто-нибудь такое дело отлавливал?
|
|
|
|
26-01-2009, 18:37
|
#2
|
|
Registered User
Сообщений: 1,341
Проживание:
Регистрация: 08-07-2008
Status: Offline
Репутация: 0
|
Хмм... вроде спецов много, а на вопрос чайника никто не ответил :|
|
|
|
|
26-01-2009, 20:10
|
#3
|
|
Registered User
Сообщений: 1,866
Проживание:
Регистрация: 18-11-2008
Status: Offline
Репутация: 0
|
Поразбежалися, сокровища ищут, тесты проводят, кризис борют...
|
|
|
|
26-01-2009, 20:43
|
#4
|
|
Реалист
Сообщений: 15,352
Проживание: да
Регистрация: 13-06-2007
Status: Offline
Репутация: 0
|
Цитата:
|
Сообщение от prius
Рас здесь такие спецы водятся, решил спросит вопрос, на который сам пока решения не нашел. Есть самодельный Component, помещенный на JPanel . Хотелось бы отловить момент, когда мыша попадает на определенную область компонента. Проблемы возникают, когда мыша нажата за границей компонента, а потом затащенна на компонент. В этом случае dragMouse не приходит. Кто-нибудь такое дело отлавливал?
|
мне кажется что если мыша нажата в контексте одного компонента, то и эвенты будут роутиться тому же компоненту, даже если выйти из его контекста, до тех пор пока не отжата, и отжатие ему пойдёт. просто драг, без нажатия, будет приходить тем, над которыми курсор, потому что контексты меняются вместе с движением. причём если драг не обрабатывается компонентом, то он передаётся дальше по цепочке его детям, входящим в контекст, и находящимся под курсором.
|
|
|
|
26-01-2009, 21:54
|
#5
|
|
Registered User
Сообщений: 1,341
Проживание:
Регистрация: 08-07-2008
Status: Offline
Репутация: 0
|
Цитата:
|
Сообщение от Suhov
мне кажется что если мыша нажата в контексте одного компонента, то и эвенты будут роутиться тому же компоненту, даже если выйти из его контекста, до тех пор пока не отжата, и отжатие ему пойдёт. просто драг, без нажатия, будет приходить тем, над которыми курсор, потому что контексты меняются вместе с движением. причём если драг не обрабатывается компонентом, то он передаётся дальше по цепочке его детям, входящим в контекст, и находящимся под курсором.
|
Ну, я уже понял, что драг будет приходить туда, где его нажали. Однако, по цепочке он не передается. Только если самому передавать начать, наверное. Но, на кнопку приходит МоусеЕнтер евент. Можно как-нибудь перехватить тот самый драг евент или вообще его аннулировать?
|
|
|
|
26-01-2009, 23:12
|
#6
|
|
Реалист
Сообщений: 15,352
Проживание: да
Регистрация: 13-06-2007
Status: Offline
Репутация: 0
|
Цитата:
|
Сообщение от prius
Ну, я уже понял, что драг будет приходить туда, где его нажали. Однако, по цепочке он не передается. Только если самому передавать начать, наверное. Но, на кнопку приходит МоусеЕнтер евент. Можно как-нибудь перехватить тот самый драг евент или вообще его аннулировать?
|
драг по цепочке и не должен передаваться. он поступает тому, в чьём контексте была мыша нажата. если там не обрабатывается, то пропадает. компонент может делать с эвентом что захочет - может и детям предать, только своим. поэтому если ваш компонент создан в контексте другого, который получает драг, то это уж его дело - передавать вашему или нет.
я в первом посте неверно выразился. по цепочке передаётся не драг, а простой мув. драг чётко привязан к тому, в чьём контексте произошёл моусеентер.
а зачем вам драг аннулировать? если вы с драгом который адресован вашему компоненту хотите что то делать, то делайте. аналогия с виндой очень прямая. поэкспериментируйте с драгами на рабочем столе - щёлкнули на пустом месте и потянули, всё стало выделяться - главное окно рабочего стола это делает, щёлкнули на папочке и потянули - папочка поехала, тоже окно рабочего стола это делает, а если например над этими папками открыто окошко ворда, и щёлкнули в ворде и потянули, то ворд начал выделять, выехали за пределы окна - всё равно ворд выделяет - потому что ему приходит всё. а если щёлкнули на рабочем столе и потянули, заехали в окно ворда - ворд не реагирует, потому как не получает ничего. и это правильно, так работает роутинг эвентов.
|
|
|
|
26-01-2009, 23:28
|
#7
|
|
Registered User
Сообщений: 1,341
Проживание:
Регистрация: 08-07-2008
Status: Offline
Репутация: 0
|
Цитата:
|
Сообщение от Suhov
драг по цепочке и не должен передаваться. он поступает тому, в чьём контексте была мыша нажата. если там не обрабатывается, то пропадает. компонент может делать с эвентом что захочет - может и детям предать, только своим. поэтому если ваш компонент создан в контексте другого, который получает драг, то это уж его дело - передавать вашему или нет.
я в первом посте неверно выразился. по цепочке передаётся не драг, а простой мув. драг чётко привязан к тому, в чьём контексте произошёл моусеентер.
а зачем вам драг аннулировать? если вы с драгом который адресован вашему компоненту хотите что то делать, то делайте. аналогия с виндой очень прямая. поэкспериментируйте с драгами на рабочем столе - щёлкнули на пустом месте и потянули, всё стало выделяться - главное окно рабочего стола это делает, щёлкнули на папочке и потянули - папочка поехала, тоже окно рабочего стола это делает, а если например над этими папками открыто окошко ворда, и щёлкнули в ворде и потянули, то ворд начал выделять, выехали за пределы окна - всё равно ворд выделяет - потому что ему приходит всё. а если щёлкнули на рабочем столе и потянули, заехали в окно ворда - ворд не реагирует, потому как не получает ничего. и это правильно, так работает роутинг эвентов.
|
Ну, мне оно надо для следующего. У меня есть собственная кнопка. Если начать драгать из-за ее пределов, а потом затащить на нее, то ни мышаНад и мышаРелесе не придотят. Вобщем-то с этим можно жить, но все-равно выглядит, как глюк.
|
|
|
|
26-01-2009, 23:32
|
#8
|
|
Реалист
Сообщений: 15,352
Проживание: да
Регистрация: 13-06-2007
Status: Offline
Репутация: 0
|
Цитата:
|
Сообщение от prius
Ну, мне оно надо для следующего. У меня есть собственная кнопка. Если начать драгать из-за ее пределов, а потом затащить на нее, то ни мышаНад и мышаРелесе не придотят. Вобщем-то с этим можно жить, но все-равно выглядит, как глюк.
|
нормальное поведение. не глюк. чтобы реализовать драг_и_дроп, если этого хочется, должна быть поддержка со стороны ос. одной явы недостаточно. но для кнопок я даже юзкейс сходу не могу придумать что на них можно кидать, чтобы они хавали. обычно из одного контейнера перекидывают что нибудь в другой, типа файл открыть или скопировать, и тд.
|
|
|
|
12-02-2009, 01:45
|
#9
|
|
Registered User
Сообщений: 1,341
Проживание:
Регистрация: 08-07-2008
Status: Offline
Репутация: 0
|
Еще один вопрос. Вроде - ерунда, а как-то не получается.
Хочу открыть окно на весь экран, но с учетом линейки(старт). Но никак не могу выцарапать измерения свободной площади. Кто-нибудь сталкивался с такой проблемой в Линухе? Toolkit выдает всю площадь экрана и линейка накрывает низ окна.
|
|
|
|
| Опции темы |
Поиск в этой теме |
|
|
|
| Опции просмотра |
Оценка этой теме |
Комбинированный вид
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
|
|
|