Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Macintosh mouse problems 
:(
    Опции темы
Мишель
Дата 24.8.2004, 17:25 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Доброе время суток!

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

Так вот, под виндой и линухом все со свистом работает. А вот на Макинтошах возникают проблемы с правой кнопкой мыши, которая должна вызывать popup. Событие генерируется, но меню не всплывает. Причем это имеет не для всех компонент, а для некоторых.
Пробовал вместо нажатия правой кнопки генерировать Ctrl + нажатие левой кнопки. Не помогает.
Если запустить приложение и жать правую кнопку (или Ctrl + левую) руками, все рулит.
В чем грабли?

Мишель
  Вверх
AntonSaburov
Дата 24.8.2004, 17:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 51
Всего: 118



А код можно посмотреть. И надо Domestic Cat подождать - у него как раз Мак есть. Мне аж завидно smile.gif
PM MAIL WWW ICQ   Вверх
Guest
Дата 24.8.2004, 18:17 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата(AntonSaburov @ 24.8.2004, 17:50)
А код можно посмотреть. И надо Domestic Cat подождать - у него как раз Мак есть. Мне аж завидно smile.gif

К сожалению, код нельзя. Корпоративная собственность, блин.
  Вверх
Domestic Cat
Дата 24.8.2004, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 50
Всего: 172



У меня все работает:

Код

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

public class test extends JFrame implements MouseListener
{
   JPopupMenu menu = new JPopupMenu();
   public test()
   {
       menu.add("Format C");
       menu.add("Delete Windows");
       menu.add("Kill Bill Gates");
       addMouseListener(this);

       setSize(300, 300);
       setDefaultCloseOperation(EXIT_ON_CLOSE);
       setVisible(true);
       try
       {
           Robot robot = new Robot();
           robot.delay(2000);
           robot.mouseMove(150, 150);
           robot.mousePress(InputEvent.BUTTON1_MASK);
           Thread.sleep(2000);
           System.exit(0);
       } catch (Exception e) {}
   }

   public void mouseClicked(MouseEvent me)
   {}
   public void mouseEntered(MouseEvent me)
   {}
   public void mouseExited(MouseEvent me)
   {}
   public void mousePressed(MouseEvent me)
   {
       System.out.println("mousePressed : " + me.getButton());

       if (me.getButton() == MouseEvent.BUTTON1)
       {
       menu.show(this, me.getX(), me.getY());
       }

   }
   public void mouseReleased(MouseEvent me)
   {}
   
   public static void main(String [] arguments)
   {
       new test();
   }
}


По-моему, загвоздка в том, что и правая, и левая кнопки мыши имеют код 1.
Можно генерировать и передавать евент с кодом 2, а вот нажать мышку так, чтобы такой
евент сгенерился, не получается.


--------------------

PM   Вверх
Мишель
  Дата 24.8.2004, 21:50 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата(Domestic @ 24.8.2004, 18:25)
У меня все работает:
По-моему, загвоздка в том, что и правая, и левая кнопки мыши имеют код 1.
Можно генерировать и передавать евент с кодом 2, а вот нажать мышку так, чтобы такой
евент сгенерился, не получается.

К сожалению, работает у тебя не совсем то. Мне нужно, чтобы при генерации клика правой кнопкой на компоненте вызывалось popup menu. Автоматически, как это и положено всякой компоненте. Я знаю, что события правого клика в моей проге успешно генерятся. Но меню почему-то не вызывается. Я пытался внутри драйвера мышиных событий автоматически заменять эти события на клик средней кнопки вместо правой или на клик левой кнопки с Ctrl. Не помогает sad.gif

Насчет того, что правая и левая кнопки имеют одинаковый код для Маков - это не так. Проверял уже. Они, как и положено, имеют номер 1 и 3, соответственно маски 16 и 4.
  Вверх
Domestic Cat
Дата 24.8.2004, 21:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 50
Всего: 172



Цитата
Насчет того, что правая и левая кнопки имеют одинаковый код для Маков - это не так. Проверял уже. Они, как и положено, имеют номер 1 и 3, соответственно маски 16 и 4.


Хм, я ловлю маус ивенты и печатаю код баттона - и правая, и левая кнопки дают код 1.

Цитата
  сожалению, работает у тебя не совсем то. Мне нужно, чтобы при генерации клика правой кнопкой на компоненте вызывалось popup menu. Автоматически, как это и положено всякой компоненте.


Видишь ли, у eМака на правую кнопку никаких попапов не выскакивает, только если с контролом, причем даже если делать это вручную, то ни на каком Java-приложении это само по себе не заработает - только если самому показывать попап.
Может, на других и по-другому, но все равно рассчитывать на это не стоит.

Это сообщение отредактировал(а) Domestic Cat - 24.8.2004, 21:59


--------------------

PM   Вверх
Гость_Irina
Дата 25.8.2004, 11:10 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Domestic Cat, объясни тогда, пожалуйста, что надо делать, чтобы под MAC Popup Menu увидеть. Наша группа написала приложение на Java Swing для Requirement Engineering и у нас один из заказчиков работает на МАС. При нажатии правой кнопки конткстменю не появляктся. Должны мы что-то в коде менять или заказчик неправильно контекстменю вызывает?
  Вверх
AntonSaburov
Дата 25.8.2004, 11:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 51
Всего: 118



Гость_Irina
Здравствуйте. Мы очень рады, что Вы зашли на наш форум. Если у Вас будет желание и возможность - регистрируйтесь и становитесь полноправным участником нашего форума. Чем больше профессионалов соберется, тем лучше будет для всех.

PM MAIL WWW ICQ   Вверх
Domestic Cat
Дата 25.8.2004, 15:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 50
Всего: 172



Цитата
Domestic Cat, объясни тогда, пожалуйста, что надо делать, чтобы под MAC Popup Menu увидеть. Наша группа написала приложение на Java Swing для Requirement Engineering и у нас один из заказчиков работает на МАС. При нажатии правой кнопки конткстменю не появляктся. Должны мы что-то в коде менять или заказчик неправильно контекстменю вызывает?


Создать "вручную" JPopupMenu и показывать его, отлавливая мышиные события, как в примере выше.
Можно тут более подробно прочесть.

http://java.sun.com/docs/books/tutorial/ui...menu.html#popup
Кстати, а что вообще должно быть в том меню?


--------------------

PM   Вверх
Мишель
Дата 25.8.2004, 16:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 25.8.2004

Репутация: нет
Всего: нет



Цитата

Цитата
Насчет того, что правая и левая кнопки имеют одинаковый код для Маков - это не так. Проверял уже. Они, как и положено, имеют номер 1 и 3, соответственно маски 16 и 4.


Хм, я ловлю маус ивенты и печатаю код баттона - и правая, и левая кнопки дают код 1.


Я делаю то же самое - мне выдается 1,2,3 для каждой кнопки.
Возможно, дело в том, что я работаю с Маком не напрямую, а через VNC-клиент.

Цитата

Цитата
  сожалению, работает у тебя не совсем то. Мне нужно, чтобы при генерации клика правой кнопкой на компоненте вызывалось popup menu. Автоматически, как это и положено всякой компоненте.

Видишь ли, у eМака на правую кнопку никаких попапов не выскакивает, только если с контролом, причем даже если делать это вручную, то ни на каком Java-приложении это само по себе не заработает - только если самому показывать попап.
Может, на других и по-другому, но все равно рассчитывать на это не стоит.

А у меня вручную правая кнопка работает wow.gif Не поленился сходить туда, где стоит Мак - и там работает нормально. Но бог с ней, в конце концов. Главный вопрос - почему не работает, даже если я заменяю все события на события Ctrl+left click?

Это сообщение отредактировал(а) Мишель - 25.8.2004, 16:26
PM MAIL   Вверх
Domestic Cat
Дата 25.8.2004, 17:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 50
Всего: 172



А какой Мак у тебя?


--------------------

PM   Вверх
Gretchen
Дата 25.8.2004, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 25.8.2004
Где: München

Репутация: 1
Всего: 4



Цитата(Domestic @ 25.8.2004, 15:06)
Создать "вручную" JPopupMenu и показывать его, отлавливая мышиные события, как в примере выше.
Можно тут более подробно прочесть.

http://java.sun.com/docs/books/tutorial/ui...menu.html#popup
Кстати, а что вообще должно быть в том меню?

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 будет работать по другому.
PM MAIL ICQ   Вверх
Мишель
Дата 25.8.2004, 17:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 25.8.2004

Репутация: нет
Всего: нет



Цитата(Domestic @ 25.8.2004, 17:22)
А какой Мак у тебя?

А что именно про Мак тебя интересует и как это можно выяснить?

Так все -таки, можешь что-нибудь сказать про события с Ctrl+ left click?

Или может, на Маках как-то по-другому надо попап вызывать? Не так, как в том примере?
PM MAIL   Вверх
Domestic Cat
Дата 25.8.2004, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 50
Всего: 172



Честное слово, не знаю. У меня (MacOSX 10.3.3) все работает. Все что могу придумать - советуется добавлять if (e.isPopupTrigger()) {... и в mausePressed и в mouseReleased для кроссплатформенности.




--------------------

PM   Вверх
Мишель
Дата 25.8.2004, 18:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 25.8.2004

Репутация: нет
Всего: нет



Цитата(Domestic @ 25.8.2004, 17:41)
Честное слово, не знаю. У меня (MacOSX 10.3.3) все работает. Все что могу придумать - советуется добавлять if (e.isPopupTrigger()) {... и в mausePressed и в mouseReleased для кроссплатформенности.

Да я это делаю...
У меня 10.3.4.
Ладно, спасибо за помощь. Если решится проблема, напишу сюда, может быть, кому-нибудь пригодится.

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0557 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.