Guten Morgen.
Ich habe ein JPanel in dem ich dynamisch Componenten hin und her schieben will...
Joa, mit dem Null-Layout klappt das soweit auch super einfach, mit nem MouseListener und nem einfachen setLocation()
Nun wollte ich das aber auch auf andere Layouts übertragen.
Meine Krieterien:
1. Es sollte beim verschieben angezeigt werden was verschoben wird (is ja eigentlich bekannt)
2. Es sollte während des Drags (Maus gedrückt halten [auch bekannt]) die nächste verankerung angezeigt werden wo die Komponente hinverschoben wird, sollte man nun loslassen.
Meine Lösungen kollidieren da allerdings mit diesen beiden Kriterien.
1. Lösungsidee:
Verschiebungsvorschau: Komponente mit setLocation() verschieben
Verankerungsanzeige: Temproräres sehr kurzes JPanel mit dicker grüner Border
Problem: jPanel. validate() lässt die verschobene Komponente an der Maus zucken und flackern, ohne validate() wird aber die Verankerungsvorschau nicht bei jeder Mausbewegung aktualisiert.
2. Lösungsidee:
Verschiebungsvorschau: Komponente mit getGraphics() und customCorsor als Vorschau anbieten
Verankerungsanzeige: Temproräres sehr kurzes JPanel mit dicker grüner Border
Problem: Es sieht einfach nur lächerlich aus, und verursacht Augenkrebs -> verständlich bei 32x32 Pixel
3. Lösungsidee:
Verschiebungsvorschau: Komponente auf GlassPane verschieben
Verankerungsanzeige: das selbe wie schon zuvor
Problem: Komponente wird im GlassPane garnicht erst angezeigt
4. Lösungsidee:
Verschiebungsvorschau: Komponente in ein Window packen und mitverschieben
Verankerungsanzeige: wie auch zuvor
Problem: wie im Threadtitel, das Window flackert enorm, selbst wenn ich die Maus nicht bewege
ich schätze das Liegt am validate des Panels.
Hat irgendjemand noch andere Ideen?
Ich hatte auch ganz kurz probiert die Verankerungsanzeige nicht mit einer Border, sondern über drawLine zu realisieren, doch das hat in der Dragbewegung ebenso geflackert.
Ich hoffe keiner will den Code sehn, denn das ist pures verzweiflungsschreiben mit wilden Ideen gewesen. Ich kann ja schonmal anfangen aufzuräumen!
Ich habe ein JPanel in dem ich dynamisch Componenten hin und her schieben will...
Joa, mit dem Null-Layout klappt das soweit auch super einfach, mit nem MouseListener und nem einfachen setLocation()
Nun wollte ich das aber auch auf andere Layouts übertragen.
Meine Krieterien:
1. Es sollte beim verschieben angezeigt werden was verschoben wird (is ja eigentlich bekannt)
2. Es sollte während des Drags (Maus gedrückt halten [auch bekannt]) die nächste verankerung angezeigt werden wo die Komponente hinverschoben wird, sollte man nun loslassen.
Meine Lösungen kollidieren da allerdings mit diesen beiden Kriterien.
1. Lösungsidee:
Verschiebungsvorschau: Komponente mit setLocation() verschieben
Verankerungsanzeige: Temproräres sehr kurzes JPanel mit dicker grüner Border
Problem: jPanel. validate() lässt die verschobene Komponente an der Maus zucken und flackern, ohne validate() wird aber die Verankerungsvorschau nicht bei jeder Mausbewegung aktualisiert.
2. Lösungsidee:
Verschiebungsvorschau: Komponente mit getGraphics() und customCorsor als Vorschau anbieten
Verankerungsanzeige: Temproräres sehr kurzes JPanel mit dicker grüner Border
Problem: Es sieht einfach nur lächerlich aus, und verursacht Augenkrebs -> verständlich bei 32x32 Pixel
3. Lösungsidee:
Verschiebungsvorschau: Komponente auf GlassPane verschieben
Verankerungsanzeige: das selbe wie schon zuvor
Problem: Komponente wird im GlassPane garnicht erst angezeigt
4. Lösungsidee:
Verschiebungsvorschau: Komponente in ein Window packen und mitverschieben
Verankerungsanzeige: wie auch zuvor
Problem: wie im Threadtitel, das Window flackert enorm, selbst wenn ich die Maus nicht bewege
ich schätze das Liegt am validate des Panels.
Hat irgendjemand noch andere Ideen?
Ich hatte auch ganz kurz probiert die Verankerungsanzeige nicht mit einer Border, sondern über drawLine zu realisieren, doch das hat in der Dragbewegung ebenso geflackert.
Ich hoffe keiner will den Code sehn, denn das ist pures verzweiflungsschreiben mit wilden Ideen gewesen. Ich kann ja schonmal anfangen aufzuräumen!