Dies ist mein Zeichnungscode, um eine benutzerdefinierte Linie mit der Maus auf ein Diagramm zu zeichnen. Kannst du mir bitte helfen, es richtig zu machen?
%Vor%Problem ist, dass, wenn ich die Größe der Maske ändere, meine Zeile verschwindet. Es verschwindet, wenn onPaint-Ereignis ausgelöst wird.
Probieren Sie das aus ... Es ist eine Strichzeichnungsmethode, die sehr einfach und so nah wie möglich an Ihren eigenen Code implementiert wird. Stokes sind individuelle Sammlungen von Mausbewegungen. Jede Mausbewegung zwischen unten und oben wird als Strich aufgezeichnet, alle Striche werden gesammelt und dann neu gezeichnet, wenn das Paint-Ereignis ausgelöst wird. Dieses Beispiel ist einfach, könnte aber ein guter Ausgangspunkt sein.
Beachten Sie, dass Sie den Paint-Handler für Ihr Diagrammobjekt hinzufügen müssen.
%Vor%Haben Sie Probleme mit Ihrer aktuellen Implementierung? Funktioniert es oder möchten Sie den Code für eine bereits funktionierende Funktion verbessern?
Ich denke, deine Logik sieht gut aus. Ich würde dem Pen jedoch eine using-Klausel hinzufügen:
%Vor% Auf diese Weise wird Ihr Stift auch dann entsorgt, wenn nach der Erstellung und dem Aufruf von Dispose
Ausnahmen auftreten.
Sie können jedoch auch daran denken, dass Pen
eine Klassenvariable ist, sodass Sie sie nicht jedes Mal erstellen und entsorgen müssen, wenn Sie die Maus bewegen.
Sie müssen Ihre Zeile irgendwo speichern.
Die Schritte, die Sie ergreifen müssen, sind:
ArrayList<ArrayList<Point>>
- wobei jede ArrayList<Point>
die Liste der Punkte in einer Zeile enthält. new ArrayList<Point>
) am Ende der Liste der Zeilen paint
, durchlaufen Sie alle Zeilen und zeichnen Sie jeden Punkt jeder Zeile im Array. Wenn Sie Ihre Zeilen nicht irgendwo ablegen, sind sie verloren. Macht das Sinn?
Die andere Möglichkeit, Zeilen zu speichern, besteht darin, ein Canvas
-Objekt zu verwenden, in dem die Pixel-Map des Gezeichneten gespeichert und automatisch gezeichnet wird. Wenn es Ihnen nichts ausmacht, Ihre Liniendaten nicht als Vektorpunkte zu haben und Sie vielleicht auch Bilder oder Farben verwenden möchten, dann ist dies vielleicht ein besserer Ansatz.
Ich habe vor einiger Zeit eine Lösung gepostet wie man mit Mausbewegungen eine Linie zeichnet. Dies sollte für Sie arbeiten.
%Vor% Grundsätzlich können Sie bei jeder Bewegung der Maus eine Linie zeichnen. Wenn es eine vorherige Zeile gab und Sie immer noch die Maus bewegen, löschen Sie die Zeile und zeichnen Sie die neue Zeile. Beachten Sie, dass dieses Beispiel basierend auf einem bestimmten Panel
(in diesem Beispiel myPanel1) versetzt wird. Dementsprechend anpassen. Wenn Sie die Größe des Steuerelements ändern, müssen Sie die Linie mithilfe des vorherigen Punkts des Ankerpunkts neu zeichnen.