2017-12-19 7 views
0

Ich habe eine Klasse, die ColumnViewerToolTipSupport erweitert. Diese Klasse überschreibt createViewerToolTipContentArea() und bietet benutzerdefinierten Inhalt für die QuickInfo.Wie wird ein benutzerdefinierter Listener über die ESC-Taste anstelle des Standard-Shell-Listeners aufgerufen?

Wenn eine ESC-Taste gedrückt wird, während die QuickInfo geöffnet ist, wird die Methode shell.close() aufgerufen. Selbst wenn ich der Tooltip-Shell einen Key-Listener hinzugefügt habe, wird shell.close() selbst aufgerufen.

-Code für Hörer unter:

@Override 
    protected Composite createViewerToolTipContentArea(Event event, ViewerCell cell, final Composite shell) { 

     Display.getDefault().getActiveShell().addListener(SWT.KeyDown, new Listener() { 
      @Override 
      public void handleEvent(final Event event) { 
       if (event.type == SWT.KeyDown) { 
        System.out.println("key pressed ..........close shell"); 
       } 
      } 
     }); 
} 

Gibt es hier irgendwelche Fehler ??

+0

Wenn Sie nur auf ein Ereignis hören, ändert sich nicht, was andere Zuhörer tun. –

+0

Was kann ich hier tun, um meinen Hörer statt Shell Listener aufzurufen? –

+0

Sie könnten versuchen, 'getListeners (SWT.KeyDown)' aufzurufen und dann die Listener zu entfernen. –

Antwort

0

Sie konnten dieses versuchen:

event.doit = false; 

, die den Trick tun sollten.

0

Wenn Sie die ToolTip Klasse (es ist die Basisklasse von ColumnViewerToolTipSupport) überprüfen, können Sie sehen, dass es keine Option gibt, um die Behandlung von Ereignissen zu ändern. Es verwendet eine private Listener-Implementierung, die Keydown (auch nicht nur für ESC) und andere Ereignisse überwacht.

Die einzige von ihnen bereitgestellte API ist afterHideToolTip (Event-Ereignis), wo Sie nach der ESC-Taste des Ereignisses suchen können. Aber du kannst nur zusätzliche Sachen machen. Es gibt keinen beforeHideToolTip zur Entscheidung, was Sie mit dem Tooltip-Event machen möchten.

Zu Ihrer Frage, warum das Hinzufügen eines Listeners nicht hilft: Sie werden nur hinzugefügt. Die anderen Listener werden ebenfalls ausgeführt.

Verwandte Themen