Dienstag, 1. Dezember 2009

SWT bei Enter den Focus auf nächstes Control setzen

Will man durch betätigen der Enter-Taste den Focus auf das nächste Control setzen, so kann man dies über die Methode traverse im Control erreichen.
Beispiel:
Text articleNumberText.addKeyListener(new KeyAdapter() {
 @Override
 public void keyReleased(KeyEvent e) {
  if(e.keyCode == SWT.CR || e.keyCode == SWT.KEYPAD_CR){
   ((Control) e.widget).traverse(SWT.TRAVERSE_TAB_NEXT);
  }
 }
});

Enter Listener JFace Dialog

Wenn man in einem JFace Dialog die Enter-Taste anders belegen möchte, so muss man dafür sorgen, dass durch die Enter-Taste  nicht das okPressed ausgelöst wird.

Dies kann man damit erreichen, indem man die Methode protected Button createButton(Composite parent, int id, String label, boolean defaultButton) wie folgt überschreibt.


@Override
 protected Button createButton(Composite parent, int id, String label,
   boolean defaultButton) {
  return super.createButton(parent, id, label, false);
 }

Dadurch erreicht man, dass der automatisch erzeugt OK-Button nicht als DefaultButton in der ParentShell registriert wird und somit nicht bei Betätigung der Enter-Taste ausgelöst wird.

Eine weitere Möglichkeit ist noch einfach seine Button selbst zu erzeugen.
 @Override
 protected void createButtonsForButtonBar(Composite parent) {
  btnArtikelbernehmen = createButton(parent, IDialogConstants.OK_ID,
    IDialogConstants.OK_LABEL, false);
  createButton(parent, IDialogConstants.CANCEL_ID,
    IDialogConstants.CANCEL_LABEL, false);
 }