Fokus in SWT bestimmen

8

Ich weiß, dass ich sehen kann, ob ein bestimmtes Widget Kontrolle in SWT hat, indem ich isFocusControl() darauf verwende. Wenn mein erwartetes Widget jedoch keinen Fokus hat, wie kann ich dann feststellen, was (dh was hat den Fokus weggenommen)?

Ich kann Tastaturereignisse mit Polygonzug-Listenern behandeln, aber wenn ich den Fokus mit Mausklicks ändere, scheint meine Anwendung zu mystifizieren. Ich kann nicht herausfinden, wie ich den Gegenstand finde, der den Fokus vom vorherigen Gegenstand genommen hat.

Ich habe auch Probleme, den Fokus innerhalb eines FocusLost Listeners zuverlässig auf ein anderes Widget zu setzen, wenn der Fokus durch ein Mausereignis geändert wird.

Irgendwelche Vorschläge?

    
Zoot 07.01.2011, 17:12
quelle

4 Antworten

12

Es ist:

%Vor%     
Daniel 07.01.2011, 17:28
quelle
2

Wie bereits erläutert, teilt Ihnen Display.getFocusControl () mit, welches Steuerelement den Fokus hat. Sie können Informationen über die setData () - Methoden mit Widgets verknüpfen. Sie können dies mit jedem Steuerelement tun, das möglicherweise den Fokus bekommen könnte, und dann sollte getData () Ihnen helfen herauszufinden, welches Steuerelement den Fokus hat.

Andernfalls können Sie einfach Zeiger auf die Steuerelemente halten, die Sie erstellt haben, und den Zeiger mit Ihren bekannten Steuerzeigern vergleichen, nein?

    
stippi 07.06.2012 09:40
quelle
2

Da dies eine knifflige Angelegenheit ist, möchte ich etwas zum zweiten Teil der Frage hinzufügen:

  

Ich habe auch Probleme, den Fokus innerhalb eines FocusLost-Listeners zuverlässig auf ein anderes Widget zu setzen, wenn der Fokus durch ein Mausereignis geändert wird.

Wenn Sie den Fokus mit der Maus ändern, wird das Mausereignis nach den Fokusereignissen verarbeitet. Dies kann dazu führen, dass das Mausereignis Änderungen zurücknimmt, die Sie in den Fokusereignissen anwenden.

Um beispielsweise den Inhalt eines Textfelds auszuwählen, nachdem das Textfeld durch einen Mausklick fokussiert wurde, kann die Auswahl durch einen asynchronen Aufruf verzögert werden, bis die Ereignisse ausgelöst wurden.

%Vor%

Ohne den asynchronen Aufruf widerruft das Mausereignis die im Fokusereignis vorgenommene Auswahl.

    
Johnson 12.08.2015 11:35
quelle
1

getFocusControl gibt ein Control zurück und Ihr Element erbt von Control. Ich benutze eine Menge von benutzerdefinierten Steuerelementen und wenn ich bekomme, was den Fokus hat, dann bestimme ich, welche Klasse es wirklich ist, indem ich einen Satz von if (control instanceof myclass) Anweisungen verwende (sonst ifs nach dem ersten) Dann, wenn ich die richtige Klasse habe, werde ich in diese Klasse werfen und die richtigen Getter-Methoden aufrufen, die ich in meine Klasse gelegt habe.

Hoffe, das hilft,

    
mike 05.09.2012 14:02
quelle

Tags und Links