Teraz to co innego - nie dziwota, że każe ci robić static. Złe jest to, że cały kod trzymasz w mainie, kiedy powinieneś to wydzielić do osobnej niestatycznej metody nowego obiektu. W dodatku i tak tworzysz obiekt asd, żeby móc stworzyć obiekt listenera (!).
public class MojaAplikacja {
public void run() {
Display display = new Display();
Shell shell = new MójShell(display);
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
display.dispose();
}
public static void main(String[] args) {
new MojaAplikacja().run();
}
}
public class MójShell extends Shell {
private class MySelectionAdapter extends SelectionAdapter {
public void widgetSelected(SelectionEvent e) {
System.out.println("konan");
shell.setText("barbarzynca");
}
}
public MójShell(Display display) {
super(display);
stwórzUI();
}
protected void stwórzUI() {
setText("Hello world!");
Point p = new Point(640,480);
setSize(p);
setLayout(null);
Button b = new Button(shell, SWT.PUSH);
b.setText("Zwykły przycisk");
b.setSize(new Point(100,50));
b.addSelectionListener(new MySelectionAdapter());
}
}
Zero staticów, tym samym MySelectionAdapter może być anonimowy. Kod głównie przepisany, to wciąż nie jest w żadnym wypadku w pełni poprawny kod z punktu widzenia dobrej aplikacji. Dla lepszego ogarnięcia SWT polecam zobaczyć JFace.