standard widget toolkit

56
Mirosław Ochodek Mirosław Ochodek [email protected] [email protected] Sponsorzy: Sponsorzy: Standard Widget Standard Widget Toolkit Toolkit Jak budować interfejs Jak budować interfejs użytkownika? użytkownika? ECESIS Eclipse Community Education Project An Eclipse Technology Research Subproject

Upload: wallace-sloan

Post on 02-Jan-2016

55 views

Category:

Documents


2 download

DESCRIPTION

Standard Widget Toolkit. ECESIS Eclipse Community Education Project An Eclipse Technology Research Subproject. Jak budować interfejs użytkownika?. Topics. SWT czy Swing? Terminologia Prosty program w SWT Wzorzec Observer Widgets Menus Layouts Graphics Drag and Drop. Swing. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Standard Widget Toolkit

Mirosław OchodekMirosław [email protected]@put.poznan.pl

Sponsorzy:Sponsorzy:

Standard Widget ToolkitStandard Widget ToolkitJak budować interfejs użytkownika?Jak budować interfejs użytkownika?

ECESIS Eclipse Community Education Project

An Eclipse Technology Research Subproject

Page 2: Standard Widget Toolkit

UCWorkbench Team Eclipse Summer School (2)

TopicsTopics▪SWT czy Swing?

▪Terminologia

▪Prosty program w SWT

▪Wzorzec Observer

▪Widgets

▪Menus

▪Layouts

▪Graphics

▪Drag and Drop

Page 3: Standard Widget Toolkit

UCWorkbench Team Eclipse Summer School (3)

Operating system

sun.awt

SwingSwing

▪Biblioteka GUI w javie (javax.swing.*)

▪Była mało wydajna (poprawiono w Java 1.4)

▪Napisana w Javie (korzysta AWT – Java / C)

▪Niezależna platformowo (daleko od OS)

java.awt

Swing

Page 4: Standard Widget Toolkit

UCWorkbench Team Eclipse Summer School (4)

Operating system

Windowing system

JNI

SWTSWT▪Zależna od platformy (dostępne implementacje dla

większości popularnych platform)

▪Wykorzystuje komponenty OS (JNI) – dispose!

▪Tylko kontrolki nie obsługiwane przez dany system zostały stworzone

▪Posiada wsparcie w postaci JFace

SWT

JFace

Page 5: Standard Widget Toolkit

UCWorkbench Team Eclipse Summer School (5)

Operating system

Windowing system

JNI

SWT vs. SwingSWT vs. Swing▪Zależny od platformy

▪Wydajny (Komponenty z systemu operacyjnego)

▪Wykorzystuje wzorzec observer

▪Menadżery rozmieszczenia

SWT

JFace

Operating system

sun.awt

java.awt

Swing

▪Niezależny od platformy

▪Niewydajny

▪ Look and Feel

▪Wykorzystuje wzorze observer

▪Menadżery rozmieszczenia

Page 6: Standard Widget Toolkit

UCWorkbench Team Eclipse Summer School (6)

org.eclipse.swt.SWTorg.eclipse.swt.SWT

▪Klasa z polami static public

▪Dostarcza stałe dla SWT

▪Bez instancji (eg. SWT.BOLD)

▪Stałe w SWT można sumować bitowo (eg. SWT.BOLD | SWT.ITALIC)

SWT

Page 7: Standard Widget Toolkit

UCWorkbench Team Eclipse Summer School (7)

TerminyTerminy▪Display

• Połączenie między SWT i systemem GUI danej platformy

• Wykorzystywana do zarządzania pętlą komunikatów i wątkami UI

▪Shell

• Okno zarządzane przez Window menadżer danego OS

▪Composite

• Widget, który może zawierać inne widgety

▪ Layout manager

• Klasa odpowiedzialna za zarządzanie rozkładem

Page 8: Standard Widget Toolkit

UCWorkbench Team Eclipse Summer School (8)

Jak uruchomić program w SWT?Jak uruchomić program w SWT?

▪ classpath SWT.jar library (eclipse/plugins)

▪ Add to the JVM arguments

• Djava.library.path=<katalog z dll>

• albo wybrać Run as ... SWT Application

▪ JFace wymaga bibliotek:

• org.eclipse.jface_x.jar, org.eclipse.core.commands_x.jar, org.eclipse.equinox.common_x.jar, (org.eclipse.osgi)

