Dies ist eine alte Version des Dokuments!
CCombo, Focus-Problem
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 Fehlferhalten: 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){ } });