canvas.draw zeichne ohne ausfüllen

Status
Nicht offen für weitere Antworten.
C

Cerveza1234

Gast
Hi,

hab das untenstehende programm geschrieben und wollte mal fragen ob es auch eine möglichkeit gibt die kreise und quadrate dich ich zeichnen lasse nicht mit farbe auszufüllen.


Code:
import java.awt.Rectangle;
import java.awt.geom.Ellipse2D;

class Kreis {
	int radius;
	int x;
	int y;

	Kreis() {
		radius = 10;
		x = 0;
		y = 0;
		zeichne();
	}

	void verschiebeHorizontal(int eingabe) {
		x += eingabe;
		zeichne();
	}

	void verschiebeVertikal(int eingabe) {
		y += eingabe;
		zeichne();
	}

	void vergroessere(int newRadius) {
		radius = newRadius;
		zeichne();
	}

	int getX() {
		return x;
	}

	int getY() {
		return y;
	}

	void zeichne() {
		Canvas canvas = Canvas.getCanvas();
		canvas.draw(this, "red", new Ellipse2D.Double(x, y, radius, radius));
		canvas.wait(1000);
	}

}

class Quadrat {
	int seite;
	int x;
	int y;

	Quadrat() {
		seite = 50;
		x = 0;
		y = 0;
		zeichne();
	}

	void verschiebeNach(Kreis kreis) {
		x = kreis.x;
		y = kreis.y;
		zeichne();
	}

	void verschiebeHorizontal(int eingabe) {
		x += eingabe;
		zeichne();
	}

	void verschiebeVertikal(int eingabe) {
		y += eingabe;
		zeichne();
	}

	void vergroessere(int einheiten) {
		seite += einheiten;
		zeichne();
	}

	void zeichne() {
		Canvas canvas = Canvas.getCanvas();
		canvas.draw(this, "black", new Rectangle(x, y, seite, seite));
		canvas.wait(1000);
	}
}

public class KreiseTest {

	public static void main(String[] args) {

		Kreis k1 = new Kreis();
		k1.vergroessere(20);
		k1.verschiebeHorizontal(20);
		k1.verschiebeVertikal(50);

		Quadrat q1 = new Quadrat();
		q1.verschiebeHorizontal(30);
		q1.verschiebeVertikal(30);
		q1.vergroessere(-40);

		Kreis k2 = new Kreis();
		k2.vergroessere(40);
		k2.verschiebeHorizontal(70);
		k2.verschiebeVertikal(40);

		Quadrat q2 = new Quadrat();
		q2.verschiebeNach(k2);
		q2.verschiebeVertikal(10);
		q2.vergroessere(-30);
	}

}
 
C

Cerveza1234

Gast
Also bei mir klappt es... getCanvas() sieht so aus:


