So habe ich einige Probleme dabei. Grundsätzlich zeichnete ich zuvor mit Graphics2D und GeneralPath einige Liniensegmente auf einem JPanel, und nun möchte ich das Graphics2D/GeneralPath-Objekt abrufen, wenn ich es auf dem JPanel anklicke, kann ich das trotzdem machen?Wählen Sie Grafikkomponenten, wenn Sie auf ein JPanel klicken
-1
A
Antwort
1
Ich möchte die Graphics2D/GeneralPath Objekt abzurufen, wenn ich auf dem JPanel darauf klicken
Sie benötigen einen ArrayList
von Shape
Objekt zu halten, die Sie zeichnen. Dann können Sie im MouseListener den Mauszeiger ermitteln und mit der Methode Shape.contains(...)
feststellen, ob der Mausklick auf eine von Ihnen gezeichnete Shape
erfolgte.
Das Draw On Component
Beispiel von Custom Painting Approaches zeigt das Konzept des Zeichnens eines Objekts aus einer ArrayList, um loszulegen.
Edit:
Die Shape.contains(...)
Methode funktioniert nicht für Linien.
Hier ist ein kurzer Versuch, eine contains (...) -Methode für ein Line2D-Objekt und einen Point zu schreiben. Nicht sicher, wie genau es im wirklichen Leben sein wird.
import java.awt.*;
import java.awt.geom.*;
class LineContains
{
public static void main(String...args)
{
Point point = new Point(10, 19);
Line2D.Double line = new Line2D.Double(0, 0, 10, 20);
boolean result = LineContains.contains(line, point);
System.out.println(result);
}
static boolean contains(Line2D line, Point point)
{
double[] location = new double[6];
PathIterator pi = line.getPathIterator(null);
pi.currentSegment(location);
int x1 = (int)location[0];
int y1 = (int)location[1];
pi.next();
pi.currentSegment(location);
int x2 = (int)location[0];
int y2 = (int)location[1];
double xDelta = x2 - x1;
double yDelta = y2 - y1;
double iterations = Math.max(Math.abs(xDelta), Math.abs(yDelta));
double xMultiplier = xDelta/iterations;
double yMultiplier = yDelta/iterations;
for (int i = 0; i < iterations; i ++)
{
int x = (int)Math.round(x1 + (i * xMultiplier));
int y = (int)Math.round(y1 + (i * yMultiplier));
//System.out.println(x + " : " + y);
if (x == point.x
&& y == point.y)
return true;
}
return false;
}
}
Verwandte Themen
- 1. Wie Sie JPanel hinzufügen, indem Sie auf JButton klicken?
- 2. Rufen Sie ein Skript auf, wenn Sie auf klicken
- 3. Nightwatch.js klicken Sie auf Datei wählen
- 4. Bootstrap-wählen Sie auf klicken Sie erhalten Wert
- 5. Klicken Sie auf td, wählen Sie Radiobutton in jQuery
- 6. Klicken Sie auf ein Release
- 7. WicketTester Wählen Sie Radio Choice und klicken Sie auf DownloadLink
- 8. Verschieben undekorierten Fenster durch Klicken auf JPanel
- 9. Klicken Sie auf oder wählen Sie Clistctrl Unterpunkt (Berichtsansicht)
- 10. Wählen Sie einen Text wie "Strg + A", wenn Sie auf den Text klicken.
- 11. Zeigen Sie Daten auf klicken Sie auf ein Elternteil Winkel
- 12. Wählen Sie ein Array?
- 13. wählen Sie li klicken Capybara Klasse
- 14. Wählen Sie UITableView Zeile beim Klicken auf UISwitch
- 15. Bar Klicken Sie auf und wählen Sie den entsprechenden JTabel Datensatz
- 16. So rufen Sie ein Fragment auf oder rufen es auf, wenn Sie auf klicken.
- 17. statisch, schweben, klicken, mouseout, wenn Sie auf etwas anderes klicken
- 18. Laden Sie die Seite erneut, wenn Sie auf "Zurück" klicken
- 19. onTouchListener auf FrameLayout: Schließen Sie es, wenn Sie außerhalb klicken
- 20. Klicken Sie auf ein Bild mit nightmarejs
- 21. Toggle zwischen zwei Div-Paare, wenn Sie auf sie klicken
- 22. Aktivieren Sie das Optionsfeld, wenn Sie auf DIV klicken
- 23. Ein Klicken Sie auf Befehlsschaltfläche Makro
- 24. Excel, wählen Sie ein Ergebnis basierend auf
- 25. So löschen Sie JTextField, wenn Sie auf das JTextField klicken
- 26. Ändern Sie TextView in ListView, wenn Sie auf Speichern klicken
- 27. Erstellen Sie ein Popup, das ein zufälliges Bild anzeigt und dann schließt, wenn Sie auf klicken
- 28. So zeigen Sie ein Kontextmenü an, wenn Sie mit der rechten Maustaste auf ein Menüelement klicken
- 29. Schließen Sie die Statusleiste, wenn Sie auf die Schaltfläche klicken.
- 30. Aktivieren Sie das Kontrollkästchen, wenn Sie auf Beschreibung klicken
Es funktioniert momentan nicht für mich, egal wo ich geklickt habe, die Punktkoordinaten sind immer ganzzahlige Werte und die contains() Methode gibt immer falsch für mich zurück. –
@LinxuanMichaelYang, sieht aus wie 'Shape.contains (...)' funktioniert nicht auf Zeilen. Siehe Bearbeiten. – camickr
Leider funktioniert das immer noch nicht, thx sowieso –