Differenze tra le versioni di "Programmazione:Java/Eclipse RCP/Event Interface implementation"
Da WikiSitech.
Vai alla navigazioneVai alla ricerca| Riga 1: | Riga 1: | ||
| + | [[Programmazione:Java/Eclipse_RCP|<< Back to Eclipse RCP]]  | ||
| + | |||
=How to implement Event Interface=  | =How to implement Event Interface=  | ||
Versione attuale delle 09:28, 14 apr 2008
Indice
How to implement Event Interface
This article use org.eclipse.swt.widgets.Listener interface as example....but it's valid for all interface
Bad Practice
public class TestEventImpl {
  Shell shell;
  Button bt;
  public void create() {
     shell = new Shell(PlatformUI.getWorkbench().getDisplay());
     
     Composite c = new Composite(shell, SWT.BORDER);
     bt = new Button(c, SWT.PUSH);
     bt.setText("Push ME");
     bt.addListener(SWT.Selection, new Listener() {
        public void handleEvent(Event event) {
           // Do something
        }
     });
     shell.addListener(SWT.Dispose, new Listener() {
        public void handleEvent(Event event) {
           // I can't remove listener...I don't have reference....
        }
     });
     shell.open();
  }
}
Not Bad Practice but...
public class TestEventImpl {
  Listener bt_listener, shell_listener;
  Shell shell;
  Button bt;
  public void create() {
     shell = new Shell(PlatformUI.getWorkbench().getDisplay());
     
     Composite c = new Composite(shell, SWT.BORDER);
     bt = new Button(c, SWT.PUSH);
     bt.setText("Push ME");
     bt_listener = new Listener() {
        public void handleEvent(Event event) {
           // Do something
        }
     }
     bt.addListener(SWT.Selection, bt_listener);
     shell_listener = new Listener() {
        public void handleEvent(Event event) {
           TestEventImpl parent = (TestEventImpl)event.widget.getData("ClassParent");
           parent.bt.removeListener(bt_listener);
           parent.shell.removeListener(shell_listener);
        }
     }
     shell.addListener(SWT.Dispose, shell_listener);
     shell.setData("ClassParent", this); // must save a class reference
     shell.open();
  }
}
Best Practice
public class TestEventImpl implements Listener {
  Shell shell;
  Button bt;
  public void create() {
     shell = new Shell(PlatformUI.getWorkbench().getDisplay());
     Composite c = new Composite(shell, SWT.BORDER);
     bt = new Button(c, SWT.PUSH);
     bt.setText("Push ME");
     bt.addListener(SWT.Selection, this);
     shell.addListener(SWT.Dispose, this);
     shell.open();
  }
  public void handleEvent(Event event) {
     switch(event.type) {
        case SWT.Selection: 
           if(event.widget == bt) {
              // Do something
           }
        break;
        case SWT.Dispose: 
           if(event.widget == shell) {
              bt.removeListener(this);
              shell.removeListener(this);
           }
        break;
     }
  }
}