Финляндия по-русски

Финляндия по-русски (https://www.russian.fi/forum/index.php)
-   Koмпьютeры, Teлeфoны, TV & Co (https://www.russian.fi/forum/forumdisplay.php?f=6)
-   -   Вопрос по Яве (https://www.russian.fi/forum/showthread.php?t=53039)

prius 26-01-2009 13:25

Вопрос по Яве
 
Рас здесь такие спецы водятся, решил спросит вопрос, на который сам пока решения не нашел. Есть самодельный Component, помещенный на JPanel . Хотелось бы отловить момент, когда мыша попадает на определенную область компонента. Проблемы возникают, когда мыша нажата за границей компонента, а потом затащенна на компонент. В этом случае dragMouse не приходит. Кто-нибудь такое дело отлавливал?

prius 26-01-2009 18:37

Хмм... вроде спецов много, а на вопрос чайника никто не ответил :|

Бабай 26-01-2009 20:10

Поразбежалися, сокровища ищут, тесты проводят, кризис борют...

Suhov 26-01-2009 20:43

Цитата:
Сообщение от prius
Рас здесь такие спецы водятся, решил спросит вопрос, на который сам пока решения не нашел. Есть самодельный Component, помещенный на JPanel . Хотелось бы отловить момент, когда мыша попадает на определенную область компонента. Проблемы возникают, когда мыша нажата за границей компонента, а потом затащенна на компонент. В этом случае dragMouse не приходит. Кто-нибудь такое дело отлавливал?


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

prius 26-01-2009 21:54

Цитата:
Сообщение от Suhov
мне кажется что если мыша нажата в контексте одного компонента, то и эвенты будут роутиться тому же компоненту, даже если выйти из его контекста, до тех пор пока не отжата, и отжатие ему пойдёт. просто драг, без нажатия, будет приходить тем, над которыми курсор, потому что контексты меняются вместе с движением. причём если драг не обрабатывается компонентом, то он передаётся дальше по цепочке его детям, входящим в контекст, и находящимся под курсором.


Ну, я уже понял, что драг будет приходить туда, где его нажали. Однако, по цепочке он не передается. Только если самому передавать начать, наверное. Но, на кнопку приходит МоусеЕнтер евент. Можно как-нибудь перехватить тот самый драг евент или вообще его аннулировать?

Suhov 26-01-2009 23:12

Цитата:
Сообщение от prius
Ну, я уже понял, что драг будет приходить туда, где его нажали. Однако, по цепочке он не передается. Только если самому передавать начать, наверное. Но, на кнопку приходит МоусеЕнтер евент. Можно как-нибудь перехватить тот самый драг евент или вообще его аннулировать?


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

я в первом посте неверно выразился. по цепочке передаётся не драг, а простой мув. драг чётко привязан к тому, в чьём контексте произошёл моусеентер.

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

prius 26-01-2009 23:28

Цитата:
Сообщение от Suhov
драг по цепочке и не должен передаваться. он поступает тому, в чьём контексте была мыша нажата. если там не обрабатывается, то пропадает. компонент может делать с эвентом что захочет - может и детям предать, только своим. поэтому если ваш компонент создан в контексте другого, который получает драг, то это уж его дело - передавать вашему или нет.

я в первом посте неверно выразился. по цепочке передаётся не драг, а простой мув. драг чётко привязан к тому, в чьём контексте произошёл моусеентер.

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

Ну, мне оно надо для следующего. У меня есть собственная кнопка. Если начать драгать из-за ее пределов, а потом затащить на нее, то ни мышаНад и мышаРелесе не придотят. Вобщем-то с этим можно жить, но все-равно выглядит, как глюк.

Suhov 26-01-2009 23:32

Цитата:
Сообщение от prius
Ну, мне оно надо для следующего. У меня есть собственная кнопка. Если начать драгать из-за ее пределов, а потом затащить на нее, то ни мышаНад и мышаРелесе не придотят. Вобщем-то с этим можно жить, но все-равно выглядит, как глюк.


нормальное поведение. не глюк. чтобы реализовать драг_и_дроп, если этого хочется, должна быть поддержка со стороны ос. одной явы недостаточно. но для кнопок я даже юзкейс сходу не могу придумать что на них можно кидать, чтобы они хавали. обычно из одного контейнера перекидывают что нибудь в другой, типа файл открыть или скопировать, и тд.

prius 27-01-2009 02:13

Цитата:
Сообщение от Suhov
нормальное поведение. не глюк. чтобы реализовать драг_и_дроп, если этого хочется, должна быть поддержка со стороны ос. одной явы недостаточно. но для кнопок я даже юзкейс сходу не могу придумать что на них можно кидать, чтобы они хавали. обычно из одного контейнера перекидывают что нибудь в другой, типа файл открыть или скопировать, и тд.


Узкеиз такой: есть кнопка нестандартной формы. Точнее, форма у компонента стандартная (прямоугольная), но активная зона кнопки прорисованна внутри. Отсюда и есть потребность в том, чтобы отловить момент, когда мыша доходит до интересующего места на коомпоненте. Если бы кнопка занимала весь компонент, то евенты моусеЕнтры, моусеЕхит отлавливаются очень даже хорошо. Но внутри компонента отлавливать можно только моусеМове, моусеДраг. Ну да ладно, не буду больше времени на это тратить. Может потом что-нибудь найду.

prius 12-02-2009 01:45

Еще один вопрос. Вроде - ерунда, а как-то не получается.
Хочу открыть окно на весь экран, но с учетом линейки(старт). Но никак не могу выцарапать измерения свободной площади. Кто-нибудь сталкивался с такой проблемой в Линухе? Toolkit выдает всю площадь экрана и линейка накрывает низ окна.


Часовой пояс GMT +3, время: 05:26.