swt

tanzverfuehrung

Bekanntes Mitglied
also ich versuche mir grad nach und nach ein funktionsplotter auszubauen in SWT, doch ich scheiter leider schon am Koordinatensystem;(;(;(;(

also die Koordinatenkreuz ist schon sichtbar und auch die einteilung....aber wie bekommen ich die Achsen beschriftet????

bzw. gibt es ein raster schon vorgebaut oder ein koordinatensystem?

Java:
import java.awt.geom.GeneralPath;

import org.eclipse.swt.events.PaintEvent;
import org.eclipse.swt.events.PaintListener;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

public class PlotterGUI {

	private Display display = new Display();
	private Shell shell = new Shell(display);
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private static int g = 10;
	private int x = 500;
	private int xHalf = x / 2;
	private int y = 500;
	private int yHalf = y / 2;
	private GeneralPath path;

	// Raster raster = new Raster(5,10,0);
	public void guiErstellt() {
		shell.setText("Funktions Plotter");
		shell.setSize(500, 500);
		shell.setLayout(new GridLayout(500, true));

		drawCross();
		drawScala();

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

	/** Zeichnet das Koordinatenkreuz */
	private void drawCross() {
		shell.addPaintListener(new PaintListener() {
			public void paintControl(PaintEvent event) {
				event.gc.drawLine(0, yHalf, x, yHalf);
				event.gc.drawLine(xHalf, 0, xHalf, y);
			}
		});
	}

	/**
	 * Zeichnet die Scala des Koordinatenkreuz
	 * 
	 * @param g
	 */
	private void drawScala() {
		shell.addPaintListener(new PaintListener() {
			public void paintControl(PaintEvent event) {
				int i = 25;

				while (i < x) {
					event.gc.drawLine(i, yHalf - 10, i, yHalf + 10);
					i = i + 25;
					event.gc.drawLine(xHalf - 10, i, yHalf + 10, i);
				}
			}
		});
}

	public static void main(String[] args) {
		new PlotterGUI().guiErstellt();
	}
}


und ich hab einiges bei swt mit Canvas und label gesehen.wann benutzt man was?und wäre es sinnvoll eins zu verwenden?
 

tanzverfuehrung

Bekanntes Mitglied
Ich habe jetzt ein canvas angelegt und mein koordinatenkreuz darauf geseichnet!
Ich würde trotzdem gern wissen, was der Unterschied zwischen Canvas und Labels sind!!!???:L

Ich habe auch mein Koordinatenkreuz hinbekommen mit den intervalle

Java:
package nachhilfe;

import java.awt.geom.GeneralPath;
import java.lang.reflect.Array;

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.PaintEvent;
import org.eclipse.swt.events.PaintListener;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Canvas;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

public class PlotterGUI {

	// public PlotterGUI( Composite parent, int style) {
	// super(parent, style);
	//
	// }

	private Display display = new Display();
	private Shell shell = new Shell(display);
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private static int g = 10;
	private int x = 500;
	private int xHalf = x / 2;
	private int y = 500;
	private int yHalf = y / 2;
	private Canvas canvas;
	private GeneralPath path = new GeneralPath();

	public void guiErstellt() {
		shell.setText("Funktions Plotter");
		shell.setSize(800, 500);
		shell.setLayout(new GridLayout(500, true));
		// Canvas erzeugen und auf shell setzten
		canvas = new Canvas(shell, SWT.BORDER);
		// Weisse Systemfarbe holden
		Color white = canvas.getDisplay().getSystemColor(SWT.COLOR_WHITE);
		canvas.setBackground(white);

		// PaintListener zufügen
		canvas.addPaintListener(new PaintListener() {
			public void paintControl(PaintEvent e) {
				// WICHTIG!!!!-->Display aus Ereignis holen
				display = e.display;
				canvas.setSize(500, 500);

			}
		});
		drawCross();
		drawScala();

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

	/** Zeichnet das Koordinatenkreuz */
	private void drawCross() {
		canvas.addPaintListener(new PaintListener() {
			public void paintControl(PaintEvent event) {
				event.gc.drawLine(0, yHalf, x, yHalf);
				event.gc.drawLine(xHalf, 0, xHalf, y);
			}
		});
	}

	/**
	 * Zeichnet die Scala des Koordinatenkreuz
	 * 
	 * @param g
	 */
	private void drawScala() {
		canvas.addPaintListener(new PaintListener() {
			private String[] count = {"","-9","-8","-7","-6","-5","-4","-3","-2","-1","","1","2","3","4","5","6","7","8","9"};

			public void paintControl(PaintEvent event) {
				int i = 25;

				while (i < x) {
					event.gc.drawLine(i, yHalf - 5, i, yHalf + 5);
					i = i + 25;
					event.gc.drawLine(xHalf - 5, i, yHalf + 5, i);
				}
				for (int j = 0; j < count.length; j++) {
					int h =j*25;
					event.gc.drawString(count[j], h, yHalf+5);
					event.gc.drawString(count[j], xHalf+5, h);
				}
				
			}
		});
	}



:bahnhof::bahnhof:Mich würde es interessieren, ob ich jetzt eventuell die Mitte neu setzten kann, also das 0/0 nicht mehr links oben in der ecke ist sonder wir es auf unserem Koordinatenursprung legen sozusagen!Damit ich später meine Fuktionen leichter einzeichnen kann!
 

tanzverfuehrung

Bekanntes Mitglied
1. Label ist ein Widget zur Anzeige von Text und Images
2. Canvas ist ein Widget auf dem direkt gezeichnet werden kann, also praktisch ein Malbrett.
3. Würde ich in dem Fall über Draw2D bzw. Gef nachdenken (http://www.java-forum.org/awt-swing-swt/106009-draw2d-gef-koordinatensystem-gitternetz.html)


erstmal dickes DANKE!!!
habe nun mein ausbilder gefragt, ob ich draw2d nutzen soll, da meinte er aber, es bring mich nicht wieter, wird ehr schwerer...aber trotzdem danke für den tipp!

so mein koordinaten kreuz mit Beschriftung und scalierung sieht super aus...jetzt muss ich nur guchen wie ich meine Pixel neu setzten kann!!!
Kann mir da jemand ein tipp geben?
???:L
 

tanzverfuehrung

Bekanntes Mitglied
Was meinst du mit Pixel neu setzen?

ich habe ja eine CAnvas....was sagen wir mal 500x500 pixel ist.also ist ja der Koordinatenursprung bei 250*250 Pixel und links in der ecke ist ja dann 0x0 Pixel!

MEine frage ist , ob ich es so setzten kann ,dann 0x0 auf 250x250 ist!
und das die linke ecke(jetzt 0x0) dann -250x-250 ist!
Das ich dann meine Funktionen leichter ein zeichnen könnte.

Das wäre zu schön...aber mein Ausbilder hat mir schon gesagt, das sowas nicht geht,sondern ich dann die x und y koordinaten jedes mal in der methode umrechnen muss, in Pixel!:toll:
 

Neue Themen


Oben