SWT - EventHandling

Status
Nicht offen für weitere Antworten.

paedubucher

Aktives Mitglied
Hallo allerseits

Im Rahmen eines Schulprojekts bin ich derzeit gerade am Erlernen der SWT-Grundlagen. In meinem Buch "Eclipse" vom O'Reilly Verlag sind dem SWT einige Kapitel gewidmet. Nun bin ich beim Event-Handling gelandet und habe aus dem Buch folgendes Konstrukt:

Code:
    button.addSelectionListener(new SelectionListener()
    {
      public void widgetSelected(SelectionEvent event)
      {
        text.setText("Button gedrückt");
        text.pack();
      }
      public void widgetDefaultSelected(SelectionEvent event)
      {
        text.setText("Button gedrückt");
        text.pack();
      }
    });

Das ganze steht in der Main-Methode, die notwendigen Objekte werden natürlich schon vorher instanziert - es geht hier rein um das Event-Handling.

Nun gefällt mir das ganze nicht so, da ich quasi in der Parameterliste der addSelectionListener-Methode neue Methoden deklarieren. Das sieht meiner Meinung nach recht hässlich aus.

Gibt es dafür nicht eine "schönere" Möglichkeit? In Swing gibt es dazu eine Methode "actionPerformed", welche die Events an die entsprechenden Methoden weiterleitet. Die SWT-Variante finde ich irgendwie etwas komisch...

Gibt es in SWT nicht auch irgend sowas wie in Swing?
 
R

Roar

Gast
hä? das prinzip ist genau das gleiche in swt und in swing. das hat nix mit swt oder swing zu tun, das ist java ;) . du kannst in swing genausogut schreiben addActionListener(new ActionListener() { bla }); die methoden erwarten irgendeinen interface tyo. ob du den nun als anonyme oder normale klasse implementierst ist sowohl swing als auch swt egal ;)
 

paedubucher

Aktives Mitglied
Achso, ich habe im Eifer des Gefechts völlig vergessen, dass meine Klasse ein bestimmtes Interface implementieren muss... so sieht nun meine Klasse aus:

Code:
package main;

import org.eclipse.swt.widgets.*;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.*;

public class SimpleGui implements SelectionListener
{
  private Display display = null;
  private Shell shell = null;
  private Button button = null;
  private Text text = null;
  
  public SimpleGui()
  {
    display = new Display();
    shell = new Shell(display);
    shell.setSize(200, 100);
    shell.setText("SWT-Example");
    shell.setLayout(new RowLayout());

    button = new Button(shell, SWT.PUSH);
    button.setText("Klick mich!");
    button.addSelectionListener(this);
    
    text = new Text(shell, SWT.SHADOW_IN);   
    
    shell.open();
    while(!shell.isDisposed())
    {
      if(!display.readAndDispatch())
        display.sleep();
    }
    display.dispose();
  }
  
  public void widgetSelected(SelectionEvent se)
  {
    if(se.getSource() == button)
    {
      text.setText("klick!");
      text.pack();
    }
    
  }
  public void widgetDefaultSelected(SelectionEvent se)
  {
    if(se.getSource() == button)
    {
      text.setText("klick!");
      text.pack();
    }
  }
}

... und funktioniert ;-)

Diese Methode gefällt mir doch schon einiges besser...

Danke für den Input!

Welche Variante verwendest du denn, Roar?
 
R

Roar

Gast
alle verschiedenen möglichkeiten, wo sie mir jeweils am besten passen :bae:
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen


Oben