Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Nun wird es haarig. Ich habe folgenden Aufbau einer GUI:
Da ist also das S_Panel in das ich per add(Component c) die Panels M und D eingefügt habe. Früh, Mittel und Spät sind Componenten (zur Zeit auch Panels) die ich per add in das M-Panel eingefügt habe. Diese Componenten möchte ich gerne per DragDrop in den Panels M und D hin und her schieben können. Nun bin ich so weit, dass ich zB. Früh anklicken und ziehen kann. Ich lösche es dann einfach aus dem M-Panel und adde es zum S_Panel. Dort kann ich es dann hin und her ziehen. Nur leider habe ich nun das Problem, dass es natürlich hinter den Panels S und D liegt und deswegen beim Ziehen dahinter verschwindet.
Jetzt suche ich eine Funktion die dafür sorgt, dass die Componente "an der Maus" immer im Vordergrund bleibt. Ich habe schon an ein durchsichtiges Panel gedacht, das ich ganz nach oben lege und dann die Componente "an der Maus" dort adde. Aber ich bekomme iwie das Panel nicht durchsichtig. Drag'n'Drop, geht das mit ganzen Componenten oder nur mit dem Inhalt dieser? Jetzt mache ich mich mal auf die Suche nach einer Funktion die anzeigt welche Componenten vor einer Componente liegen. Aber vielleicht gibt es da ja eine einfach Lösung, die ich einfach nur nicht finde.
Moves the specified component to the specified z-order index in the container. The z-order determines the order that components are painted; the component with the highest z-order paints first and the component with the lowest z-order paints last. Where components overlap, the component with the lower z-order paints over the component with the higher z-order.
Mit der z-order habe ich immer einen Fehler mit illegaler Position bekommen.
Aber kurz nach dem ich das gepostet habe bin ich über das JLayeredPane() gestolpert und habe jetzt damit gelöst, dass die Component über allem gezeichnet wird. Nun muss ich nur noch schauen über welcher Component die Maustaste losgelassen wurde damit ich weiss über welchem Panel ich die Component "abgeworfen" habe.
Ja. Wobei es mich nicht wundert, dass es Dich wundert Dazu muss man meine Geschicht kennen. Ich habe 1987 mal in Basic angefangen zu Programieren. Damals gab es ein paar Variablentypen und ein paar Hände voll an Befehlen. Da hatte man das Problem sich alles selber zusammenprogrammieren zu müssen. Dann habe ich sehr lange nichts gemacht. 2010 habe ich dann mal in C# ein umfangreicheres Spiel angefangen. Das musste ich dann aber leider, aus zeitmangel, abbrechen. Nun bin ich eben dabei Java zu lernen und habe oft noch den Ansatz von Früher alles iwie selber zu programmieren. Aber nicht weil ich das gut finde sondern eher weil ich nicht weiß, dass es dafür schon eine Bibliotheken etc. gibt. Das stelle ich dann immer später fest. Ich habe das Gefühl, dass man mehr auf der Suche danach ist, was es schon gibt, als man dann nachher wirklich programmiert.
Über den Drag & Drop Support bin ich dann auch gestolpert und fange nun an diesen umzusetzen. Leider habe ich viel zu wenig Zeit zum Programmieren.
Hab auch mit Basic angefangen (Frael BASIC), 1983. Das ist keine Ausrede!!!
Fang bei diesem Projekt vor allem an, gedanklich die angezeigte Darstellung des Fensters und das Fenster selbst (Inhalt mit Funktionalitäten) zu trennen. Klar kann man D&D auch manuell umsetzen, aber dann könntest du z.B. das zu ziehende Element als Mauszeiger nutzen oder eben mit Grafiklayern arbeiten. Das Fenster selbst wird ausschließlich nach erfolgreichem Beenden des Vorgangs geändert.
Der D&D Support wirkt anfangs etwas sehr komisch formuliert, da gibt's so was wie "Flavours". Die Programmierer hatten wohl Sinn für Humor.
Es ist am Ende aber weniger kompliziert als man glaubt, das Ding kann halt nur so viel mehr als man braucht, dass man erst mal filtern muss.