ich würde gerne auf mein JFrame-Fenster ein weiteres Fenster platzieren.
Dieses zusätzliche Fenster soll genauso ausehen wie der “Color chooser” von java, also ein Rastergitter.
Nur möchte ich, dass das Gitter keine Farben sondern Objekte zum anklicken enthält.
beim JFrame gibt es nicht viel Code.
Ich habe nur die Größe, die Position und ein paar kleinigkeiten festgelegt.
Ob ich das Gitter selber programmiere, hängt davon ab wie komplex das ganze ist.
Ich habe mal ein JPanel auf dem JFrame platziert.
Danach wollte ich ein JLabel-Array erzeugen mit einen Rahmen pro Kästchen.
Diese kleinen Kästchen wollte ich dan auf dem JPanel platzieren.
War nur mal ein Versuch, glaub eh nicht dass das so funktionieren wird.
Den Color chooser anpassen, wird wohl nicht so einfach gehen.
Also ich würd das selber machen. Du nimmst einen Container/Component, fügst ein GridLayout hinzu, fügst JLabel mit Icon hinzu, vielleicht soll es anklickbar sein, dann fügst du ActionListener hinzu.
Und “am JFrame” heißt hier: Irgendwo in den Gitterzellen? Wo kommt das Objekt her? Sowas wie https://docs.oracle.com/javase/tutorial/uiswing/dnd/intro.html kann in den Tiefen ein bißchen fummelig sein, aber vermutlich geht’s ja um etwas einfacheres…?
Ich habe nun mal ein JPanel voll mit Buttons, das JPanel ist am JFrame platziert.
Wenn ich nun einen Button anklicke, soll an meiner Mausspitze das entsprechende Objekt liegen.
Dann möchte ich das Objket auf dem JFrame platzieren können und zwar mit einem Mausklick.
Ahja, “am Frame” ist wohl östereichisch für “im Frame” oder “auf dem Frame”. Also ich nehme jetzt an, dass du (woanders) dann irgendwelche Buttons haben willst mit “Wand”, “Gras”, “Gegner”, “Schatztruhe”, und diese Items im Level platzieren willst. Oder, alternativ, dass in diesem Gitter schon Objekte liegen wie etwa eine “Schatztruhe”, und du die mit einem Klick auf den Button auswählen und woanders wieder ablegen können willst.
Was ist da dann der wichtigste Punkt? Die reine Funktionalität davon ist mit einer handvoll Zeilen erledigt. Das schwierigste wäre da, dafür zu sorgen, dass das Item (sichtbar) “am Mauszeiger klebt”, wie man es manchmal bei Drag+Drop-Operationen sieht. (Spontan wüßte ich nicht, wie das geht, und bin nicht mal 100% sicher ob das überhaupt geht…)
OpenGL wäre für sowas die geeigneterere Wahl, da ist aber das Item-/Icon-Menu schwierigerer zu schreiben.
Ein schöner/lustiger (oder gar animierter) Mauszeiger ist tief im System verankert, Java s Standard-Library bietet das AFAIK nicht an.
######Edit: Ich hab nachgeschaut, der Komparativ in schwacher Flexion im Nominativ singular feminin von ‚geeignet‘ wäre nur der unschnöde ‚geeignetere‘… das wiederholt steigern zu wollen, ist ja auch Nonsens.
Die cursor-Frage ist eigentlich nur ein Detail, aber ich erinnere mich, dass auf einigen OSes die Größe des Cursors auf 32x32 beschränkt war. Heutzutage könnte das aber durchaus anders sein.
Ja aber ich wollte nur auch eine Lösung dafür bieten, da du meintest, dass du nicht sicher bist, ob es überhaupt geht.
falls diese 32x32 Beschränkung noch immer existiert, kann man das ganze auch noch mit einem MouseMotionListeners jenes Panels lösen auf die die Objekte anschließend abgelegt werden sollten, bzw. halt mit einem MouseMotionListener des gesamten JFrames.
Das dieser Listeners wird immer aufgerufen (wie der Name schon sagt) wenn die Maus über dem JPanel/JFrame bewegt wird. nun könnte mann mit einem eigenen JPanel als glass pane des JFrames ein Image an der stelle an der das MouseEvent aufgetreten ist zeichnen (paitComponent()).
Die kursiven Wörter wären dann Suchbegriffe für die bevorzugte Suchmaschine.
Sobald dann das Object mit einem MouseClick abgelegt wird, kann zeichnet man einfach nichts mehr auf der glass pane
Das Aufnehmen des Objects funktioniert wie von @Marco13 und @CyborgBeta beschrieben mit einem GridLyout und z.B. JButtons und einem ActionListener.
Hier hab ich schnell ein Bsp gefunden wo ein Roter punkt and die Mausposition gezeichnet wird.