Portal > Foren > Java > Desktop-Applikationen und Grafik > Auf ein Canvas Objekt per Mouseevents Linien Zeichnen
Antwort
 
Themen-Optionen Thema durchsuchen
Alt 10.06.2004, 12:13 Nach oben    #1
schärple
Gast
 
Beiträge: n/a
Standard Auf ein Canvas Objekt per Mouseevents Linien Zeichnen

Hi Forum,

ich habe nun auch mal angefangen, mich ein bisschen mit Java zu beschäftigen. Nun möchte ich einfach einmal ein kleines Progrämmchen schreiben, mit dem ich auf ein Canvas Objekt mittels Maus (Events) eine Linie zeichen kann. Leider fehlt mir ein bisschen der Faden. Bisher habe ich mir eine Klasse "Leinwand" erstellt, die Canvas erweitert und mir eben jenes Zeichenfeld erstellt.

Momentan habe ich keine Ahnung, wie ich nun am besten vorgehe, um einen MouseListener bzw. einen MouseMotionListener dazu zu bringen mir Linien zu Zeichnen :-).

Vielleicht kann mir jemand mal den grundsätzlichen Weg skizzieren. Eventuell reicht mir auch schon eine Seite mit einigen Codeschnipseln - das wäre natürlich genial.

liebe Grüsse Andi
 
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 10.06.2004, 12:40 Nach oben    #2
Sym
Chefkoch-Mod
 
Benutzerbild von Sym
 
Registriert seit: 30.05.2004
Beiträge: 432
Standard

Hi,

ich habe selber noch keine Zeichenprogramme implementiert. Möchtest Du gerade Lininen durch zweifaches Klicken erzeugen? Oder freies Zeichnen?

Nun ja, Du kannst Deiner Komponente K einen MouseAdapter
Code:
k.addMouseListener(new MouseAdapter() {
				
    public void mouseClicked(MouseEvent evt) {
	//Start Zeichnen
    }//mouseClicked(MouseEvent evt)

    public void mouseReleased(MouseEvent evt) {
        //Ende Zeichnen
    }
});
hinzufügen. Die Klassen findest Du im Paket java.awt.event. Du kannst hier mehr über die Klassen finden.

Das MouseEvent hant Methoden, welche Dir den aktuellen Punkt zurückgeben. Dasselbe kannst Du auch mit einem MouseMotionAdapter machen. Du musst nur die Methoden füllen.

Ich persönlich arbeite lieber mit Adaptern, da man diese "Klassen" in der Methode selber implementieren kann und keine extra interne (oder externe) Klasse erzeugen muss.
__________________
Denk mal darüber nach...

Lars

ACHTUNG: wenn ich von Klassen spreche, könnte ich auch deren Instanzen meinen.
www.linuxforen.de +++ www.macuser.de +++ www.mrunix.de +++ www.lmprojects.de
Sym ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 11.06.2004, 12:25 Nach oben    #3
schärple
Gast
 
Beiträge: n/a
Standard

Hallo Sym,

vielen Dank für deine Mühe, mein (Verständnis-)Problem liegt eher daran, dass wenn ich nun auf ein MouseEvent reagiere z.B. MousePressed und dann die Linie zeichnen möchte, ich ja die Endpunkte noch nicht kenne. Anderstherum, reagiere ich auf das MouseEvent MouseReleased, kenn ich doch für DrawLine die Anfangspunkte nicht .....
Dieses Problem beschäftigt mich... wobei ich da warscheinlich nur noch ganz falsch denke (imperativ) und an die Sache herangehe ...
 
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 11.06.2004, 13:12 Nach oben    #4
Sym
Chefkoch-Mod
 
Benutzerbild von Sym
 
Registriert seit: 30.05.2004
Beiträge: 432
Standard

Hallo,

ach so. Du könntest das doch über mouseClicked lösen. Beim ersten Klick speicherst Du die Koordinaten (durch das MouseEvent) und beim zweiten Klick auch. Dann zeichnest Du eine Linie zwischen beiden Punkten.

Alternativ implementierst Du mousePressed indem Du vorher die Variablen mit einem Negativen Wert festsetzt und diesen Wert in der Methode nur änderst, wenn die Werte negativ sind. Das hat zur Folge, dass bei MousePressed nur der erste Klick gespeichert wird.

Den Endpunkt erhälst Du durch die mouseReleased Methode (dort kannst Du den Startwert auch wieder neg. setzen). Somit kannst Du dann die nächste Gerade wieder zeichnen.
__________________
Denk mal darüber nach...

