| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Общие вопросы > Macintosh mouse problems |
| Автор: Мишель 24.8.2004, 17:25 |
| Доброе время суток! Вот такая проблема с мышой под Макинтош. У меня есть библиотека, которая генерирует события и кидает их в системную очередь. Запущенное приложение воспринимает эти события, как будто им реально управляет пользователь через мышь и клавиатуру. Так вот, под виндой и линухом все со свистом работает. А вот на Макинтошах возникают проблемы с правой кнопкой мыши, которая должна вызывать popup. Событие генерируется, но меню не всплывает. Причем это имеет не для всех компонент, а для некоторых. Пробовал вместо нажатия правой кнопки генерировать Ctrl + нажатие левой кнопки. Не помогает. Если запустить приложение и жать правую кнопку (или Ctrl + левую) руками, все рулит. В чем грабли? Мишель |
| Автор: AntonSaburov 24.8.2004, 17:50 |
| А код можно посмотреть. И надо Domestic Cat подождать - у него как раз Мак есть. Мне аж завидно |
| Автор: Guest 24.8.2004, 18:17 | ||
К сожалению, код нельзя. Корпоративная собственность, блин. |
| Автор: Domestic Cat 24.8.2004, 18:25 | ||
У меня все работает:
По-моему, загвоздка в том, что и правая, и левая кнопки мыши имеют код 1. Можно генерировать и передавать евент с кодом 2, а вот нажать мышку так, чтобы такой евент сгенерился, не получается. |
| Автор: Мишель 24.8.2004, 21:50 | ||
К сожалению, работает у тебя не совсем то. Мне нужно, чтобы при генерации клика правой кнопкой на компоненте вызывалось popup menu. Автоматически, как это и положено всякой компоненте. Я знаю, что события правого клика в моей проге успешно генерятся. Но меню почему-то не вызывается. Я пытался внутри драйвера мышиных событий автоматически заменять эти события на клик средней кнопки вместо правой или на клик левой кнопки с Ctrl. Не помогает Насчет того, что правая и левая кнопки имеют одинаковый код для Маков - это не так. Проверял уже. Они, как и положено, имеют номер 1 и 3, соответственно маски 16 и 4. |
| Автор: Domestic Cat 24.8.2004, 21:57 | ||||
Хм, я ловлю маус ивенты и печатаю код баттона - и правая, и левая кнопки дают код 1.
Видишь ли, у eМака на правую кнопку никаких попапов не выскакивает, только если с контролом, причем даже если делать это вручную, то ни на каком Java-приложении это само по себе не заработает - только если самому показывать попап. Может, на других и по-другому, но все равно рассчитывать на это не стоит. |
| Автор: Гость_Irina 25.8.2004, 11:10 |
| Domestic Cat, объясни тогда, пожалуйста, что надо делать, чтобы под MAC Popup Menu увидеть. Наша группа написала приложение на Java Swing для Requirement Engineering и у нас один из заказчиков работает на МАС. При нажатии правой кнопки конткстменю не появляктся. Должны мы что-то в коде менять или заказчик неправильно контекстменю вызывает? |
| Автор: AntonSaburov 25.8.2004, 11:49 |
| Гость_Irina Здравствуйте. Мы очень рады, что Вы зашли на наш форум. Если у Вас будет желание и возможность - регистрируйтесь и становитесь полноправным участником нашего форума. Чем больше профессионалов соберется, тем лучше будет для всех. |
| Автор: Domestic Cat 25.8.2004, 15:06 | ||
Создать "вручную" JPopupMenu и показывать его, отлавливая мышиные события, как в примере выше. Можно тут более подробно прочесть. http://java.sun.com/docs/books/tutorial/uiswing/components/menu.html#popup Кстати, а что вообще должно быть в том меню? |
| Автор: Мишель 25.8.2004, 16:25 | ||||||||
Я делаю то же самое - мне выдается 1,2,3 для каждой кнопки. Возможно, дело в том, что я работаю с Маком не напрямую, а через VNC-клиент.
А у меня вручную правая кнопка работает |
| Автор: Domestic Cat 25.8.2004, 17:22 |
| А какой Мак у тебя? |
| Автор: Gretchen 25.8.2004, 17:25 | ||
Gretchen alias Гость_Irina Domestic Cat спасибо за ответ. Вообщем-то в проекте PopupMenu вызывается классическим способом, как описано в Sun Swing Tutorial, то есть if (e.isPopupTrigger()) { popup.show(e.getComponent(), e.getX(), e.getY()); } Обычное context menu для выделенного куска текста. Под Windows и Linux ни каких проблем не возникает. А вот под МАС якобы меню не появляется. Якобы, потому что я сама не пробовала под МАС запускать приложение, об ошибке сообщает один из заказчиков, который работает с Apple Notebook. И возникает вопрос, действительно приложение, написанное на Java многоплатформенное, или всё-таки могут на других платформах сюрпризы возникать? Должна ли я задумываться, разрабатывая программу в Java, о том, что возможно эта часть кода на MAC OS будет работать по другому. |
| Автор: Мишель 25.8.2004, 17:37 | ||
А что именно про Мак тебя интересует и как это можно выяснить? Так все -таки, можешь что-нибудь сказать про события с Ctrl+ left click? Или может, на Маках как-то по-другому надо попап вызывать? Не так, как в том примере? |
| Автор: Domestic Cat 25.8.2004, 17:41 |
| Честное слово, не знаю. У меня (MacOSX 10.3.3) все работает. Все что могу придумать - советуется добавлять if (e.isPopupTrigger()) {... и в mausePressed и в mouseReleased для кроссплатформенности. |
| Автор: Мишель 25.8.2004, 18:13 | ||
Да я это делаю... У меня 10.3.4. Ладно, спасибо за помощь. Если решится проблема, напишу сюда, может быть, кому-нибудь пригодится. |