![]() |
|
|||||||
| AWT, Swing, JavaFX & SWT Themen zur Programmierung von Benutzer-Oberflächen (GUI, Applet) sowie zur Grafikprogrammierung (2D / 3D) |
|
|
|
Themen-Optionen | Thema durchsuchen | Ansicht |
| #1 (permalink) | |||||||
|
Benutzer
int
Registriert seit: 20.08.2012
Fachbeiträge: 54
Abgegebene Danke: 10
Erhielt 0 Danke für 0 Beiträge
|
Hallo,
ich würde gern ein Element einer Klasse verschieben, die von Jlabel erbt. Die Klasse nennt sich Box. Sobald ich auf einen Button (APPEND) drücke, soll ein MouseMotionListener zu einer ganz bestimmten Box hinzugefügt werden, sodass diese verschiebbar ist. Mein Code kompilliert ohne Fehler, aber die Box lässt sich leider nicht verschieben.
|
||||||
|
|
|
| #2 (permalink) | |
|
Java-Forum Team
Moderator
Registriert seit: 13.11.2005
Fachbeiträge: 32.021
Abgegebene Danke: 0
Erhielt 2.623 Danke für 2.583 Beiträge
|
schade dass du kein vollständiges Programm gepostet hast, bis zur Anzeige habe ich es geschafft,
aber mit den Listenern wäre es zuviel Arbeit/ zu unklar ob überhaupt etwas rauskommt, was du in etwa hast, Vorsicht beim Überschreiben von Methoden, setLocation(int,int) hat JLabel schon und wird von Swing vielleicht allgemein benötigt, aber wie ich dann gesehen habe, sind die Labels ja gar nicht normal in der GUI eingebunden, es wird nur deren paintComponent manuell aufgerufen warum addest du nun bei diesen nicht-Komponenten Listener? da sie nicht in der GUI drin sind bringt das gar nichts, außerdem hättest du sie wenn dann so gebaut dass sie die ganze Fläche beherrschen und nur in ihrer paint ihre Zeichnung auf einen Teil davon beschränken, wie sollte ein Mausklick automatisch darauf zurückgerechnet werden? maximal könnte eine Komponente anvisiert werden, die für die ganze Fläche aktiv ist es gibts zwei Wege: 1. so wie du ein Panel mit einzelnen paint-Befehlen gestalten, ob durch Unterobjekte oder eine Schleife nur mit draw-Aufruf, macht für Swing keinen Unterschied, in diesem Fall musst du einen Listener auf das Panel an sich setzen und anhand der Mausposition selber ausrechnen, welche Komponente da zuletzt gezeichnet wurde, die Liste durchgehen und die x/y-Positionen vergleichen 2. echte Komponenten auf dem Panel verteilen, die jeweils bei ihren 0,0-Ursprung zeichnen, aber im übergeordneten Panel durch Layout oder absolute Positionierung an die richtigen Orte verteilt sind, in diesem Fall kann jeder Komponente ein Listener zugeordnet werden und Swing schafft korrekte Aufrufe nach Mausklick
__________________
Hansa wird Meister. |
|
|
|
| #3 (permalink) | |
|
Stammbenutzer
Megabyte
Registriert seit: 19.08.2011
Fachbeiträge: 2.204
Blog-Einträge: 3
Abgegebene Danke: 15
Erhielt 298 Danke für 293 Beiträge
|
Was ist eigentlich mit dieser Box Klasse? Die stammt doch aus einem Tutorial wie man eine paintComponent überschreibt oder? Ich würd aber mal sagen, das ist ein perfektes Exemplar von Komposition > Vererbung weil was anderes als ein Label mit Border ist das nicht.
|
|
|
|
| #5 (permalink) | |
|
Stammbenutzer
Megabyte
Registriert seit: 19.08.2011
Fachbeiträge: 2.204
Blog-Einträge: 3
Abgegebene Danke: 15
Erhielt 298 Danke für 293 Beiträge
|
Hehe, für alles gibts Layoutmanager: http://www.java-forum.org/awt-swing-...tml#post918513
|
|
|
|
| #7 (permalink) | |
|
Stammbenutzer
Megabyte
Registriert seit: 19.08.2011
Fachbeiträge: 2.204
Blog-Einträge: 3
Abgegebene Danke: 15
Erhielt 298 Danke für 293 Beiträge
|
Das ist schön für dich, leider ist der Aufwand den ein null Layout braucht gleich groß wie sich seinen eigenen Layoutmanager zu schreiben. Aber warum einfach wenns kompliziert geht...
|
|
|
|
| #8 (permalink) | ||||||||||||||||
|
Benutzer
int
Themenstarter
Registriert seit: 20.08.2012
Fachbeiträge: 54
Abgegebene Danke: 10
Erhielt 0 Danke für 0 Beiträge
|
Danke für all die Antworten. Ich hab jetzt alles ein bisschen umeschrieben und den MouseMotionListener über Bord geworfen
![]() Ich setzte die Boxen einfach direkt (Auswahl über den Index der Rahmen).
|
|||||||||||||||
|
|
|
|||||||||||||||
| #9 (permalink) | |
|
Stammbenutzer
Megabyte
Registriert seit: 19.08.2011
Fachbeiträge: 2.204
Blog-Einträge: 3
Abgegebene Danke: 15
Erhielt 298 Danke für 293 Beiträge
|
Und ich hab dir glaub ich schon x mal geschrieben dass du das WESENTLICH einfacher mit einem normalen JLabel hinkriegst, dem du einen LineBorder verpasst. Das sind dann 2 Zeilen Code anstatt einer eigenen Klasse.
Anstatt überall die PaintComponent funktionen zu überschreiben solltest du dir mal ein Tutorial durchlesen wie man in Swing GUIs baut. Du machst das viel zu umständlich und das ist auch der grund warum dein MouseMotionListener nicht funktioniert. How to Use Labels (The Java™ Tutorials > Creating a GUI With JFC/Swing > Using Swing Components) |
|
|
|
| #10 (permalink) | |
|
Benutzer
int
Themenstarter
Registriert seit: 20.08.2012
Fachbeiträge: 54
Abgegebene Danke: 10
Erhielt 0 Danke für 0 Beiträge
|
Das geht bei mir leider nicht so einfach.
Jede Box muss sich auf ein Gitter setzen lassen. Dafür muss überprüft werden, ob dort schon eine Box liegt. Wenn ja, welche Box liegt dort. Außerdem muss ich einen Titel für jede Box setzen und im Nachhinein einen Inhalt. Da wäre die Verwendung von Jlabels nicht viel einfacher (ich kann den Konstruktor nicht nach meinen Wünschen anpassen, etc.). Würde ich einfach nur ein paar Boxen verschieben wollen, hätte ich nie eine eigene Klasse dafür genutzt. Mein eigentliches Problem war, dass ich nicht wusste, wie ich für Elemente auf meinem bzw. in meinem jeweiligen JPanel den Listener richtig benutze. Über die Variante 2 von SlaterB war das aber kein Problem mehr.
|
|
|
|
|
| Themen-Optionen | Thema durchsuchen |
| Ansicht | |
Ähnliche Themen
|
||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Treffer Abfrage | Cyz44 | Java Basics - Anfänger-Themen | 19 | 17.01.2012 20:33 |
| Zufallsfarben aus Array | Cyz44 | Java Basics - Anfänger-Themen | 11 | 18.12.2011 14:04 |
| Maximale Anzahl von add-Befehlen? | Mister Fabulous | Java Basics - Anfänger-Themen | 11 | 18.03.2011 15:12 |
| Actionlistener für MenuItem | Börger | AWT, Swing, JavaFX & SWT | 19 | 05.01.2008 13:23 |
| Text in JLabel erneuern | EagleEye | AWT, Swing, JavaFX & SWT | 2 | 08.04.2004 16:16 |
| Lesezeichen |
|
|