swt, shell aktualisieren

smith99

Grünschnabel
Hallo,

ich bräuchte mal wieder euere Hilfe.

Denn ich habe ein Shell in SWT, in der ein Canvas mit einer Zeichnung eingebunden ist. Das habe ich auch nach mehreren Versuchen so hinbekommen, wie ich es haben wollte. Jetzt habe ich aber das Problem, das ich diese Zeichnung nach einem Doppelklick mit der Maus auf das Bild etwas hinzu fügen möchte.
Um das zu machen, aktualisiere ich im MouseListener ein Array, das dafür verantwortlich ist, was im Canvas eingeblendet wird.
Nur weiß ich nicht, wie ich die Shell dazu bringe sich neu zuzeichen, wie das repaint bei awt oder swing...

Ich bin für jede Hilfe sehr dankbar.
 
Hallo!

Suchst du vielleicht den paintListener und redraw() ?

Code:
package de.tutorials;

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.MouseMoveListener;
import org.eclipse.swt.events.PaintEvent;
import org.eclipse.swt.events.PaintListener;
import org.eclipse.swt.widgets.Canvas;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

public class SWTPainter {

	private int x, y, w = 320, h = 240;

	public static void main(String[] args) {
		new SWTPainter().run();
	}

	private void run() {
		Display display = new Display();
		Shell shell = new Shell(display);
		shell.setText("SWTPainter");

		final Canvas canvas = new Canvas(shell, SWT.NONE);
		canvas.setSize(w, h);

		canvas.addPaintListener(new PaintListener() {
			public void paintControl(PaintEvent e) {
				e.gc.drawLine(0, 0, x, y);
				e.gc.drawLine(320, 240, x, y);
				e.gc.drawLine(0, 240, x, y);
				e.gc.drawLine(320, 0, x, y);
			}
		});

		canvas.addMouseMoveListener(new MouseMoveListener() {
			public void mouseMove(MouseEvent e) {
				x = e.x;
				y = e.y;
				canvas.redraw();
			}
		});

		shell.pack();
		shell.open();

		while (!shell.isDisposed()) {
			if (!display.readAndDispatch()) {
				display.sleep();
			}
		}
	}
}

Gruß Tom
 

Neue Beiträge

Zurück