20.08.2012 Aufrufe

8 Das SWT

8 Das SWT

8 Das SWT

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

8.8 Ein Widget mit Swing<br />

gen, so dass auch nach Öffnen der Shell der Canvas für Mausklicks<br />

zugänglich bleibt.<br />

Die Technik, diese Shell mit setVisible() abwechselnd sichtbar<br />

und unsichtbar zu schalten, ist einem wechselweisen Neuanlegen und<br />

Schließen vorzuziehen. Nicht nur werden damit Ressourcen geschont,<br />

auch werden damit unschöne Effekte vermieden. Nach einem close()<br />

würden Teile der close()-Ereignisverarbeitung erst nach Ablauf der<br />

AWT-Ereignisverarbeitung (also auch nach canvasComp.redraw()) ausgeführt,<br />

so dass an der Position des Editors ein hässlicher weißer Fleck<br />

zurückbleiben würde. <strong>Das</strong> ist bei Verwendung der Methode set-<br />

Visible(false) nicht der Fall.<br />

// Mausklicks auf dem Canvas verarbeiten<br />

canvas<br />

.addMouseListener(new java.awt.event.MouseListener() {<br />

public void mouseClicked(<br />

java.awt.event.MouseEvent e) {}<br />

public void mouseEntered(<br />

java.awt.event.MouseEvent e) {}<br />

public void mouseExited(<br />

java.awt.event.MouseEvent e) {}<br />

public void mousePressed(<br />

java.awt.event.MouseEvent e) {<br />

// Popup-Editor verwalten<br />

display.syncExec(new Runnable() {<br />

public void run() {<br />

if (eShell == null) {<br />

// Neue Shell anlegen: nicht-modal!<br />

eShell = new Shell(shell, <strong>SWT</strong>.NO_TRIM<br />

| <strong>SWT</strong>.MODELESS);<br />

eShell.setLayout(new FillLayout());<br />

// Texteingabefeld<br />

eText = new Text(eShell, <strong>SWT</strong>.BORDER);<br />

eText.setText("Textrotation im <strong>SWT</strong>?");<br />

eShell.pack();<br />

// Positionieren (Displaykoordinaten)<br />

java.awt.Rectangle bounds = canvas<br />

.getBounds();<br />

org.eclipse.swt.graphics.Point pos = canvasComp<br />

.toDisplay(bounds.width / 2,<br />

bounds.height / 2);<br />

Point size = eShell.getSize();<br />

eShell.setBounds(pos.x, pos.y, size.x,<br />

207

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!