2010-05-12 4 views
8

Wir wollen schnell Prototypen-Widgets in Java. Wir überlagern sie über einem Display, das in einem proprietären 3rd-Party-Grafikpaket geschrieben ist. Wir stellen fest, dass die Java-GUI den Tastaturfokus vom Fenstermanager entfernt.Wie stoppe ich/Workaround Java-Anwendungen stehlen den Fokus in Linux-Window-Manager

Der Fenster-Manager ist fvwm, ich habe versucht, es zu konfigurieren, so dass die Java-App eingerichtet ist, Fokus nicht zu erhalten, und darüber hinaus, wenn es jemals den Fokus erhält, es wegzunehmen und es an die andere GUI zu geben.

Wenn ich dies mit der Java-App funktioniert es nicht funktioniert (wenn die Maus über die Java-GUI ist Tastaturfokus hat) - wenn ich einige Standard X GUI-Widget (XEyes) anstelle der Java-GUI es tauschen klappt wunderbar. Dies verleiht der Behauptung (die von den Leuten bei fvwm aufrechterhalten wird), dass Java die ICCCM nicht respektiert, etwas Flüchtigkeit.

Ich frage mich, ob andere Leute dieses Problem gelöst haben und wenn ja wie. Bis jetzt habe ich ein paar Möglichkeiten, wie man versucht, und dies zu beheben:

1) Twiddle Java-Einstellungen, in der Hoffnung, dass, wenn ich den Fokus dort vielleicht Fokus Fokussteuerung zurück zum Fenstermanager (bisher habe ich versuchte "setFocusable (false)" auf dem übergeordneten JFrame. Dies hat nicht funktioniert. Ein Thread "http://java.sun.com/javase/6/webnotes/trouble/TSG-Desktop/html/awt.html#gdaao" angegeben, ich sollte stattdessen tun "Window.setFocusableWindowState (false)" Die betreffende GUI wurde noch nicht in einem Fenster, aber Ich bin auch nicht vollständig davon überzeugt, dass Java den Fokus

2) niedere X-Aufrufe im Java-Programm mit JNI machen wird. Ich denke, das würde wahrscheinlich funktionieren, aber ich habe nie viel mit Low-Level X gespielt. Ich bin mir nicht sicher, welche Anrufe ich verwenden soll (XtSetKeyboardFocus() sollte gefährlich sein ...) oder wie ich mich identifizieren kann die GUI, auf der ich arbeite (in dieser Hinsicht war fvwm nett, da sie eine GUI hatte, die es erlaubte, auf eine andere GUI zu klicken und ihren "Namen" und "Klasse" herauszufinden)

3) benutze einen "stärkeren" Fenstermanager. Einige Fenstermanager, die ICCCM nicht verwenden, können möglicherweise besser mit Java umgehen. Natürlich gibt es eine Fülle von Managern, und ich bin mir nicht sicher, worauf ich mich konzentrieren sollte. Ebenso scheint es so, als würden viele den Fokus nach App nicht spezifizieren (die meisten scheinen sich nur um breite Richtlinien zu kümmern).

Antwort

5

Schließlich wurde der Prototyp in einem JWindow anstatt in einem JFrame überarbeitet, und als JWindow focusableWindowState (false) gesetzt hatte, gab Java den Fokus zurück ... Problem gelöst.

Verwandte Themen