Java Swing angepasste Formen (2D-Grafiken)
Brauche ich zum zeichnen eigener Formen. Jetzt klickt ein Benutzer auf mehrere Punkte auf die Systemsteuerung habe ich eine Form erstellen mit einem polygon.
public void mouseClicked(MouseEvent e) {
polygon.addPoint(e.getX(), e.getY());
repaint();
}
Aber ich weiß nicht, ob dies der beste Weg, zu zeichnen eigener Formen.
Es möglich sein sollte, zu Bearbeiten, eine gezeichnete Form:
- Größe
- ändern Ihre Farbe füllen
- ändern Sie die Strichfarbe
- copy/paste
- verschieben Sie eine einzelne Punkt des Polygons
- ...
Ich habe Leute gesehen, die erstellen eine eigene Klasse die Implementierung der Shape-Klasse und die Verwendung eines GeneralPath. Aber wieder habe ich keine Ahnung, ob das ein guter Weg.
Jetzt kann ich meine eigene Form mit einem polygon oder mit einem GeneralPath), aber ich habe keine Ahnung, wie das befestigen Sie alle Bearbeiten-Funktionen, um meine eigene Form (die edit-Funktionen meine ich die Größe ändern, verschieben, etc. von oben).
Ich hoffe, jemand könnte mir zeigen, einen Weg, dies zu tun, oder vielleicht ein wenig schreiben von code, um dies zu demonstrieren.
Vielen Dank im Voraus!!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Antwort auf deine Frage, ich würde auf jeden Fall das tun, was Sie beschreiben, als ein AWT-Lösung-auf diese Weise können Sie verfolgen die Objekte erstellt und in der Lage sein, um dem Benutzer zu ermöglichen, laden Sie Sie auf Bearbeiten, Leinwand und mehr als wahrscheinlich, dass jede der Formen, die der Benutzer erstellt eine "Ebene" die Ebene Swing-Container, sondern ein Objekt, das speichern und verfolgen, welche Formen gezeichnet werden und in der Lage sein, neu zu zeichnen, Sie-die wichtigste Sache im Auge zu behalten ist "Draw-order". Im Grunde können Sie tun dies durch zuweisen jedes Objekt oder Gruppe von Objekten, die Ihre "Formen", um ein Z=[0-100] etc. (100, kann eine beliebige Zahl sein), die bestimmen, was, um jedes der Objekte/shapes gezeichnet sind und so wie Sie über lay jeder andere.
Grundsätzlich sind Sie gehen zu müssen, eine shape-Klasse, die speichert die
Ihnen skizziert und ein storage-Objekt/- manager, mit dem aufzählen der shape-Klasse-Objekte/Instanzen, die erstellt werden. Diese Klassen werden in mehr oder weniger enthalten sein, der von einer java.das awt.Canvas-container, der eigentlich mit all den Grafiken.
Meist, die Sie verwenden möchten awt gegenüber Swing aufgrund der Tatsache Swing ist nicht Thread-safe--, so können Sie nicht "malen Sie sich in die Ecke" schon früh in Ihrem design. Ein weiterer Grund ist, dies ist eine Implementierung, die Bedürfnisse zu reagieren und in einer Weise interagieren, die ein Benutzer gewohnt ist. Swing wurde über den AWT und fügt eine große Komplexität, dass eine Anwendung wie diese nicht brauchen. Über alles, was Sie gehen, um Sie eine Klasse erstellen, die Benutzerdefinierte Komponente, die ist genau das, was das Canvas-Objekt wurde bedeuten
bieten und, wenn die Sonne würde gehalten haben, dies Taktgefühl früher hätten Sie nicht bekommen haben in die
Chaos Swing stellte sich heraus zu sein... Die Entwickler-community-mich eingeschlossen-waren auf dem Weg zu erstellen Sie eine Menge von dem, was Swing-angeboten in der "Glätte" und component based design, aber was wir gebaut haben, war völlig AWT basiert. Wenn Swing die Bühne betraten, Java, eine GUI-Plattform war sehr kompliziert und begann Sun und Java hinunter ein rutschiger Pfad...
Außerdem müssen Sie entscheiden, was Sie letztendlich wollen, so weit wie die Kontrolle über das, was Sie erstellen hier. Wenn Sie es brauchen, schnell und nicht wirklich zu ändern, es in der Zukunft, dann gibt es viele open-source-Beispiele, die dies tun können-die meisten kostenlos. Wenn Sie möchten es selbst tun, dann hoffentlich das, was ich oben besprochen haben und der Gummi-band code unten wird genug sein, Sie dort zu bekommen und ein tieferes Verständnis von Java, der GUI. Ich persönlich hoffe, Sie nehmen es auf sich selbst-diese Sprache braucht dringend mehr "core" die Menschen, die wirklich verstehen, die Sprache und das design, und nicht nur, wie man "Arbeit" - frameworks wie Hibernate und Spring unter anderem...
Gut Glück hoffe, das hilft,
WM
Soweit "Gummi-band" - wählen Sie code geht, dies ist mein ich in der Vergangenheit verwendet haben, betrachte es einfach GLP und verwenden Sie es wie Sie es brauchen...
Erste ist die Listener-Schnittstelle:
Hier ist die Klasse, die eine benutzerdefinierte AWT-Komponente-es sollte in Ordnung sein, entweder in Swing/AWT wahrscheinlich sogar SWT
Den ImageJ Projekt hat eine besonders schöne Umsetzung eines Polygon-Werkzeug mit verstellbaren Ecken, wie gesehen hier und hier.
Haben Sie schaute auf die Graphics-Klasse in java (es gibt auch eine Polygon-Klasse)? Es gibt Poligon zeichnen und füllen-Methoden, und jeder kann nehmen, in ein array von x-und y-Koordinaten. Durch die Verwendung dieser arrays ist, sollten Sie in der Lage sein zu ändern die Position der Punkte relativ leicht. Wie Sie ändern könnte, Sie alle gleichermaßen für eine re-Größe, oder kopieren und einfügen, indem Sie alle Punkte gleichermaßen. Das ändern der Farbe, ist so einfach wie das ausfüllen mit einer neuen Farbe und Malerarbeiten.