Code:
	class Canvas {

	static Canvas canvasSingleton;

	static {
		canvasSingleton = new Canvas("Shapes", 500, 500, Color.white);
		canvasSingleton.setVisible(true);
	}
	static Canvas getCanvas() {
		return canvasSingleton;
	}
.
.
.
.
 

L-ectron-X

Gesperrter Benutzer
Du solltest in jedem Fall vermeiden, eigenen Klassen einen Namen zu geben, die in Sun's SDKs verwendet werden.
Auch wenn ohne große Probleme durch Packages möglich ist, kann es doch (wie man hier jetzt eben gesehen hat) zu Problemen oder Verwechslungen kommen, die die Fehlersuche unnötig erschweren.

Benenne mal dein Canvas um, bspw. in MyCanvas und lass mal MyCanvas von java.awt.Canvas erben.
 
S

SlaterB

Gast
Canvas hat auch keine draw-Operation,
woher soll man also wissen, wie du überhaupt die Figuren zeichest?
 
C

Cerveza1234

Gast
ehrlich gesagt ist mir das erst aufgefallen nachdem du das geschrieben hast. Versuche halt gerade in die Welt des oo-programmierens einzutauchen und bin noch so ziemlich am anfang und hatte mir ein Bsp.-Code in mein Projekt gepackt wo die klasse canvas drin vorkam....

aber wenn wir jetzt mal von der standart klasse ausgehen ist es möglich die geometrischen figuren die man zeichnet auch unausgefüllt zu zeichnen? Ich möchte halt einen normalen Kreis haben o und keinen ausgefüllten[/img]
 
S

SlaterB

Gast
selbstverständlich ist alles denkbar,
siehe API, Lehrbuch!

http://java.sun.com/javase/6/docs/api/java/awt/Graphics.html
Code:
abstract  void drawArc(int x, int y, int width, int height, int startAngle, int arcAngle)
          Draws the outline of a circular or elliptical arc covering the specified rectangle. 
          
abstract  void fillArc(int x, int y, int width, int height, int startAngle, int arcAngle)
          Fills a circular or elliptical arc covering the specified rectangle. 
          
          
abstract  void fillPolygon(int[] xPoints, int[] yPoints, int nPoints)
          Fills a closed polygon defined by arrays of x and y coordinates. 
 void fillPolygon(Polygon p) 
          Fills the polygon defined by the specified Polygon object with the graphics context's current color. 

abstract  void drawPolygon(int[] xPoints, int[] yPoints, int nPoints)
          Draws a closed polygon defined by arrays of x and y coordinates. 
 void drawPolygon(Polygon p) 
          Draws the outline of a polygon defined by the specified Polygon object. 
abstract  void drawPolyline(int[] xPoints, int[] yPoints, int nPoints) 
          Draws a sequence of connected lines defined by arrays of x and y coordinates.
 
C

Cerveza1234

Gast
hmm ok wenns auch keine Draw funktion hat ist das schonmal schlecht also meineCanvas sieht so aus:



Code:
class Canvas {

	static Canvas canvasSingleton;

	static {
		canvasSingleton = new Canvas("Shapes", 500, 500, Color.white);
		canvasSingleton.setVisible(true);
	}

	static Canvas getCanvas() {
		return canvasSingleton;
	}

	// ----- instance part -----

	JFrame frame;

	CanvasPane canvas;

	Graphics2D graphic;

	Color backgroundColour;

	Image canvasImage;

	List objects;

	HashMap shapes;

	Canvas(String title, int width, int height, Color bgColour) {
		frame = new JFrame();
		canvas = new CanvasPane();
		frame.setContentPane(canvas);
		frame.setTitle(title);
		canvas.setPreferredSize(new Dimension(width, height));
		backgroundColour = bgColour;
		frame.pack();
		objects = new ArrayList();
		shapes = new HashMap();
	}

	void setVisible(boolean visible) {
		if (graphic == null) {
			// first time: instantiate the offscreen image and fill it with
			// the background colour
			Dimension size = canvas.getSize();
			canvasImage = canvas.createImage(size.width, size.height);
			graphic = (Graphics2D) canvasImage.getGraphics();
			graphic.setColor(backgroundColour);
			graphic.fillRect(0, 0, size.width, size.height);
			graphic.setColor(Color.black);
		}
		frame.setVisible(visible);
	}

	void draw(Object referenceObject, String color, Shape shape) {
		objects.remove(referenceObject); // just in case it was already there
		objects.add(referenceObject); // add at the end
		shapes.put(referenceObject, new ShapeDescription(shape, color));
		redraw();
	}

	void erase(Object referenceObject) {
		objects.remove(referenceObject); // just in case it was already there
		shapes.remove(referenceObject);
		redraw();
	}

	void setForegroundColor(String colorString) {
		if (colorString.equals("red"))
			graphic.setColor(Color.red);
		else if (colorString.equals("black"))
			graphic.setColor(Color.black);
		else if (colorString.equals("blue"))
			graphic.setColor(Color.blue);
		else if (colorString.equals("yellow"))
			graphic.setColor(Color.yellow);
		else if (colorString.equals("green"))
			graphic.setColor(Color.green);
		else if (colorString.equals("magenta"))
			graphic.setColor(Color.magenta);
		else if (colorString.equals("white"))
			graphic.setColor(Color.white);
		else
			graphic.setColor(Color.black);
	}

	void wait(int milliseconds) {
		try {
			Thread.sleep(milliseconds);
		} catch (Exception e) {
			// ignoring exception at the moment
		}
	}

	void redraw() {
		erase();
		for (Iterator i = objects.iterator(); i.hasNext();) {
			((ShapeDescription) shapes.get(i.next())).draw(graphic);
		}
		canvas.repaint();
	}

	void erase() {
		Color original = graphic.getColor();
		graphic.setColor(backgroundColour);
		Dimension size = canvas.getSize();
		graphic.fill(new Rectangle(0, 0, size.width, size.height));
		graphic.setColor(original);
	}

	private class CanvasPane extends JPanel {
		public void paint(Graphics g) {
			g.drawImage(canvasImage, 0, 0, null);
		}
	}

	private class ShapeDescription {

		private Shape shape;

		private String colorString;

		ShapeDescription(Shape shape, String color) {
			this.shape = shape;
			colorString = color;
		}

		void draw(Graphics2D graphic) {
			setForegroundColor(colorString);
			graphic.fill(shape);
		}
	}

}


@L-ectron-X: ich habe keine ahnung wie man vererbt und wozu es dient

Also und zwar möchte ich folgendes lösen...
http://www.programmierkurs-java.de/

UE22 Aufgabe 5

da vorhher ein beispiel war mit der canvas von oben dachte ich das es ja damit möglich sein müsste diese aufgabe zu lösen
 
G

Guest

Gast
man irgendwie seit ihr zu schnell ok ich guck mir jetzt erstmal eure lösungsvorschläge an

danke
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
B JavaFX KeyEvent und Canvas draw Problem AWT, Swing, JavaFX & SWT 9
H JavaFX Canvas neu zeichnen anstoßen AWT, Swing, JavaFX & SWT 34
H JavaFX Gedrehter Text auf Canvas (Positionierung) AWT, Swing, JavaFX & SWT 6
ExceptionOfExpectation Textdarstellung auf einem Canvas mit Hilfe von repaint(); AWT, Swing, JavaFX & SWT 6
W Clear Canvas und anschließendes neues Erstellen von Objekten auf Canvas aus ArrayList AWT, Swing, JavaFX & SWT 4
W Canvas oder Polygone? AWT, Swing, JavaFX & SWT 3
Monokuma Canvas Form entfernen AWT, Swing, JavaFX & SWT 2
Monokuma KeyEvent in der Canvas Klasse AWT, Swing, JavaFX & SWT 0
M Internal Frames und Canvas-Element AWT, Swing, JavaFX & SWT 9
TheJavaKid Auf eine Zeichnung im Canvas reagieren AWT, Swing, JavaFX & SWT 13
M Halbkreiszeichnen(Canvas) - Diesen mit Mouseevents bestücken AWT, Swing, JavaFX & SWT 3
dereki2000 AWT Canvas zeichnet nicht AWT, Swing, JavaFX & SWT 7
D Canvas oder scene graph? AWT, Swing, JavaFX & SWT 16
J Canvas wird nicht angezeigt AWT, Swing, JavaFX & SWT 10
Y Objekte grafisch darstellen ohne GMF - Composite auf Canvas? AWT, Swing, JavaFX & SWT 2
Prafy AWT Klickbare Bereiche auf Canvas AWT, Swing, JavaFX & SWT 2
J JavaFX JavaFX Canvas einfaches Zeichenprogramm AWT, Swing, JavaFX & SWT 7
P MalProgramm mit JScrollPane und Canvas AWT, Swing, JavaFX & SWT 2
Cromewell JavaFX Nur bestimmten Teil eines Canvas rendern und anzeigen AWT, Swing, JavaFX & SWT 2
N Swing Benötige Hilfe um ein Swing Canvas zu speichern AWT, Swing, JavaFX & SWT 4
L JavaFX Canvas max size? AWT, Swing, JavaFX & SWT 1
J JavaFX Rendering von Canvas sehr langsam AWT, Swing, JavaFX & SWT 2
P AWT Canvas freihändig zeichnen AWT, Swing, JavaFX & SWT 1
Regedit JavaFX Java Canvas hört ständig auf zu aktualisieren/malen AWT, Swing, JavaFX & SWT 3
H JavaFX Freezes beim Zeichnen mit Canvas AWT, Swing, JavaFX & SWT 3
Z Canvas in Frame einfügen. Problem mit 4-Gewinnt AWT, Swing, JavaFX & SWT 1
K Fragen zu JavaFx Canvas AWT, Swing, JavaFX & SWT 0
C Java FX Canvas missing getGraphicContext2D AWT, Swing, JavaFX & SWT 5
windl Overlay mit Transparentem JWindow und Canvas AWT, Swing, JavaFX & SWT 2
S JavaFX Canvas - nur eine Figur auf der Zeichenfläche färben? AWT, Swing, JavaFX & SWT 1
R JComponent auf Canvas AWT, Swing, JavaFX & SWT 8
S Canvas durch transparentes JPanel sichtbar machen AWT, Swing, JavaFX & SWT 2
A JavaFX Menubar wird von Canvas überzeichnet AWT, Swing, JavaFX & SWT 8
antonbracke Multiplayer Shooter- Wie geht das mit Canvas & Graphics AWT, Swing, JavaFX & SWT 6
Luk10 KeyBindings mit Canvas? AWT, Swing, JavaFX & SWT 3
B LookAndFeel GWT: Canvas in TabSet nicht sichtbar AWT, Swing, JavaFX & SWT 2
K canvas zeig nach repaint nichts an AWT, Swing, JavaFX & SWT 8
T Canvas clipping AWT, Swing, JavaFX & SWT 4
S 2 Canvas übereinander AWT, Swing, JavaFX & SWT 2
S 2D-Grafik Canvas Problem(Größe) AWT, Swing, JavaFX & SWT 6
K 3D-Grafik Canvas ist ein eigener Frame?! AWT, Swing, JavaFX & SWT 13
F Canvas Objekt außerhalb des Frames zeichnen AWT, Swing, JavaFX & SWT 3
M Wofür Canvas? AWT, Swing, JavaFX & SWT 5
frankred Swing Canvas nach "Window-resize" neu Zeichnen lassen wegen Anzeigefehler AWT, Swing, JavaFX & SWT 4
S Canvas in ScrollPane wird beim scrollen immer neu gezeichnet AWT, Swing, JavaFX & SWT 3
F Nur ein Objekt auf Canvas neu zeichnen AWT, Swing, JavaFX & SWT 4
B AWT Canvas überdeckt nach repaint() JComboBox-Optionen AWT, Swing, JavaFX & SWT 2
lumo SWT Canvas transparent AWT, Swing, JavaFX & SWT 4
2 AWT Zeichnen in Canvas AWT, Swing, JavaFX & SWT 5
B 2D-Grafik Malen/übermalen mit Canvas AWT, Swing, JavaFX & SWT 5
L Dynamisch Objekte in Canvas zeichnen AWT, Swing, JavaFX & SWT 5
G Auf Canvas zeichnen nur über boolean-Abfragen? AWT, Swing, JavaFX & SWT 5
S Canvas-Inhalt in Laufzeit ändern AWT, Swing, JavaFX & SWT 6
R In JFrame oder in Canvas mit grafischen Elemente zeichnen AWT, Swing, JavaFX & SWT 2
I Canvas Repaint Probleme AWT, Swing, JavaFX & SWT 2
S Bild wird auf Canvas in Applet nicht gezeichnet AWT, Swing, JavaFX & SWT 4
G SWT Linie unter transparentes Canvas zeichnen AWT, Swing, JavaFX & SWT 4
F Swing Paint mit Canvas Element AWT, Swing, JavaFX & SWT 35
S SWT Canvas: Flackernde Bilder AWT, Swing, JavaFX & SWT 3
T AWT canvas AWT, Swing, JavaFX & SWT 3
P Canvas: String wird nicht gezeichnet AWT, Swing, JavaFX & SWT 5
T SWT Canvas Koordinaten per MouseMove auslesen AWT, Swing, JavaFX & SWT 1
H Zeichnen auf smartgwt Canvas AWT, Swing, JavaFX & SWT 4
G Drag and Drop JTree to Canvas AWT, Swing, JavaFX & SWT 7
K Swing Sinuskurve zeichnen auf Canvas AWT, Swing, JavaFX & SWT 2
M AWT Component/Canvas erzeugt unerwünschten Rahmen bei paint AWT, Swing, JavaFX & SWT 3
J Canvas / paint() AWT, Swing, JavaFX & SWT 2
D Canvas soll angezeigtes jpg-Bild aktualisieren AWT, Swing, JavaFX & SWT 4
N zeichnen auf awt canvas AWT, Swing, JavaFX & SWT 9
G Ein Wort in einem String färben in einer Canvas AWT, Swing, JavaFX & SWT 10
J Canvas Inhalt als Bild speichern! AWT, Swing, JavaFX & SWT 16
T zeichnen mit canvas AWT, Swing, JavaFX & SWT 3
S repaint im Canvas AWT, Swing, JavaFX & SWT 3
D Canvas und Buttons AWT, Swing, JavaFX & SWT 20
P Zeichnen in Canvas und Neuzeichnen AWT, Swing, JavaFX & SWT 3
G Canvas + Swing-Objekte AWT, Swing, JavaFX & SWT 5
P Canvas in JFrame mit GridLayout AWT, Swing, JavaFX & SWT 4
B Graphics und Canvas - Problem AWT, Swing, JavaFX & SWT 2
T Canvas gegen Container austauschen --> GUI fehlt AWT, Swing, JavaFX & SWT 4
P Canvas Inhalt löschen AWT, Swing, JavaFX & SWT 4
D Canvas über JMenuBar AWT, Swing, JavaFX & SWT 7
F ToolTip auf Canvas AWT, Swing, JavaFX & SWT 2
L Probleme mit mehreren Canvas: Überlagerungseffekte? AWT, Swing, JavaFX & SWT 5
N Zu hoher Speicherverbrauch beim Zeichnen (Canvas) AWT, Swing, JavaFX & SWT 5
G Canvas im JPanel - "Freie" Fläche Problem AWT, Swing, JavaFX & SWT 10
T Textfeldwert in canvas AWT, Swing, JavaFX & SWT 4
D cannot access Canvas AWT, Swing, JavaFX & SWT 13
G Canvas in SWT aktualisieren AWT, Swing, JavaFX & SWT 21
S AUF Canvas Zeichnen Fehler! AWT, Swing, JavaFX & SWT 10
G Canvas löschen AWT, Swing, JavaFX & SWT 15
H Sowas wie ein Canvas AWT, Swing, JavaFX & SWT 3
D Inhalt einer Canvas löschen (SWT.NO_BACKGROUND gesetzt) AWT, Swing, JavaFX & SWT 3
G GridBagLayout mit Canvas-Positionsproblem AWT, Swing, JavaFX & SWT 5
J Canvas und JTextField AWT, Swing, JavaFX & SWT 2
T erkennen ob innerhalb oder außerhalb von canvas gezeichnet AWT, Swing, JavaFX & SWT 2
S Problemen mit Canvas-Objekten im GridLayout AWT, Swing, JavaFX & SWT 8
P Tranparentes Canvas AWT, Swing, JavaFX & SWT 8
P Inhalt eines Canvas verkleinern AWT, Swing, JavaFX & SWT 3
G Canvas, JMenu, und BufferStrategy AWT, Swing, JavaFX & SWT 2
M Codeteilung -> Canvas zeichnet nicht mehr AWT, Swing, JavaFX & SWT 40

Ähnliche Java Themen

Neue Themen


Oben