SWT Drag&Drop

HuberDe

Mitglied
Hallo zusammen,

ich habe mir eine kleine Testapplikation geschrieben, mit der ich ein bissel mit DND rumspielen kann. Jetzt klappt auch alles soweit, ich habe 2 Textfelder und beide jeweils als dragsource und als target deklariert. Nun kann ich also Text hin und herschieben wie ich möchte.
Drage ich jedoch in einem Textfeld den Text und lasse in an anderer Stelle im gleichen Textfeld wieder los, bekomme ich einen Fehler, da im event.data Feld nicht drinsteht. Ich habe bisher erfolglos nach einer Lösung gesucht. Es muss aber doch auch möglich sein, Text innerhalb vom Textfeld mit DND zu verschieben!?

Code:
styledText = new StyledText(sShell, SWT.NONE);
styledText.setText("abc");
styledText.setBounds(new Rectangle(12, 2, 131, 165));
styledText1 = new StyledText(sShell, SWT.NONE);
styledText1.setText("xyz");
styledText1.setBounds(new Rectangle(150, 1, 135, 166));

DragSource dragSource = new DragSource(styledText, DND.DROP_MOVE);
DropTarget target = new DropTarget(styledText1, DND.DROP_MOVE);

Transfer[] types = new Transfer[]
		{ TextTransfer.getInstance() };

dragSource.setTransfer(types);
target.setTransfer(types);

dragSource.addDragListener(new DragSourceListener()
{
	public void dragStart(DragSourceEvent event)
	{
		if (styledText.getText().length() == 0)
		{
			event.doit = false;
		}
	};

	public void dragSetData(DragSourceEvent event)
	{
		if (TextTransfer.getInstance().isSupportedType(event.dataType))
		{
			event.data = styledText.getSelectionText();
			System.out.println("<" + event.data + ">");
		}
	}

	public void dragFinished(DragSourceEvent event)
	{
		if (event.detail == DND.DROP_MOVE)
		{
			styledText.insert("");
		}
	}
});

target.addDropListener(new DropTargetListener()
{
	public void dragEnter(DropTargetEvent event)
	{
	};

	public void dragOver(DropTargetEvent event)
	{
	};

	public void dragLeave(DropTargetEvent event)
	{
	};

	public void dragOperationChanged(DropTargetEvent event)
	{
	};

	public void dropAccept(DropTargetEvent event)
	{
	}

	public void drop(DropTargetEvent event)
	{
		if (event.data == null)
		{ 
			event.detail = DND.DROP_NONE;
			return;
		}
		styledText1.insert((String) event.data);
	}
});

DragSource dragSource1 = new DragSource(styledText1, DND.DROP_MOVE);

Transfer[] types1 = new Transfer[]
		{ TextTransfer.getInstance() };

dragSource1.setTransfer(types1);

dragSource1.addDragListener(new DragSourceListener()
{
	public void dragStart(DragSourceEvent event)
	{
		if (styledText1.getText().length() == 0)
		{
			event.doit = false;
		}
	};

	public void dragSetData(DragSourceEvent event)
	{
		if (TextTransfer.getInstance().isSupportedType(event.dataType))
		{
			event.data = styledText1.getSelectionText();
		}
	}

	public void dragFinished(DragSourceEvent event)
	{
		if (event.detail == DND.DROP_MOVE)
		{
			styledText1.insert("");
		}
	}
});

DropTarget target1 = new DropTarget(styledText, DND.DROP_MOVE);
target1.setTransfer(types);

target1.addDropListener(new DropTargetListener()
{
	public void dragEnter(DropTargetEvent event)
	{
	};

	public void dragOver(DropTargetEvent event)
	{
	};

	public void dragLeave(DropTargetEvent event)
	{
	};

	public void dragOperationChanged(DropTargetEvent event)
	{
	};

	public void dropAccept(DropTargetEvent event)
	{
	}

	public void drop(DropTargetEvent event)
	{
		if (event.data == null)
		{
			event.detail = DND.DROP_NONE;
			return;
		}
		styledText.insert((String) event.data);
	}
});
 
Zurück