Java - SWT/JFace

CCombo, Focus-Problem, Eclipse 3.3

Wenn einer CCombo ein KeyListener angehängt wird, funktioniert die Focus-Weiterleitung mit den Tasten Tab und Shift-Tabe nicht mehr. Folgende Lösung beseitigt das Problem zumindest unter Windows weitgehend (eine Anpassung für andere Systeme sollte möglich sein; lediglich Shift-Tab funktioniert nicht perfekt):


   CCombo myCCombo = new CCombo(composite, SWT.BORDER);
 
 
   // Keine Funktionalität, verursacht aber das Fehlverhalten:
   myCCombo.addKeyListener(new KeyListener() {
 
      public void keyPressed(KeyEvent e){
      }
 
      public void keyReleased(KeyEvent e){
      }
 
   }); 
 
 
   myCCombo.addTraverseListener(new TraverseListener() {
 
      // Ohne diesen Listener ist es nicht möglich das Control mit Shift-Tab zu verlassen
     public void keyTraversed(TraverseEvent e) {
        if (e.detail == SWT.TRAVERSE_TAB_PREVIOUS){
           myCCombo.getShell().setFocus();
        }
   }});
 
 
   myCCombo.addFocusListener(new FocusListener(){
 
      public void focusGained(FocusEvent e){
         if (e.display.msg.message != org.eclipse.swt.internal.win32.OS.WM_LBUTTONDOWN){
         // if (e.display.msg.message == org.eclipse.swt.internal.win32.OS.WM_KEYDOWN) { // Alternative, ginge auch
            // Focus gained via Tab
            myCCombo.getShell().setFocus();
            myCCombo.setFocus();
         }
      }
 
      public void focusLost(FocusEvent e){
      }
 
   });

Eigene Werkzeuge
Werkzeuge

gratis Counter by GOWEB
seit 9.10.2007