ERLEDIGT
NEIN
NEIN
ANTWORTEN
4
4
ZUGRIFFE
756
756
EMPFEHLEN
-
hallo ich hab eine frage und zwar wie kann ich mit hilfe von
java.awt.point und java.util.vector ein Applet oder eine Applikation zum Freihandzeichnen mit der maus schreiben?
-
Was möchtest du machen? Freihandschreiben?
Also so wie man im Winter normalerweise seinen Namen in den Schnee pinkelt? *g*
Du musst einen MouseMotionListener oder so implementieren und dort die aktuelle Position des Mauszeigers feststellen und dort einen Punkt/Pixel setzen. Das geht mit der Methode drawLine() aus deinem Graphics-Kontext.
Was du mit der Vector-Klasse willst, weiß ich momentan nicht. Evtl. zum Speichern bereits gezeichneter Punkte, um sie später wieder zu löschen? Sorry, aber deine Frage ist unverständlich gestellt. Was willst du überhaupt machen?
Hier ist ein Beispiel jedoch mit einer geraden Linie von einem Startpunkt bis zum Loslassen der Maus.
Ich hoffe das hilft Dir weiter.
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
import java.applet.Applet; import java.awt.BorderLayout; import java.awt.Graphics; import java.awt.Point; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import javax.swing.JPanel; public class Freihandzeichnen extends Applet implements MouseListener { private static final long serialVersionUID = 1L; private JPanel drawPanel = new JPanel(); private Point startPoint = new Point(); @Override public void init() { setLayout(new BorderLayout()); drawPanel.addMouseListener(this); add( drawPanel ); setVisible( true ); } public void mouseClicked(MouseEvent e) {} public void mouseEntered(MouseEvent e) {} public void mouseExited(MouseEvent e) {} public void mousePressed(MouseEvent e) { startPoint.x = e.getX(); startPoint.y = e.getY(); } public void mouseReleased(MouseEvent e) { Graphics g = drawPanel.getGraphics(); g.drawLine(startPoint.x, startPoint.y, e.getX(), e.getY()); } }
-
Habe mich gerade kurz hingesetzt und die o. g. Klasse etwas modifiziert. Sie ist aber nicht für Produktiveinsatz geeignet, da beim Resizen nicht repainted wird. Musst mal selbst gucken, wie du das machst. Ist normalerweise einfach...
Hier soll vielmehr der Einsatz der Klassen Point und Vector demonstriert werden.
Hast Du es Dir in etwa so vorgestellt?
Hier der Code:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
import java.applet.Applet; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Graphics; import java.awt.Point; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseEvent; import java.awt.event.MouseMotionListener; import java.util.Vector; import javax.swing.JButton; import javax.swing.JPanel; public class Freihandzeichnen extends Applet implements MouseMotionListener, ActionListener { private static final long serialVersionUID = 1L; private JPanel drawPanel = new JPanel(); private Vector<Point> pointCache = new Vector<Point>(); private JButton changeColorButton = new JButton("Change Color"); private Graphics g; private Vector<Color> colorCache = new Vector<Color>(); private Color cachedColor; @Override public void init() { setLayout(new BorderLayout()); drawPanel.addMouseMotionListener(this); add( drawPanel, BorderLayout.CENTER ); changeColorButton.addActionListener(this); add(changeColorButton, BorderLayout.SOUTH); colorCache.add(Color.RED); setVisible( true ); } public void mouseDragged(MouseEvent e) { Point p = new Point(e.getX(), e.getY()); g = drawPanel.getGraphics(); // draw point g.drawLine(p.x, p.y, p.x, p.y); //cache drawed point pointCache.add(p); } public void mouseMoved(MouseEvent e) {} public void actionPerformed(ActionEvent e) { if(e.getActionCommand().equals(changeColorButton.getActionCommand())){ changeColor(); } } public void changeColor(){ if(g != null){ Point p; // get cached color cachedColor = colorCache.firstElement(); // delete cached color colorCache.remove(0); // add current color colorCache.add(g.getColor()); g.setColor(cachedColor); // change color for each point for(int i=0; i < pointCache.size(); i++ ){ p = pointCache.get(i); g.drawLine(p.x, p.y, p.x, p.y); } } } }
Und so sieht es aus: (siehe Anhang
)
-
hi danke für deine antwort
eigentlich wollte ich sowas ähnliches haben
http://www.electric-lemon.de/scribbleboard.php
oder so
http://www.stowlake.com/files/draw.html
und vektor zum Speichern bereits gezeichneter Punkte.Geändert von mal2000b (23.10.07 um 19:16 Uhr)
-
Wo ist das Problem? Mach das doch!

Das, was ich dir gepostet hatte ist ja schon im weitesten Sinne das, was du willst. Du musst bedenken, dass ich es innerhalb von einer viertel Stunde schnell gemacht hatte. Wenn du was vernünftiges haben willst, musst du dir schon die Mühe machen, sich für einige Stunden hinzusetzen.
Viel Erfolg noch!
Ähnliche Themen
-
OOP und zeichnen
Von Magixo im Forum Flash PlattformAntworten: 9Letzter Beitrag: 07.04.09, 12:26 -
Zeichnen
Von tom01 im Forum VisualStudio & MFCAntworten: 2Letzter Beitrag: 19.07.06, 11:16 -
Säulen Zeichnen, Drachen zeichnen
Von RudeJava im Forum PhotoshopAntworten: 34Letzter Beitrag: 17.07.05, 09:34 -
Pad zum Zeichnen?
Von Carndret im Forum PhotoshopAntworten: 2Letzter Beitrag: 22.10.02, 18:09 -
Was zum zeichnen?
Von ernii im Forum Sonstige Grafik-ProgrammeAntworten: 5Letzter Beitrag: 14.08.01, 13:31





Zitieren
Login





