DnD bei verwendung von JInternalFrames

vrcat

Mitglied
Hallo ihr,

ich habe eine kleine Anwendung geschrieben darin befinden sich 2 InternalFrames eins Davon enthält eine JList und das andere ein JPanel. Dieses JPanel habe ich als dropTarget deklariert und die die JList als DragSource. Nun tritt aber etwas auf womit ich nix anfangen kann da der MouseListener das ordentlich erkennt. Drag ich nun einen Eintrag aus der JList auf das Panel. Erreiche ich schon das dropTarget obwohl ich mit der Mouse noch auf dem Anderen InternalFrame bin. Also das Panel liegt unter dem Frame und ich habe dort das dropTarget obwohl da ja eigentlich das andere JInternalFrame noch liegt!

dankbar für jede anregung
 
Ich habe den Code nun mal Extrahiert falls meine Ausführungen etwas missverständlich gewesen sein sollten.

Code:
import java.awt.Color;
import java.awt.dnd.DropTarget;
import java.awt.dnd.DropTargetDragEvent;
import java.awt.dnd.DropTargetDropEvent;
import java.awt.dnd.DropTargetEvent;
import java.awt.dnd.DropTargetListener;

import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.JList;
import javax.swing.JPanel;

public class DnD_Demo extends JFrame implements DropTargetListener {
	
	private JDesktopPane	myDesktop = new JDesktopPane();
	private JInternalFrame	myFrame1;
	private JInternalFrame	myFrame2;
	private JList			list;
	private	JPanel			panel;
		
	public DnD_Demo(){
		super("DnD_Demo");
		setSize(800,600);
		getContentPane().add(myDesktop);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		myDesktop.add(myFrame1 = new JInternalFrame("Frame1",true,true,true,true));
		myDesktop.add(myFrame2 = new JInternalFrame("Frame2",false,true,false,false));
		
		myFrame1.getContentPane().add(panel = new JPanel());
		panel.setBackground(Color.WHITE);
		panel.setDropTarget(new DropTarget(panel,this));
		
		String[] data = { "Element1","Element2","Element3","Element4" };
		myFrame2.getContentPane().add(list = new JList(data));
		list.setDragEnabled(true);		
		
		myFrame1.setSize(500,500);
		myFrame2.setSize(150,250);
		
		myFrame1.setVisible(true);
		myFrame2.setVisible(true);
		
		setVisible(true);		
	}

	public void dragEnter(DropTargetDragEvent arg0) {}
	public void dragOver(DropTargetDragEvent arg0) {}
	public void dropActionChanged(DropTargetDragEvent arg0) {}
	public void drop(DropTargetDropEvent arg0) {}
	public void dragExit(DropTargetEvent arg0) {}

	public static void main(String[] args) {
		new DnD_Demo();
	}
}

Führt man nun die Anwendung aus sieht man mein Problem sehr gut in Aktion. Versucht einmal Frame2 auf Frame1 zu legen und dann über die Titelleiste von Frame2 ein Element aus der Liste raus zu ziehen dann seht ihr mein problem.
 
Gibt es die Möglichkeit den DropTargetListener ihrgendwie mit dem MouseListener zu verbinden den die Methode mouseEntered wird zur richtigen zeit aufgerufen nämlich erst dann wenn die Mause wirklich über dem Sichtbaren Panel ist. Nicht wie dragEnter des DropTargetListener die wird nämlich immer aufrgerufen auch wennsich ein element dazwischen befindet wie oben am Beispiel zu sehen.
 
Zurück