📄 dndexample.java
字号:
b = new Button(parent, SWT.CHECK); b.setText("File Transfer"); b.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { Button b = (Button)e.widget; if (b.getSelection()) { addDropTransfer(FileTransfer.getInstance()); } else { removeDropTransfer(FileTransfer.getInstance()); } } });}private void createDropWidget(Composite parent) { parent.setLayout(new FormLayout()); Combo combo = new Combo(parent, SWT.READ_ONLY); combo.setItems(new String[] {"Toggle Button", "Radio Button", "Checkbox", "Canvas", "Label", "List", "Table", "Tree", "Text"}); combo.select(LABEL); dropControlType = combo.getSelectionIndex(); dropControl = createWidget(dropControlType, parent, "Drop Target"); combo.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { Object data = dropControl.getLayoutData(); Composite parent = dropControl.getParent(); dropControl.dispose(); Combo c = (Combo)e.widget; dropControlType = c.getSelectionIndex(); dropControl = createWidget(dropControlType, parent, "Drop Target"); dropControl.setLayoutData(data); if (dropEnabled) createDropTarget(); parent.layout(); } }); Button b = new Button(parent, SWT.CHECK); b.setText("DropTarget"); b.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { Button b = (Button)e.widget; dropEnabled = b.getSelection(); if (dropEnabled) { createDropTarget(); } else { if (dropTarget != null){ dropTarget.dispose(); } dropTarget = null; } } }); FormData data = new FormData(); data.top = new FormAttachment(0, 10); data.bottom = new FormAttachment(combo, -10); data.left = new FormAttachment(0, 10); data.right = new FormAttachment(100, -10); dropControl.setLayoutData(data); data = new FormData(); data.bottom = new FormAttachment(b, -10); data.left = new FormAttachment(0, 10); combo.setLayoutData(data); data = new FormData(); data.bottom = new FormAttachment(100, -10); data.left = new FormAttachment(0, 10); b.setLayoutData(data); }private Control createWidget(int type, Composite parent, String prefix){ switch (type) { case BUTTON_CHECK: { Button button = new Button(parent, SWT.CHECK); button.setText(prefix+" Check box"); return button; } case BUTTON_TOGGLE: { Button button = new Button(parent, SWT.TOGGLE); button.setText(prefix+" Toggle button"); return button; } case BUTTON_RADIO: { Button button = new Button(parent, SWT.RADIO); button.setText(prefix+" Radio button"); return button; } case TABLE: { Table table = new Table(parent, SWT.BORDER | SWT.MULTI); TableColumn column1 = new TableColumn(table, SWT.NONE); TableColumn column2 = new TableColumn(table, SWT.NONE); for (int i = 0; i < 10; i++) { TableItem item = new TableItem(table, SWT.NONE); item.setText(0, prefix+" name " + i); item.setText(1, prefix+" value " + i); } column1.pack(); column2.pack(); return table; } case TEXT: { Text text = new Text(parent, SWT.BORDER | SWT.MULTI | SWT.V_SCROLL | SWT.H_SCROLL); text.setText(prefix+" Text"); return text; } case TREE: { Tree tree = new Tree(parent, SWT.BORDER); for (int i = 0; i < 3; i++) { TreeItem item = new TreeItem(tree, SWT.NONE); item.setText(prefix+" item " + i); for (int j = 0; j < 3; j++) { TreeItem subItem = new TreeItem(item, SWT.NONE); subItem.setText(prefix+" item " + j); for (int k = 0; k < 3; k++) { TreeItem subsubItem = new TreeItem(subItem, SWT.NONE); subsubItem.setText(prefix+" item " + k); } } } return tree; } case CANVAS: { Canvas canvas = new Canvas(parent, SWT.BORDER); canvas.setData("STRINGS", new String[] {prefix+" Canvas widget"}); canvas.addPaintListener(new PaintListener() { public void paintControl(PaintEvent e) { Canvas c = (Canvas)e.widget; Image image = (Image)c.getData("IMAGE"); if (image != null) { e.gc.drawImage(image, 5, 5); } else { String[] strings = (String[])c.getData("STRINGS"); if (strings != null) { FontMetrics metrics = e.gc.getFontMetrics(); int height = metrics.getHeight(); int y = 5; for(int i = 0; i < strings.length; i++) { e.gc.drawString(strings[i], 5, y); y += height + 5; } } } } }); return canvas; } case LABEL: { Label label = new Label(parent, SWT.BORDER); label.setText(prefix+" Label"); return label; } case LIST: { List list = new List(parent, SWT.BORDER); list.setItems(new String[] {prefix+" Item a", prefix+" Item b", prefix+" Item c", prefix+" Item d"}); return list; } default: throw new SWTError(SWT.ERROR_NOT_IMPLEMENTED); }}private void open() { Display display = new Display(); Shell shell = new Shell(display); shell.setText("Drag and Drop Example"); shell.setLayout(new FormLayout()); Label dragLabel = new Label(shell, SWT.LEFT); dragLabel.setText("Drag Source:"); Group dragWidgetGroup = new Group(shell, SWT.NONE); dragWidgetGroup.setText("Widget"); createDragWidget(dragWidgetGroup); Group dragOperationsGroup = new Group(shell, SWT.NONE); dragOperationsGroup.setText("Allowed Operation(s):"); createDragOperations(dragOperationsGroup); Group dragTypesGroup = new Group(shell, SWT.NONE); dragTypesGroup.setText("Transfer Type(s):"); createDragTypes(dragTypesGroup); dragConsole = new Text(shell, SWT.READ_ONLY | SWT.BORDER |SWT.V_SCROLL | SWT.H_SCROLL | SWT.MULTI); Menu menu = new Menu (shell, SWT.POP_UP); MenuItem item = new MenuItem (menu, SWT.PUSH); item.setText ("Clear"); item.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { dragConsole.setText(""); } }); item = new MenuItem (menu, SWT.CHECK); item.setText ("Show Event detail"); item.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { MenuItem item = (MenuItem)e.widget; dragEventDetail = item.getSelection(); } }); dragConsole.setMenu(menu); Label dropLabel = new Label(shell, SWT.LEFT); dropLabel.setText("Drop Target:"); Group dropWidgetGroup = new Group(shell, SWT.NONE); dropWidgetGroup.setText("Widget"); createDropWidget(dropWidgetGroup); Group dropOperationsGroup = new Group(shell, SWT.NONE); dropOperationsGroup.setText("Allowed Operation(s):"); createDropOperations(dropOperationsGroup); Group dropTypesGroup = new Group(shell, SWT.NONE); dropTypesGroup.setText("Transfer Type(s):"); createDropTypes(dropTypesGroup); dropConsole = new Text(shell, SWT.READ_ONLY | SWT.BORDER |SWT.V_SCROLL | SWT.H_SCROLL | SWT.MULTI); menu = new Menu (shell, SWT.POP_UP); item = new MenuItem (menu, SWT.PUSH); item.setText ("Clear"); item.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { dropConsole.setText(""); } }); item = new MenuItem (menu, SWT.CHECK); item.setText ("Show Event detail"); item.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { MenuItem item = (MenuItem)e.widget; dropEventDetail = item.getSelection(); } }); dropConsole.setMenu(menu); int height = 300; FormData data = new FormData(); data.top = new FormAttachment(0, 10); data.left = new FormAttachment(0, 10); dragLabel.setLayoutData(data); data = new FormData(); data.top = new FormAttachment(dragLabel, 10); data.left = new FormAttachment(0, 10); data.right = new FormAttachment(50, -10); data.height = height; dragWidgetGroup.setLayoutData(data); data = new FormData(); data.top = new FormAttachment(dragWidgetGroup, 10); data.left = new FormAttachment(0, 10); data.right = new FormAttachment(50, -10); //data.bottom = new FormAttachment(dropTypesGroup, -10); dragOperationsGroup.setLayoutData(data); data = new FormData(); data.top = new FormAttachment(dragOperationsGroup, 10); data.left = new FormAttachment(0, 10); data.right = new FormAttachment(50, -10); dragTypesGroup.setLayoutData(data); data = new FormData(); data.top = new FormAttachment(dragTypesGroup, 10); data.bottom = new FormAttachment(100, -10); data.left = new FormAttachment(0, 10); data.right = new FormAttachment(50, -10); dragConsole.setLayoutData(data); data = new FormData(); data.top = new FormAttachment(0, 10); data.left = new FormAttachment(dragTypesGroup, 10); dropLabel.setLayoutData(data); data = new FormData(); data.top = new FormAttachment(dropLabel, 10); data.left = new FormAttachment(dragTypesGroup, 10); data.right = new FormAttachment(100, -10); data.height = height; dropWidgetGroup.setLayoutData(data); data = new FormData(); data.top = new FormAttachment(dropWidgetGroup, 10); data.left = new FormAttachment(dragTypesGroup, 10); data.right = new FormAttachment(100, -10); dropOperationsGroup.setLayoutData(data); data = new FormData(); data.top = new FormAttachment(dropOperationsGroup, 10); data.left = new FormAttachment(dragTypesGroup, 10); data.right = new FormAttachment(100, -10); //data.bottom = new FormAttachment(dragConsole, -10); dropTypesGroup.setLayoutData(data); data = new FormData(); data.top = new FormAttachment(dropTypesGroup, 10); data.bottom = new FormAttachment(100, -10); data.left = new FormAttachment(50, 10); data.right = new FormAttachment(100, -10); dropConsole.setLayoutData(data); shell.setSize(1000, 900); shell.open(); while (!shell.isDisposed()) { if (!display.readAndDispatch()) display.sleep(); } }private void printEvent(DragSourceEvent e) { if (!dragEventDetail) return; StringBuffer sb = new StringBuffer(); sb.append("widget: "); sb.append(e.widget); sb.append(", time: "); sb.append(e.time); sb.append(", operation: "); sb.append(e.detail); sb.append(", type: "); sb.append(e.dataType != null ? e.dataType.type : 0); sb.append(", doit: "); sb.append(e.doit); sb.append(", data: "); sb.append(e.data); sb.append("\n"); dragConsole.append(sb.toString());}private void printEvent(DropTargetEvent e) { if (!dropEventDetail) return; StringBuffer sb = new StringBuffer(); sb.append("widget; "); sb.append(e.widget); sb.append(", time: "); sb.append(e.time); sb.append(", x: "); sb.append(e.x); sb.append(", y: "); sb.append(e.y); sb.append(", item: "); sb.append(e.item); sb.append(", operations: "); sb.append(e.operations); sb.append(", operation: "); sb.append(e.detail); sb.append(", feedback: "); sb.append(e.feedback); if (e.dataTypes != null) { for (int i = 0; i < e.dataTypes.length; i++) { sb.append(", dataType "); sb.append(i); sb.append(": "); sb.append(e.dataTypes[i].type); } } else { sb.append(", dataTypes: none"); } sb.append(", currentDataType: "); sb.append(e.currentDataType); sb.append(", data: "); sb.append(e.data); sb.append("\n"); dropConsole.append(sb.toString());}private void removeDragTransfer(Transfer transfer){ if (dragTypes.length == 1) { dragTypes = new Transfer[0]; } else { int index = -1; for(int i = 0; i < dragTypes.length; i++) { if (dragTypes[i] == transfer) { index = i; break; } } if (index == -1) return; Transfer[] newTypes = new Transfer[dragTypes.length - 1]; System.arraycopy(dragTypes, 0, newTypes, 0, index); System.arraycopy(dragTypes, index + 1, newTypes, index, dragTypes.length - index - 1); dragTypes = newTypes; } if (dragSource != null) { dragSource.setTransfer(dragTypes); }}private void removeDropTransfer(Transfer transfer){ if (dropTypes.length == 1) { dropTypes = new Transfer[0]; } else { int index = -1; for(int i = 0; i < dropTypes.length; i++) { if (dropTypes[i] == transfer) { index = i; break; } } if (index == -1) return; Transfer[] newTypes = new Transfer[dropTypes.length - 1]; System.arraycopy(dropTypes, 0, newTypes, 0, index); System.arraycopy(dropTypes, index + 1, newTypes, index, dropTypes.length - index - 1); dropTypes = newTypes; } if (dropTarget != null) { dropTarget.setTransfer(dropTypes); }}}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -