Как делают меня приложения Java остановки/обходного решения, крадя фокус в менеджерах окон Linux

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

Менеджер окон является fvwm, я попытался настроить его так, приложение Java является установкой для не получения фокуса, и кроме того если это когда-нибудь заставляет фокус устранять его и давать его другому GUI.

Если я выполняю это с приложением Java, оно не работает (каждый раз, когда мышью является по Java GUI, оно имеет клавиатурный фокус) - если я подкачиваю некоторый стандарт X виджетов GUI (XEyes) вместо Java GUI, оно работает как очарование. Это предоставляет некоторую веру в требование (сохраняемый людьми в fvwm), что Java не уважает ICCCM.

Я задаюсь вопросом, решили ли другие люди эту проблему и раз так как. До сих пор у меня есть несколько вариантов для того, как попытаться зафиксировать это:

1) вертите настройки Java, надеясь, что, если я выключаю фокус там, возможно, он вручит управление задним фокусом менеджеру окон (до сих пор, я попробовал "setFocusable (ложь)" на родительском JFrame. Это не работало. Поток "http://java.sun.com/javase/6/webnotes/trouble/TSG-Desktop/html/awt.html#gdaao" указал, что я должен вместо этого сделать "Window.setFocusableWindowState (ложь)" рассматриваемый GUI еще, не был восстановлен в Окне, но я также не полностью убежден, что Java оставит фокус

2) выполните низкоуровневые X вызовы в программе Java с помощью JNI. Я думаю, что это, вероятно, работало бы, но, я никогда не играл очень с низким уровнем X. Я не уверен, что звонит, я должен использовать (XtSetKeyboardFocus (), как предполагается, опасен для вызова...), или как я могу определить GUI, на который я воздействую (в этом отношении fvwm, было хорошо, так как у них был GUI, который позволил Вам нажимать на другой GUI и узнавать его "имя" и "класс"),

3) используйте "более сильный" менеджер окон. Некоторые менеджеры окон, которые не используют ICCCM, смогли иметь дело с Java лучше. Конечно, существует множество менеджеров, и я не уверен, что сконцентрироваться на. Аналогично многие, кажется, коротки при определении фокуса приложением (большинство, кажется, только заботится о широких политиках).

9
задан Dan S 12 May 2010 в 03:58
поделиться

1 ответ

Наконец, прототип был переработан в JWindow, а не в JFrame, и когда этот JWindow вызвал setFocusableWindowState (false), Java вернула фокус ... проблема решена.

5
ответ дан 3 November 2019 в 07:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: