Hallo,
ich bin noch ein rechter SWT-Neuling also bitte nicht gleich verzweifeln.
Mein Problem:
Ich möchte in einem Table (der schon einen DropListener hat) TableItems mittels DND sortiern.
Aber mich packt noch der blanke Wahnsinn, weil alles was ich finden ist das Beispiel von java2s.com und das taugt mal gar nix.
Vielleicht hat jamand eine Idee hier mein bisheriger Code:
Danke schon mal im voraus.
bis bald
markus
ich bin noch ein rechter SWT-Neuling also bitte nicht gleich verzweifeln.
Mein Problem:
Ich möchte in einem Table (der schon einen DropListener hat) TableItems mittels DND sortiern.
Aber mich packt noch der blanke Wahnsinn, weil alles was ich finden ist das Beispiel von java2s.com und das taugt mal gar nix.
Vielleicht hat jamand eine Idee hier mein bisheriger Code:
Java:
import java.io.File;
import org.eclipse.swt.SWT;
import org.eclipse.swt.dnd.DND;
import org.eclipse.swt.dnd.DragSource;
import org.eclipse.swt.dnd.DragSourceAdapter;
import org.eclipse.swt.dnd.DragSourceEvent;
import org.eclipse.swt.dnd.DropTarget;
import org.eclipse.swt.dnd.DropTargetAdapter;
import org.eclipse.swt.dnd.DropTargetEvent;
import org.eclipse.swt.dnd.FileTransfer;
import org.eclipse.swt.dnd.TextTransfer;
import org.eclipse.swt.dnd.Transfer;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableItem;
public class neu {
private static final String[] titles = new String[100];
private static final Image[] images = new Image[100];
public static void main(String[] args) {
Display display = new Display();
Shell shell = new Shell(display);
shell.setText("Weinbastion");
shell.setLayout(new FillLayout());
final Table source_table = new Table(shell, SWT.MULTI );
source_table.setLinesVisible(true);
for (int i = 0; i < 4; i++) {
titles[i]= "abc " + i ;
}
images[0] = new Image(display, ".\\icons\\add.png");
images[1] = new Image(display, ".\\icons\\basket.png");
images[2] = new Image(display, ".\\icons\\book.png");
images[3] = new Image(display, ".\\icons\\ipod.png");
final Table table = new Table(shell, SWT.MULTI );
table.setRedraw(true);
table.setLinesVisible(true);
for (int i = 0; i < 4; i++) {
TableItem item = new TableItem(table, SWT.NONE);
if (i % 2 == 0)
item.setText("Drop a fi");
item.setImage(images[i]);
if (i % 2 == 1)
item.setText("Drop text");
item.setImage(images[i]);
}
for (int i = 0; i < 4; i++) {
TableItem item = new TableItem(source_table, SWT.NONE);
if (i % 2 == 0)
item.setText("S1");
item.setData("id", ""+ i);
item.setImage(images[i]);
if (i % 2 == 1)
item.setText("S2");
item.setData("id", ""+ i);
item.setImage(images[i]);
}
DragSource dragSource = new DragSource(source_table, DND.DROP_MOVE);
dragSource
.setTransfer(new Transfer[] { TextTransfer.getInstance(), FileTransfer.getInstance() });
dragSource.addDragListener(new DragSourceAdapter() {
public void dragSetData(DragSourceEvent event) {
if (FileTransfer.getInstance().isSupportedType(event.dataType)) {
File file = new File("temp");
event.data = new String[] { file.getAbsolutePath() };
}
if (TextTransfer.getInstance().isSupportedType(event.dataType)) {
TableItem[] sel = source_table.getSelection();
String transdata = "";
for(int i = 0; i < sel.length; i++ ){
transdata += sel[i].getData("id") + "|" ;
}
event.data = transdata;
}
}
});
DropTarget dropTarget = new DropTarget(table, DND.DROP_MOVE | DND.DROP_DEFAULT);
dropTarget
.setTransfer(new Transfer[] { TextTransfer.getInstance(), FileTransfer.getInstance() });
dropTarget.addDropListener(new DropTargetAdapter() {
FileTransfer fileTransfer = FileTransfer.getInstance();
TextTransfer textTransfer = TextTransfer.getInstance();
public void dragEnter(DropTargetEvent event) {
if (event.detail == DND.DROP_DEFAULT)
event.detail = DND.DROP_MOVE;
}
public void dragOperationChanged(DropTargetEvent event) {
if (event.detail == DND.DROP_DEFAULT)
event.detail = DND.DROP_MOVE;
}
public void dragOver(DropTargetEvent event) {
event.detail = DND.DROP_NONE;
TableItem item = (TableItem) event.item;
if (item == null)
return;
int itemIndex = table.indexOf(item);
int index = 0;
while (index < event.dataTypes.length) {
if (textTransfer.isSupportedType(event.dataTypes[index]))
break;
index++;
}
if (index < event.dataTypes.length) {
event.currentDataType = event.dataTypes[index];
event.detail = DND.DROP_MOVE;
return;
}
}
public void drop(DropTargetEvent event) {
TableItem item = (TableItem) event.item;
if (item == null) {
event.detail = DND.DROP_NONE;
return;
}
if (fileTransfer.isSupportedType(event.currentDataType)) {
String[] files = (String[]) event.data;
if (files != null && files.length > 0) {
item.setText(files[0]);
}
}
if (textTransfer.isSupportedType(event.currentDataType)) {
String text = (String) event.data;
if (text != null) {
Integer[] k = new Integer[100];
String[] p = text.split("|");
for (int i = 0; i < p.length; i++){
String o = p[i].replace("|", "");
if(!o.equals("")){
int r = Integer.parseInt(o);
TableItem itemD = new TableItem(table, SWT.NONE);
itemD.setText(titles[r]);
itemD.setImage(images[r]);
}
}
}
}
}
});
shell.setSize(300, 150);
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
}
Danke schon mal im voraus.
bis bald
markus
Zuletzt bearbeitet: