JAVA - я не хочу нажимать на мое приложение, чтобы другие приложения теряли фокус - PullRequest
1 голос
/ 06 мая 2010

Ух ты, какой глупый вопрос ты можешь сказать. Но возможно ли это? У меня есть событие перемещения мыши в Jpanel, и оно работает, даже когда приложение не в фокусе, теперь у меня может быть что-то подобное для события щелчка или что-то подобное. И самое главное, я не хочу, чтобы другие приложения (даже что-то вроде главного меню) теряли фокус при нажатии на свое приложение. Я подумал об очереди событий системы, но я не уверен, куда это приведет меня.

Заранее спасибо.

[РЕДАКТИРОВАТЬ - цель] Я хочу создать приложение, которое имитирует взаимодействие пользователей с системой в более позднее время. например, пользователь берет мышь, щелкает и пишет, и мое приложение будет имитировать это, скажем, через 2 часа. Конечно, мне понадобится системный хук для внешних событий, но я хотел бы избежать кода, зависящего от ОС, поэтому я в основном делаю снимок экрана, беру его в свое приложение, например, пользователь нажимает значок на захваченном изображении и затем делает оживая, я перевожу координаты в реальный значок и щелкаю по нему (с помощью робота), и таким образом я могу записывать события пользователя в собственном приложении. проблема возникает, когда пользователь нажимает на главное меню или щелкает правой кнопкой мыши (он делает это в моем приложении, а мое приложение делает это с системой, так что мое приложение находится между ними), и, конечно же, настоящее главное меню теряет фокус, когда пользователь пытается нажать на один из его предметов.

извините за мой английский.

1 Ответ

1 голос
/ 06 мая 2010

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

Я только что нашел это:

Фокусируемые окна

Для поддержки окон палитры и методов ввода клиентский код может не позволить окну стать сфокусированным окном. Благодаря транзитивности это не позволяет Окну или любому из его потомков стать владельцем фокуса. Windows без фокуса может все еще иметь Windows, которая является фокусируемой. По умолчанию каждый Фрейм и Диалог являются фокусируемыми. Каждое окно, которое не является фреймом или диалоговым окном, но у которого на экране отображается ближайший владелец фрейма или диалогового окна и в котором есть хотя бы один компонент в цикле обхода фокуса, также можно фокусировать по умолчанию. Чтобы сделать окно не фокусируемым, используйте Window.setFocusableWindowState (false).

В этом документе http://java.sun.com/j2se/1.5.0/docs/api/java/awt/doc-files/FocusSpec.html

Звучит так, как будто он может делать то, что вы хотите.

...