Lars

ACHTUNG: wenn ich von Klassen spreche, könnte ich auch deren Instanzen meinen.
www.linuxforen.de +++ www.macuser.de +++ www.mrunix.de +++ www.lmprojects.de
Sym ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 12.06.2004, 15:40 Nach oben    #5
Neuer Benutzer
 
Registriert seit: 27.05.2004
Beiträge: 25
Standard

Mein Vorschlag: Bei mouseclicked die Linie anfangen und zur aktuellen Mausposition zeichnen (mousemoved, getX, getY).

MfG Bischi

PS: Natürlich die jeweils zuvor gezeichnete Linie wieder löschen - indem du sie beispielsweise mit weiss übermalst (oder sonst ganzes Bild neu zeichnen, dann aber doppelbufferung verwenden). Natürlich bei einem weiteren Klick die Linie zu Ende Zeichen...
bischi ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 12.06.2004, 17:37 Nach oben    #6
Erfahrener Benutzer
 
Benutzerbild von peschmae
 
Registriert seit: 29.05.2004
Beiträge: 228
Standard

[OT]
Zitat:
Zitat von Sym
Ich persönlich arbeite lieber mit Adaptern, da man diese "Klassen" in der Methode selber implementieren kann und keine extra interne (oder externe) Klasse erzeugen muss.
Das stimmt so aber nicht ganz. Das Handling von einem Listener, den du implementierst oder einer Adapter-Klasse, von der du ableitest ist eigentlich dasselbe.
Der grosse Unterschied ist, dass du beim Listener sämtliche Methoden implementieren musst (allenfalls auch leer) und beim Adapter sind die schon leer und du überschreibst nur die welche du brauchst.
Codemässig kannst du aber auch Listener einfach als anonyme innere Klasse implementieren.
[/OT]

MfG Peschmä
__________________
Amazon.de | The Java Trap | Freie Software | Freie Software vs. Open Source | GNU Classpath | GCJ | SableVM
"We should forget about small efficiencies, say about 97% of the time: Premature optimization is the root of all evil." - Donald Knuth
peschmae ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 12.06.2004, 17:42 Nach oben    #7
Sym
Chefkoch-Mod
 
Benutzerbild von Sym
 
Registriert seit: 30.05.2004
Beiträge: 432
Standard

Zitat:
Zitat von peschmae
[OT]
Zitat:
Zitat von Sym
Ich persönlich arbeite lieber mit Adaptern, da man diese "Klassen" in der Methode selber implementieren kann und keine extra interne (oder externe) Klasse erzeugen muss.
Das stimmt so aber nicht ganz. Das Handling von einem Listener, den du implementierst oder einer Adapter-Klasse, von der du ableitest ist eigentlich dasselbe.
Der grosse Unterschied ist, dass du beim Listener sämtliche Methoden implementieren musst (allenfalls auch leer) und beim Adapter sind die schon leer und du überschreibst nur die welche du brauchst.
Codemässig kannst du aber auch Listener einfach als anonyme innere Klasse implementieren.
[/OT]

MfG Peschmä
Jupp, da hast Du recht. Da habe ich kurzzeitig wohl nicht richtig überlegt. Ich finde aber beides sinnvoll. Adapter und das in einer Methode.
__________________
Denk mal darüber nach...

Lars

ACHTUNG: wenn ich von Klassen spreche, könnte ich auch deren Instanzen meinen.
www.linuxforen.de +++ www.macuser.de +++ www.mrunix.de +++ www.lmprojects.de
Sym ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
PingBacks sind an
RefBacks sind aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
SessionID per Url auf Portal-Seite Artemis Fragen ans Team 7 09.07.2007 20:25
Apache-Zugriffskontrolle auf eine Datei per .htaccess: 500er Artemis Tools, Server, Betriebssysteme 4 23.03.2007 21:29
Line2D.Double-Objekt auf Panel zeichnen - kein Graphics-Objekt vorhanden :-/ Ben Desktop-Applikationen und Grafik 10 02.03.2006 15:34
Textfelder auf verschiedenen Tabs per Observer synchronisieren Sayang Desktop-Applikationen und Grafik 2 05.12.2005 19:14
[PHP] Wie übergebe ich Daten per URL? Ben Tutorials 0 05.12.2004 14:36


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:02 Uhr.


Powered by vBulletin® Version 3.7.4 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

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