▪ Podczas pisania pluginów nie trzeba się tym martwić!

Page 9: Standard Widget Toolkit

UCWorkbench Team Eclipse Summer School (9)

Basic SWT applicationBasic SWT application

public static void main(String[] args) {

Display display = new Display();

Shell shell = new Shell(display);

Label label = new Label(shell, SWT.CENTER);

label.setText(”Witaj świecie");

label.pack();

shell.pack();

shell.open();

while (!shell.isDisposed ()) {

if (!display.readAndDispatch ())

display.sleep ();

}

display.dispose ();

}

Page 10: Standard Widget Toolkit

UCWorkbench Team Eclipse Summer School (10)

Wzorzec ObserverWzorzec Observer

Lalaaaalalaa!

Dziękujemy.Proszę nie

dzwonić, to my zadzwonimy…

Następny proszę!

Page 11: Standard Widget Toolkit

UCWorkbench Team Eclipse Summer School (11)

Wzorzec ObserverWzorzec Observer

Page 12: Standard Widget Toolkit

UCWorkbench Team Eclipse Summer School (12)

SWT&ObserverSWT&Observer

Widget

Control

Scrollable

Composite

Button

Object

public void addListener (int eventType, Listener listener)

public interface Listener { void handleEvent (Event event);}

public void addSelectionListener (SelectionListener listener)

public interface SelectionListener extends SWTEventListener { public void widgetSelected(SelectionEvent e); public void widgetDefaultSelected(SelectionEvent e);}

Page 13: Standard Widget Toolkit

UCWorkbench Team Eclipse Summer School (13)

Composite Pattern IdeaComposite Pattern Idea

Page 14: Standard Widget Toolkit

UCWorkbench Team Eclipse Summer School (14)

Wzorzec CompositeWzorzec Composite

Page 15: Standard Widget Toolkit

UCWorkbench Team Eclipse Summer School (15)

SWT&CompositeSWT&Composite

Widget

Control

Scrollable

Composite

Button

Object

public Control (Composite parent, int style)

Button button = new Button(shell,SWT.PUSH);*

Page 16: Standard Widget Toolkit

UCWorkbench Team Eclipse Summer School (16)

WidgetsWidgets

Page 17: Standard Widget Toolkit

UCWorkbench Team Eclipse Summer School (17)

LabelLabel

Label label = new Label(shell, SWT.CENTER);label.setText("Hello World");

label.setForeground(Display.getDefault().getSystemColor(SWT.COLOR_BLUE));

Page 18: Standard Widget Toolkit

UCWorkbench Team Eclipse Summer School (18)

ButtonButtonButton button = new Button(shell, SWT.PUSH);button.setText("Click me!");

Button button = new Button(shell, SWT.CHECK);button.setText("Click me!");

Button button = new Button(shell, SWT.ARROW|SWT.RIGHT);

Button button = new Button(shell, SWT.RADIO);button.setText("Click me!");

Button button = new Button(shell, SWT.TOGGLE);button.setText("Click me!");

Page 19: Standard Widget Toolkit

UCWorkbench Team Eclipse Summer School (19)

Button UsageButton Usage

Button button = new Button(shell, SWT.PUSH);button.setText("Click me!");button.addSelectionListener(new SelectionListener(){ public void widgetDefaultSelected(SelectionEvent e) { widgetSelected(e); } public void widgetSelected(SelectionEvent e) { System.out.println(e.getSource().toString()+" was clicked!"); }});

Button {Click me!} was clicked!

Page 20: Standard Widget Toolkit

UCWorkbench Team Eclipse Summer School (20)

TextText

Text text = new Text(shell, SWT.SINGLE | SWT.BORDER);text.setText("Text");

Text text = new Text(shell, SWT.MULTI | SWT.BORDER | SWT.VERTICAL);text.setText("Text\nText");

Text text = new Text(shell, SWT.PASSWORD | SWT.SINGLE | SWT.BORDER);text.setText("Text");

Page 21: Standard Widget Toolkit

UCWorkbench Team Eclipse Summer School (21)

Text UsageText UsageText text = new Text(shell, SWT.SINGLE | SWT.BORDER);text.addVerifyListener(new VerifyListener(){ public void verifyText(VerifyEvent e) { if (e.text.matches("[0-9]*")){ e.doit = true; }else{ e.doit = false; } }});text.addModifyListener(new ModifyListener(){ public void modifyText(ModifyEvent e) { System.out.println(((Text)(e.widget)).getText()+

" - text after modification"); }});

2 - text after modification23 - text after modification232 - text after modification2321 - text after modification23212 - text after modification232123 - text after modification2321231 - text after modification

Page 22: Standard Widget Toolkit

UCWorkbench Team Eclipse Summer School (22)

ProgressBarProgressBar

ProgressBar pb = new ProgressBar(shell, SWT.SMOOTH);pb.setMinimum(0);pb.setMaximum(100);pb.setSelection(34);

ProgressBar pb = new ProgressBar(shell, SWT.SMOOTH | SWT.INDETERMINATE);pb.setMinimum(0);pb.setMaximum(100);

Page 23: Standard Widget Toolkit

UCWorkbench Team Eclipse Summer School (23)

Slider and ScaleSlider and Scale

Slider slider = new Slider(shell, SWT.HORIZONTAL);slider.setMinimum(0);slider.setMaximum(100);slider.setSelection(30);

Scale scale = new Scale(shell, SWT.HORIZONTAL);scale.setMinimum(0);scale.setMaximum(100);scale.setSelection(30);

Page 24: Standard Widget Toolkit

UCWorkbench Team Eclipse Summer School (24)

ListListList list = new List(shell, SWT.MULTI);list.add("First");list.add("Second");list.add("Third");list.addSelectionListener(new SelectionListener(){ public void widgetDefaultSelected(SelectionEvent e) { System.out.println("Default action - double click(Windows)"); widgetSelected(e); } public void widgetSelected(SelectionEvent e) { System.out.println("Selected items:"); String[] selection = ((List)(e.widget)).getSelection(); for (int i = 0; i < selection.length; i++) { System.out.println(" - "+selection[i]+""); } }});

Page 25: Standard Widget Toolkit

UCWorkbench Team Eclipse Summer School (25)

ComboCombo

Combo combo = new Combo(shell, SWT.DROP_DOWN);combo.add("First");combo.add("Second");combo.add("Third");combo.addSelectionListener(new SelectionListener(){ public void widgetDefaultSelected(SelectionEvent e) { System.out.println("Default action - Enter (Windows)"); widgetSelected(e); } public void widgetSelected(SelectionEvent e) { System.out.println("Selected "+((Combo)(e.widget)).getText()); }});

Page 26: Standard Widget Toolkit

UCWorkbench Team Eclipse Summer School (26)

TreeTreeTree tree = new Tree(shell, SWT.SINGLE);TreeItem node1 = new TreeItem(tree, SWT.NULL);node1.setText("1. Main node");TreeItem node11 = new TreeItem(node1, SWT.NULL);node11.setText("1.1 First sub node");TreeItem node12 = new TreeItem(node1, SWT.NULL);node12.setText("1.2 First sub node");tree.addTreeListener(new TreeListener(){ public void treeCollapsed(TreeEvent e) { System.out.println(((TreeItem)e.item).getText()+ " was collapsed");} public void treeExpanded(TreeEvent e) { System.out.println(((TreeItem)e.item).getText()+ " was expanded"); }});

Page 27: Standard Widget Toolkit

UCWorkbench Team Eclipse Summer School (27)

MenuMenuMenu menuBar = new Menu(shell, SWT.BAR);shell.setMenuBar(menuBar);

MenuItem fileTitle = new MenuItem(menuBar, SWT.CASCADE);fileTitle.setText("File");Menu fileMenu = new Menu(shell, SWT.DROP_DOWN);fileTitle.setMenu(fileMenu);

MenuItem exitItem = new MenuItem(fileMenu, SWT.PUSH);exitItem.setText("Exit");exitItem.addSelectionListener(new SelectionListener(){ public void widgetDefaultSelected(SelectionEvent e) { widgetSelected(e); } public void widgetSelected(SelectionEvent e) { ((MenuItem)(e.widget)).getParent().getShell().close(); }});

SWT.BARSWT.DROP_DOWNSWT.POP_UP

SWT.CHECKSWT.CASCADESWT.PUSHSWT.RADIO

SWT.SEPARATOR

setManuBar – SWT.BARsetMenu – SWT.POP_UP

Page 28: Standard Widget Toolkit

UCWorkbench Team Eclipse Summer School (28)

LayoutsLayouts▪Kontroluje rozmiar i rozmieszczenie komponentów

▪Klasy menadżerów, są podklasami abstrakcyjnej klasy Layout

▪SWT udostępnia kilka podstawowych layout’ów

• FillLayout, rozmieszcza komponenty w rzędzie lub w kolumnie, równych rozmiarów, wypełniając dostępne miejsce

• RowLayout, ustawia komponenty w rzędzie lub kolumnie

• GridLayout, wpisuje komponenty w siatkę

• FormLayout, ustawia komponenty doczepiając je między sobą

Page 29: Standard Widget Toolkit

UCWorkbench Team Eclipse Summer School (29)

Praca zPraca z Layout Layout’ami’ami

▪Importujemy odpowiedni pakiet SWT:

• import org.eclipse.swt.layout.*;

▪Aby przypisać Layout obiektowi klasy Composite użyj setLayout(Layout)

Display display = new Display();

Shell shell = new Shell(display);

shell.setLayout(new FillLayout());

Page 30: Standard Widget Toolkit

UCWorkbench Team Eclipse Summer School (30)

Layout DataLayout Data

▪ Klasy layout’ów często wykorzystują pomocnicze klasy nazywane ogólnie LayoutData

• RowLayout -> RowData

• GridLayout -> GridData

• FormLayout -> FormData

▪ Przypisanie danych układu

Button button = new Button(shell, SWT.PUSH);

button.setLayoutData(new RowData(10, 20));

Page 31: Standard Widget Toolkit

UCWorkbench Team Eclipse Summer School (31)

FillLayoutFillLayout▪Ustawia komponenty w rzędzie lub

kolumnie

▪Wszystkie tego samego rozmiaru

▪Bez zawijania wierszy

▪Nie można zdefiniować marginesów i odstępów

▪Wykorzystywany do:

• Umieszczanie przycisków na paskach zadań

• Umieszczania checkbox’ów w grupy

Page 32: Standard Widget Toolkit

UCWorkbench Team Eclipse Summer School (32)

FillLayout ExampleFillLayout Example

Display display = new Display();

Shell shell = new Shell(display);

FillLayout fillLayout = new FillLayout();

fillLayout.type = SWT.VERTICAL;

shell.setLayout(fillLayout);

new Button(shell, SWT.PUSH).setText("1'st Button");

new Button(shell, SWT.PUSH).setText("Big Button");

new Button(shell, SWT.PUSH).setText("Button 3");

new Button(shell, SWT.PUSH).setText("Last Button");

shell.pack();

shell.open();

Page 33: Standard Widget Toolkit

UCWorkbench Team Eclipse Summer School (33)

FillLayout ExampleFillLayout ExamplefillLayout.type = SWT.VERTICAL;

fillLayout.type = SWT.HORIZONTAL;

Page 34: Standard Widget Toolkit

UCWorkbench Team Eclipse Summer School (34)

RowLayoutRowLayout

▪RowLayout ma możliwość zawijania wierszy

▪Można ustawiać marginesy i odległości

▪Różne właściwości mogą zostać ustawione

• Wysokość i szerokość widget’ów

• Użyj obiektu klasy RowData

Page 35: Standard Widget Toolkit

UCWorkbench Team Eclipse Summer School (35)

RowLayout Example RowLayout Example RowLayout rowLayout = new RowLayout();

rowLayout.wrap = true;

rowLayout.pack = true;

rowLayout.justify = true;

rowLayout.type = SWT.HORIZONTAL;

rowLayout.marginLeft = 4;

rowLayout.marginTop = 4;

rowLayout.marginRight = 4;

rowLayout.marginBottom = 4;

rowLayout.spacing = 0;

shell.setLayout(rowLayout);

Page 36: Standard Widget Toolkit

UCWorkbench Team Eclipse Summer School (36)

RowLayout ExampleRowLayout Example

rowLayout.wrap = false;

rowLayout.pack = false;

rowLayout.justify = false;

Page 37: Standard Widget Toolkit

UCWorkbench Team Eclipse Summer School (37)

RowData ExampleRowData Example

RowLayout rowLayout = new RowLayout();

shell.setLayout(rowLayout);

Button button1 = new Button(shell, SWT.PUSH);

button1.setText("First");

button1.setLayoutData(new RowData(50, 100));

Button button2 = new Button(shell, SWT.PUSH);

button2.setText("Second");

button2.setLayoutData(new RowData(200, 400));

Page 38: Standard Widget Toolkit

UCWorkbench Team Eclipse Summer School (38)

GridLayoutGridLayout

▪Chyba najczęściej wykorzystywany

▪Najbardziej rozbudowany

▪Komponenty wpisane w siatkę

• Kolumny i rzędy dostowują się do wielkości zawartości

▪Różne wartości mogą zostać ustawione

▪Do komponentów można dodawać GridData

Page 39: Standard Widget Toolkit

UCWorkbench Team Eclipse Summer School (39)

GridLayout ExampleGridLayout Example

GridLayout gridLayout = new GridLayout();

gridLayout.numColumns = 2;

shell.setLayout(gridLayout);

new Button(shell, SWT.PUSH).setText("B1");

new Button(shell, SWT.PUSH).setText("Second Button");

new Button(shell, SWT.PUSH).setText("Third Button");

new Button(shell, SWT.PUSH).setText("B4");

new Button(shell, SWT.PUSH).setText("B5");

new Button(shell, SWT.PUSH).setText("Button Number 6");

Page 40: Standard Widget Toolkit

UCWorkbench Team Eclipse Summer School (40)

GridLayout FieldsGridLayout Fields

▪Pola

• makeColumnsEqualWidth narzuca kolumną równą szerokość

• marginWidth ustala lewy i prawy margines

• marginHeight ustala górny i dolny margines

• horizontalSpacing i verticalSpacing odległości między komponentami

Page 41: Standard Widget Toolkit

UCWorkbench Team Eclipse Summer School (41)

GridDataGridData

▪Zawiera wskazówki dla GridLayout

▪Dodaje się za pomocą metody setLayoutData

Button aButton = new Button(shell, SWT.PUSH);

aButton.setText("FirstButton");

aButton.setLayoutData(new GridData());

Page 42: Standard Widget Toolkit

UCWorkbench Team Eclipse Summer School (42)

GridData FieldsGridData Fields

▪horizontalAlignment: specyfikuje gdzie umiścić widget horyzontalnie lub wertykalnie w komórce siatki

• BEGINNING, CENTER, END, FILL

▪horizontalIndent: umożliwia przesunięcie kontrolki w prawo o wybraną liczbę pixeli

• Użyteczne kiedy horizontalAlignment jest BEGINNING

▪horizontalSpan i verticalSpan: jedna kontrolka może zajmować kilka komórek

Page 43: Standard Widget Toolkit

UCWorkbench Team Eclipse Summer School (43)

GridData FieldsGridData Fields

▪grabExcessHorizontalSpace i grabExcessVerticalSpace: pozwala kontrolkom zwiększać rozmiar jeśli ich rodzic zmienia rozmiar

▪widthHint i heightHint: zalecany rozmiar kontrolki

Page 44: Standard Widget Toolkit

UCWorkbench Team Eclipse Summer School (44)

ĆwiczenieĆwiczenie

Page 45: Standard Widget Toolkit

UCWorkbench Team Eclipse Summer School (45)

ĆwiczenieĆwiczenie

Page 46: Standard Widget Toolkit

UCWorkbench Team Eclipse Summer School (46)

Ćwiczenie - rozwiązanieĆwiczenie - rozwiązanie

GridLayout gridLayout = new GridLayout();

gridLayout.numColumns = 3;

shell.setLayout(gridLayout);

new Label(shell, SWT.NONE).setText(„Name:");

Text userName = new Text(shell, SWT.SINGLE | SWT.BORDER);

GridData gridData = new GridData(GridData.HORIZONTAL_ALIGN_FILL);

gridData.horizontalSpan = 2;

userName.setLayoutData(gridData);

Każdy widget musi mieć własną instancję GridData

Page 47: Standard Widget Toolkit

UCWorkbench Team Eclipse Summer School (47)

Ćwiczenie - rozwiązanieĆwiczenie - rozwiązanie

new Label(shell, SWT.NONE).setText(”Sex:");

Combo sex = new Combo(shell, SWT.NONE);

sex.setItems(new String [] {"Male", "Female"});

gridData = new GridData(GridData.HORIZONTAL_ALIGN_FILL);

gridData.horizontalSpan = 2;

sex.setLayoutData(gridData);

new Label(shell, SWT.NONE).setText("Photo:");

Canvas photo = new Canvas(shell, SWT.BORDER);

gridData = new GridData(GridData.FILL_BOTH);

gridData.widthHint = 80;

gridData.heightHint = 80;

gridData.verticalSpan = 3;

photo.setLayoutData(gridData);

Page 48: Standard Widget Toolkit

UCWorkbench Team Eclipse Summer School (48)

GridData ExampleGridData Example

Page 49: Standard Widget Toolkit

UCWorkbench Team Eclipse Summer School (49)

FormLayoutFormLayout

▪Tworzy FormAttachments dla krawędzi widget’a

• Przechowuje attachments jako layout data

• Przyłącza krawędź relatywnie do Composite’a rodzica innego widget’a w ramach layout’u

▪Pozwala w pełni wyspecyfikować położenie widgetu

http://www.eclipse.org/articles/Article-Understanding-Layouts/Understanding-Layouts.htm

Page 50: Standard Widget Toolkit

UCWorkbench Team Eclipse Summer School (50)

GraphicsGraphics▪ GC – Graphics Context (można rysować po wszystkich klasach

które implementują interfejs Drawable (np. Image, Control, Canvas itd.)

▪ Jeśli używasz konstruktora GC(), nie zapomnij dispose!

▪ Rysowania dokonujemy wewnątrz metody paintControl(PaintEvent) należącej do PaintListener

Composite.addPaintListener(new PaintListener(){

public void paintControl(PaintEvent event){

Display display = event.display;

GC gc = event.gc

gc.drawRectangle(0,0,10,10);

}

});

Page 51: Standard Widget Toolkit

UCWorkbench Team Eclipse Summer School (51)

ColorColor

▪Domyślne kolory systemowe można uzyskać przy pomocy Display poprzez metodę getSystemColor(id) (SWT.COLOR...), ich nie wolno disposować

▪Albo new Color(device, 255, 255, 255), te kolory należy usuwać

• Device -> Display, Printer

Page 52: Standard Widget Toolkit

UCWorkbench Team Eclipse Summer School (52)

FontsFonts

▪Domyśną czionkęmożna uzyskać poprzez klasę Display wywołując metodę getSystemFont()

▪Albo stworzyć obiekt Font

• new Font(device, ”Arial”, 12, SWT.BOLD);

• new Font(device, new FontData(”Arial”,12,SWT.BOLD));

• Device -> Display, Printer

• Należy je usuwać!

Page 53: Standard Widget Toolkit

UCWorkbench Team Eclipse Summer School (53)

Drag and dropDrag and drop

▪Drag Source – dostarcza dane które mają być upuszczone

• Ten sam widget

• Inny widget

• Inna aplikacja!

▪Transfer object – obiekt do przenoszenia danych (np. dla plików FileTransfer – przechowuje lokalizacje plików)

▪Drop Target – odbiorca danych

Page 54: Standard Widget Toolkit

UCWorkbench Team Eclipse Summer School (54)

DragSource ExampleDragSource Examplefinal Label dragLabel = new Label(shell, SWT.BORDER);dragLabel.setText("text to be transferred");

int operations = DND.DROP_MOVE | DND.DROP_COPY;DragSource source = new DragSource(dragLabel, operations);

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

source.addDragListener(new DragSourceListener() { public void dragStart(DragSourceEvent event) { if (dragLabel.getText().length() == 0) { event.doit = false; } } public void dragSetData(DragSourceEvent event) { if (TextTransfer.getInstance().isSupportedType(event.dataType)) { event.data = dragLabel.getText(); } } public void dragFinished(DragSourceEvent event) { if (event.detail == DND.DROP_MOVE) dragLabel.setText(""); }});

Page 55: Standard Widget Toolkit

UCWorkbench Team Eclipse Summer School (55)

DropTarget ExampleDropTarget Example

final Text dropText = new Text(shell, SWT.BORDER);

operations = DND.DROP_MOVE | DND.DROP_COPY | DND.DROP_DEFAULT;DropTarget target = new DropTarget(dropText, operations);

final TextTransfer textTransfer = TextTransfer.getInstance();target.setTransfer(new Transfer[]{textTransfer});

target.addDropListener(new DropTargetAdapter() { public void drop(DropTargetEvent event) { if (textTransfer.isSupportedType(event.currentDataType)) { String text = (String) event.data; dropText.setText(text); } }});

Page 56: Standard Widget Toolkit

UCWorkbench Team Eclipse Summer School (56)

SWT - KoniecSWT - Koniec

Dziękuje slides.dispose()