[SWT] eigenen Button erstellen

Biff1109

Grünschnabel
Hi,

bin relativ neu im Umgang mit SWT.

Ich möchte einen Button erstellen, dessen Aussehen ich selbst programmieren möchte, er aber alle Funktionen bieten soll, die eben ein Button besitzt.
Mit Swing ging das ganz einfach mit "MyButton extends JButton".

Aber wie ich gelesen habe kann man bei SWT nur von Canvas und Widget ableiten!
Wieso das denn?

Gibt es eine Möglichkeit das einfach zu realisieren oder muss ich von Widget ableiten und alle Button-Funktionen nach programmieren?

[Edit] Ist das vielleicht mit einem PaintListener möglich?
Code:
     myButton.addPaintListener(new PaintListener() {
          public void paintControl(PaintEvent event) {
		// paint something;
	  }
     });
[/Edit]

Vielen Dank
Biff

P.S. wäre cool, wenn mir jemand ein Beispiel posten könnte, in dem von einem Widget abgeleitet wird :)
 
Zuletzt bearbeitet:
In SWT soll man das eigentlich über Wrapper/Delegates regeln.

Das hat allerdings einige Nachteile da Mann eben nicht von Button erbt. SWT empfiehlt es die Widgets nicht zu erweitern weil die API nicht so ganz stabil ist. Wenn du jedoch nichts besonderes machst und insbesondere nur Funktionalität hinzufügst und sich nicht veränderst kannst du auch Button erweitern.

Dazu musst du die Methode checkSubclass überschreiben sonst meldet SWT einen Fehler.
 
Danke für deine Antwort zeja.

Könntest du mir vielleicht ein kleines Beispiel geben, wie ich die Methode checkSubclass überschreiben soll.

Möchte eigentlich nur einen Button, dessen Hintergrund ich durch Objektmethoden verändern kann.

Also z.B. myButton.setActive() -> grüner Hintergrund (möglichst mit Gradient)
myButton.setInActive() -> blauer Hintergrund

Gruß
Biff
 
Ich bin mir nicht sicher ob SWT schon das richtige für dich ist wenn du nicht mal weisst was es bedeutet eine Methode zu überschreiben:

Wenn du unter eclipse arbeitest wählst du einfach im Menü "Source"->"Override/Implement Methods" und wählst dann die Methode aus.

Das sieht dann so aus:
Java:
@Override
protected void checkSubclass(){}
 
Wie man eine Methode überschreibt ist mir schon klar, dachte nur, dass ich da was besonderes rein schreiben müsste.

Ist jetzt aber auch egal, da ich mir einen eigenen Button programmiert habe (von Canvas abgeleitet und alle Methoden und Listener selbst hinzugefügt).

Siehe Bild :)

Vielen Dank nochmal @zeja
 

Anhänge

  • tutorials.png
    tutorials.png
    1,1 KB · Aufrufe: 471

Neue Beiträge

Zurück