SWT.Text mit Background Text. Gibt es sowa?

SNOWMAN-X

Mitglied
Hallo,

also ich bin gerade auf der Suche nach einer einfachen, schnellen Möglichkeit ein einfaches Textfeld mit einem Background-Text zu versehen.
Also etwa sowas: http://img528.imageshack.us/img528/8664/bsprj7.jpg

"Blahblah" ist der Backgroundtext, der ist wie ein Backgroundimage (nicht selektierbar, wird von Eingaben einfach überblendet)
"10" ist der vom User eingegebene Wert.

Gibt es bereits ein Widget, dass sowas unterstützt, oder muss ich mir das selber basteln?

Falls ich das selber machen muss, dann ist das doch nichts weiter als ein Textfeld auf dem ein Label liegt, oder?


[UPDATE]

Also, "kleines Update":
Das mit dem Label "über" dem Text ist Mist, genau wegen dem "über".
Ist der Text im Textfeld zu lang, so liegt er unter dem Label und wird somit nicht mehr sichtbar (label mit bg white) oder die buchstaben vermischen sich (label mit transparency).

Also, was geht noch hab ich mich gefragt:
Ein GC.drawString mit dem Textfeld. Nur zu Blöd, dass das Textfeld scheinbar nicht drawable ist, zumindest wird nichts angezeigt, egal ob String, Line, oder Image.
Komischerweiße bleibt eine einfache Canvas Box ebenfalls leer. Also irgendwie komisch...

Und da ich dieses erweiterte Textfeld nicht jedesmal neu aufbauen will, wollt ich das in eine Klasse (extends Text) packen.
Geht nicht, ich darf keine Subklassen erstellen...

Naja, irgendwie alles nicht so einfach wie ich mir das erhofft hatte.
 
Zuletzt bearbeitet:
Man soll nach Möglichkeit in SWT nichts extenden weil es normalerweise auch nicht nötig ist. Denn im Gegensatz zu Swing übergibst du ja den Parent dem Child und setzt nicht das Child auf den Parent.

Jedoch verbietet SWT das überschreiben einer Klasse nicht explizit dadurch dass diese final ist sondern über eine Methode die das Subclassing prüft. Diese kannst du überschreiben:
Java:
protected void checkSubclass() {
	}

und schon gehts.
 
Hallo,

so, ich glaub ich habs geschafft.

Ich hab nun eine Klasse die SWT.Text um die Funktion SetBackgroundText(String) erweitert.
Hier mal der Code:
Code:
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.*;
import org.eclipse.swt.widgets.*;


public class LabelText extends Text{
	
	public LabelText(Composite parent, int style){
		super(parent, style | SWT.RIGHT);
	}
	
	protected void checkSubclass() {}  
	
	public void setBackgroundText(String text){
	    Image image = new Image(this.getDisplay(), 1000, 1000);
	    GC gc = new GC(image);
	    gc.setBackground(this.getDisplay().getSystemColor(SWT.COLOR_WHITE));
	    gc.setForeground(this.getDisplay().getSystemColor(SWT.COLOR_DARK_GRAY));
	    gc.setFont(new Font(this.getDisplay(), "Verdana", 10, SWT.NONE));
	    gc.drawString(text, 2, 0);
	    gc.dispose();
	    super.setBackgroundImage(image);
	}
}

Das einzigste, was mir zu denken gibt, ist das erzeugen des Bildes:
Image image = new Image(this.getDisplay(), 1000, 1000);
Ich muss das Bild mit einer Größe von 1000 mal 1000 erzeugen, da es ja nicht nur einmal angezeigt wird, sondern so oft, bis halt alles damit ausgefüllt ist.
Ich kann auch die Größe des Textelementes nicht abfragen, da ja die Zuweißung des Textes vor dem setSize() stattfinden kann.

Gibts da ne Kataloglösung?

Alternativ wollte ich im setBackgroundText eigentlich nur einen String füllen und über einen Listener das Event beim erzeugen des Widgets abfangen und dann das Bild erzeugen und einfügen. Nur ich konnte keinen passenden Listener mit Event finden...
 
Hallo,

ich hab das mal getestet.
Das resize event wird ausgeführt, wenn ich setSize() aufrufe.
Naja, passiert das vor dem setzen des Textes, so wir einfach ein leeres Bild erzeugt und als Hintergrund gesetzt.

Naja, nicht soo schlimm, ich komm auch mit dem 1000x1000 gut hin.

Danke für die Hilfe!
 
Zurück