9 Stimmen

Was ist der Unterschied zwischen forceFocus() und setFocus() in SWT?

Ich verstehe den Unterschied zwischen diesen beiden Methoden nicht ganz. In welcher Situation würde forceFocus() besser sein als setFocus() ?

9voto

kem Punkte 1117

によると SWT: Das Standard Widget Toolkit, Band 1 , forceFocus():

Zwingt die Steuerung zu Ereignisse. Steuerelemente, die normalerweise keine Tastatureingaben akzeptieren, erhalten den Fokus mit dieser Methode. Wenn der Fokus nicht zugewiesen werden kann, wird false zurückgegeben.

auch:

Im Allgemeinen ist die Forcierung des Fokus etwas, das Sie niemals tun sollten. Zum Beispiel ist das Erzwingen des Fokus auf ein Label ist nicht sehr nützlich, da Beschriftungen nicht in einer Weise gezeichnet werden, die auf dass sie Eingaben akzeptieren können. Erzwingen des Fokus auf ein Steuerelement, das dies nicht erwartet kann Benutzer verwirren, weil sie nicht wissen wissen, wohin ihre Tastenanschläge gehen. Anwendungsprogramme sollten immer setFocus() verwenden, um den Fokus zuzuweisen.

4voto

Randy Baird Punkte 71

Ich komme viel zu spät, aber ich habe gerade eine lange Sitzung über etwas, das damit zusammenhängt, beendet und dachte, ich würde einen kurzen Bericht schreiben:

Wenn Ihre Kontrolle Kinder hat, wird die setFocus(myControl) führt eine Tiefensuche in der untergeordneten Struktur durch und setzt den Fokus auf das unterste Kind. Auf der anderen Seite, forceFocus(myControl) einfach den Fokus auf myControl setzen und damit fertig sein.

Ich hatte eine Situation mit einem modeless Dialog mit einem GridLayout, wo die meisten der Gitterzellen waren eine Reihe von Canvas subclassed Objekte, die Fokus benötigt. (Ja, das ist ein bisschen seltsam, aber ich wollte in der Lage sein, den Mauszeiger über eine Zelle zu bewegen und etwas in sie einzugeben.) Das letzte Steuerelement im Raster war eine Schaltfläche "Fertig", die ich als Standardauswahl festgelegt.

Wenn die Maus die Zellen der Leinwand verließ, führte ich eine setFocus(myDialogShell) die den Fokus sofort auf das erste Canvas-Element setzt und verhindert, dass die Schaltfläche "Fertig" die \r und die ganze schmutzige Angelegenheit zu beseitigen. Auf der anderen Seite, forceFocus(myDialogShell) hat den Zweck erfüllt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X