AWT Canvas freihändig zeichnen

prog1

Mitglied
Hallo,

ich hab hier eine Oberfläche erstellt zum freihändigen zeichnen. Das Zeichnen funktioniert soweit, aber leider entstehen Lücken wenn ich meine Maus schneller bewege. Was muss ich machen, damit kontinuierlich gezeichnet werden kann, wenn die Maus gedrückt wird?

Hier mein Code:

Canvas:
Java:
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;

public class PaintingArea extends Canvas {

	private final static long serialVersionUID = 20L;
	private int x, y;

	public PaintingArea() {

		setBackground(Color.LIGHT_GRAY);
		setSize(550, 550);

		addMouseMotionListener(new MouseMotionListener() {
			public void mouseDragged(MouseEvent e) {
				x = e.getX();
				y = e.getY();
				paint(getGraphics());
			}

			public void mouseMoved(MouseEvent e) {
			}
		});
	}

	public void paint(Graphics g) {
		g.setColor(Color.blue);
		g.drawOval(x, y, 10, 10);
		g.fillOval(x, y, 10, 10);
	}

}

Frame:

Java:
package aufgabe4;

import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Choice;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.Panel;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class Blackboard extends Frame {

	private final static long serialVersionUID = 20L;
	private Panel top, flaeche;
	private Button clear, exit;
	private Choice color;
	private PaintingArea area;

	public Blackboard() {

		// Frame
		super("Blackboard");
		setSize(600, 600);
		setLocationRelativeTo(getParent());

		// Listener zum Beenden des Fensters
		addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				System.exit(0);
			}
		});

		// flaeche
		flaeche = new Panel();
		flaeche.setLayout(new BorderLayout());
		flaeche.setSize(550, 600);
		add(BorderLayout.CENTER, flaeche);

		// top
		top = new Panel();
		top.setLayout(new GridLayout(1, 3));
		// color
		color = new Choice();
		color.add("Black");
		color.add("Blue");
		color.add("Cyan");
		color.add("DarkGrey");
		color.add("Gray");
		color.add("Green");
		color.add("LightGray");
		color.add("Magenta");
		color.add("Orange");
		color.add("Pink");
		color.add("Red");
		color.add("White");
		color.add("Yellow");
		// Button
		clear = new Button("clear");
		exit = new Button("exit");
		// add
		top.add(color);
		top.add(clear);
		top.add(exit);

		
		// PaintingArea
		area = new PaintingArea();

		// add flaeche
		flaeche.add(BorderLayout.NORTH, top);
		flaeche.add(BorderLayout.CENTER, area);

		setVisible(true);

	}

	public static void main(String[] args) {

		Blackboard board = new Blackboard();

	}

}
 
hi,
du könntest es mit einer zustandskogik konstruieren. dazu bräuchtest du noch zusätzlich einen mouselistener. also in dragged setzt du einfach eine boolean auf true und in released auf false, dann weißt du immer, wann gedraggt wird oder nicht. dann könntst du dir immer den x und y wert der maus merken (also zwischenspeichern) und beim nächsten mal eine linie vom letzten punkt zum aktuellen zeichnen. dann die aktuellen werte für x und y speichern für das nächste mal
javampir
 

Neue Themen


Zurück
Oben