Swing anklickbares Sechseck-Muster

W

Willy8888

Gast
Hallo,

Ich habe ein grosses Problem...

Hier ein Bild meines Programms:
attachment.php



Wie bekommt man es hin, dass man die einzelnen Polygone anklicken kann und dann sollte ein roter Punkt auf ihnen erscheinen? Ich hatte die Idee JLabels über die Polygone zu legen (und dann MouseListener zu adden), aber das funktioniert nicht; oder ich mache etwas falsch...

Habt ihr Ideen? :)
 

Anhänge

  • bildah.jpg
    bildah.jpg
    36,9 KB · Aufrufe: 61
Zuletzt bearbeitet von einem Moderator:
G

Gast2

Gast
Wie hast du bisher deine Sechsecke dort gezeichnet?
Alles in der paintComponent deines JPanels?

Nen paar mehr infos wären nicht schlecht.
 
W

Willy8888

Gast
Ich habe alles in Schleifen im paintComponent ( im JPanel ).

Gibt es die Möglichkeit, abgesehen von den Polygonen, einfach nur einen bestimmten Bereich auf dem Frame anklicken zu können, sodass der sich dann verrändert?
 
S

SlaterB

Gast
eine einfache Grund-Umsetzung für beliebige Darstellungen wäre,
bei jeder Änderung alles komplett neu zu zeichnen, also sämtliche Sechsecke, eins evtl. gefüllt,
und zur Steuerung einen MouseListener auf die gesamte Fläche, aus der exakten Pixelposition das zu ändernde Sechseck ausrechnen

mit fertigen Komponenten wie JLabel/ Button/ Table bist du im einfachen Fall wohl auf Rechtecke eingeschränkt
 

muckelzwerg

Bekanntes Mitglied
Sicher gibt es das, aber halt nicht so "geschenkt" wie Du das vielleicht gerade hoffst. Ein Bisschen Arbeit ist das schon.

Wie wäre es z.B. wenn Du es aus der Mausposition berechnest?
Dafür müssen Maus und Zeichnung im selben Koordinatensystem sein (hast Du vermutlich schon) und sich auf den gleichen Ursprung beziehen (da musst Du evtl. noch einen Offset einbauen).
Und dann hat Dein Muster doch die schöne Eigenschaft, dass es eine Voronoi Zerlegung ist. Das heißt, alle Punkte innerhalb eines Sechseck haben zum Mittelpunkt dieses Sechsecks den kürzesten Abstand.
Alle Punkte auf den Kanten haben zu den beiden (oder den drei) angrenzenden Sechsecken den gleichen Abstand.
Und als besonderer Bonus liegen die Mittelpunkte der Sechsecke auf einem rechtwinkligen Raster.
Du musst also nur rausfinden, welchem Mittelpunkt die Mauskoordinaten am Nächsten liegen.

Berechne mal das Mittelpunktraster, falls Du es nicht sowieso bereits für die Konstruktion benutzt hast.
Dann überleg Dir wie Du die Höhe und Breite des Bildes durch die Anzahl der Sechsecke/Mittelpunkte teilen musst, um rauszubekommen, in welcher "Zeile" und in welcher "Spalte" der Mauscursor steht.
Da wird wieder ein bisschen Geschiebe mit verschiedenen Offsets nötig sein, je nach dem, wo Dein Muster startet.
Aber von der Berechnung her, ist es bloß Dividieren und Abrunden. :)


Falls Du das mit "Java-Tricks" lösen willst, könntest Du für jedes Sechseck eine rechteckige/quadratische Komponente mit Transparenz verwenden und darauf ein Sechseck zeichnen. Durch volltransparente Flächen klickt die Mausverarbeitung durch.
Schön ist das aber nicht unbedingt.
 
Zuletzt bearbeitet:

Ähnliche Java Themen


Oben