際際滷

際際滷Share a Scribd company logo
Rahul Shukla
Introduction to SWT | Rahul Shukla
 Cut through the hype and explain what SWT
really is
 Describe SWT's advantages and
disadvantages
 Explain SWT's technical relationship to Swing
 Provide a taste of coding with SWT
Introduction to SWT | Rahul Shukla
 You feel comfortable with Java
 You have prior experience programming
using Java
Introduction to SWT | Rahul Shukla
 Standard Widget Toolkit: A GUI Toolkit for
Java
The SWT component is designed to provide
efficient, portable user-interface
facilities the operating systems on which it is
implemented.
Introduction to SWT | Rahul Shukla
 Native look and feel across the platform
 Using native widgets performance is very
good
SWT Disadvantages
 Immature compared to Swing
Introduction to SWT | Rahul Shukla
 Web Services shift the emphasis on the client
away from the web browser, back toward
traditional GUI applications.
 SWT strengthens Java's position in this
market.
 SWT provides features that compliment,
rather than replace, Swing.
Introduction to SWT | Rahul Shukla
 Display
 Represents a workstation (monitor(s), keyboard, mouse.
 Responsible for event dispatching in the event loop
 Contains a list of top-level Shells, and a list of Monitors
 Shell
 Represents a window on the screen.
 Root of a tree composed of Composites & Controls
 Composite
 Control that can contain other Composites & Controls.
 Control
 Represents a heavyweight operating system control.
 Button, Label, Text, Tree, etc - as well as Shell & Composite.
Shell, Composite & Control are subclasses of Widget
Introduction to SWT | Rahul Shukla
 In SWT, the event loop is explicit: it must be coded by the
application.
 The loop repeatedly reads and dispatches the next UI
event from the OS, and yields the CPU when there are no
events to dispatch.
 The loop completes when the application finishes - typically
when the user closes the applications main window.
while (!shell.isDisposed ()) {
if (!display.readAndDispatch ())
display.sleep ();
}
Introduction to SWT | Rahul Shukla
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
public class HelloWorld {
public static void main(String[] args) {
Display display = new Display();
Shell shell = new Shell(display);
shell.setText("Hello World");
shell.setSize(200, 100);
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
}
}
Introduction to SWT | Rahul Shukla
 swt.jar contains the following Java packages
 org.eclipse.swt
 org.eclipse.swt.widgets
 org.eclipse.swt.graphics
 org.eclipse.swt.events
 org.eclipse.swt.layout 則 org.eclipse.swt.dnd
 org.eclipse.swt.printing
 org.eclipse.swt.program
 org.eclipse.swt.accessibility
 org.eclipse.swt.custom
 org.eclipse.swt.browser
 org.eclipse.swt.awt
 org.eclipse.swt.internal.*
Introduction to SWT | Rahul Shukla
 Uses Java Native Interface (JNI) to call the C-based API of
the underlying platforms UI library.
 One-to-one mapping
 Uses the same function names and arguments as the platform
(typically only a subset of the platform API is needed).
 Uses the same naming conventions for data structures, constants,
and variables .
 All of the interesting aspects of SWT are coded in Java.
 Developers familiar with the API for a platform can develop
an SWT port using their full knowledge of the platform
code.
Introduction to SWT | Rahul Shukla
 In order to run an SWT application, you need 2 sets of
components:
1. SWT Jars
 Contain the Java classes that make up the SWT library .
 The main file, swt.jar, has its source code in swtsrc.zip.
 The set of additional jar files depends on the platform.
 In order to compile your SWT application, these jar files must be available
to the java compiler.
2. SWT shared libraries
 Contain the SWT Platform Interface (PI), which makes the platforms GUI
API available in Java.
 Shared library filenames are platform-specific, for example: swt-XX.dll on
Windows, libswt-XX.so on Linux, etc.
 The set of additional shared library files depends on the platform.
Introduction to SWT | Rahul Shukla
 All constants for SWT
 Examples:
 SWT.PUSH, SWT.RADIO
 SWT.Selection
 Interesting methods:
 getPlatform()
 getVersion()
 error()
 Notes:
 Platform codes are Strings such as win32, carbon, gtk
 Version is encoded in an integer (major * 1000 + minor)
Introduction to SWT | Rahul Shukla
SWT methods throw only three
kinds of exceptions and errors:
 SWTError
 Thrown when an unrecoverable error occurs internally in SWT
 int code - the SWT error code
 Throwable throwable - the throwable that caused the problem, or
null
 String getMessage() - text description of the problem
 SWTException
 Thrown when a recoverable error occurs internally in SWT
 Same fields and methods as SWTError

 IllegalArgumentException
 Thrown with descriptive string when argument is invalid
Introduction to SWT | Rahul Shukla
Introduction to SWT | Rahul Shukla
 Widgets always have a parent
 Typical constructor looks like: Widget(Composite
parent, int style)
 Styles are the bitwise-or constants from class SWT
 Examples:
new Label(shell, SWT.NONE);
Button push = new Button(shell, SWT.PUSH);
Button radio = new Button(shell, SWT.RADIO);
Text text = new Text(shell, SWT.SINGLE|SWT.BORDER);
 Exceptions: shells have a display or shell parent
Shell shell = new Shell(display, SWT.SHELL_TRIM);
Shell dialog = new Shell(shell, SWT.DIALOG_TRIM);
Introduction to SWT | Rahul Shukla
 Abstract superclass for all UI objects
 Created using constructors (no factories)
 OS resources are allocated when a widget is created
 Disposed by the user or programmatically with dispose()
 OS resources are released when a widget is disposed
 Notify listeners when widget-specific events occur
 Allow application-specific data to be stored using
 setData(Object)
 setData(String, Object)
 Event
 Dispose
Introduction to SWT | Rahul Shukla
 You must explicitly dispose of resource-based
objects
 Resource-based objects: Widget & subclasses,
Color, Cursor, Font, GC, Image, Region, Device &
subclasses (Display, Printer)
 Rule 1: If you created it, you dispose it
 Programmer is responsible for disposing this font:
Font font = new Font (display, "Courier", 10, SWT.NORMAL);
font.dispose ();
 Programmer must not dispose this font:
Font font = control.getFont ();
Introduction to SWT | Rahul Shukla
Rule 2: Disposing a parent disposes the
children
 shell.dispose(); disposes all children of the shell
 menu.dispose(); disposes all menu items in the
menu
 tree.dispose(); disposes all items in the tree
Introduction to SWT | Rahul Shukla
 Abstract superclass of all heavyweight UI objects
 Styles
 BORDER, LEFT_TO_RIGHT, RIGHT_TO_LEFT
 Events
 FocusIn, FocusOut
 KeyDown, KeyUp
 Traverse
 MouseDown, MouseUp, MouseDoubleClick
 MouseEnter, MouseExit, MouseMove, MouseHover
 Move, Resize 則 Paint
 Help
Introduction to SWT | Rahul Shukla
Shell shell = new Shell(display, SWT.SHELL_TRIM);
Shell shell = new Shell(display, SWT.DIALOG_TRIM);
 Styles (most Shell styles are hints to
WM)
 BORDER, CLOSE, MIN, MAX, NO_TRIM, RESIZE, TITLE
 APPLICATION_MODAL, MODELESS, PRIMARY_MODAL,
SYSTEM_MODAL
 Events
 Close, Activate, Deactivate, Iconify, Deiconify
 Interesting methods
 open(), close(), setActive()
 Notes
 The parent of a top-level shell is the display
 The parent of a dialog shell is a top-level shell
Introduction to SWT | Rahul Shukla
 Label new Label(shell, SWT.BORDER).setText("Label");
 Button
 Push new Button(shell, SWT.PUSH).setText("PUSH");
 Radio new Button(shell, SWT.RADIO).setText("RADIO");
 Check new Button(shell, SWT.CHECK).setText("Check");
 Text
 Simple Text new Text(shell, SWT.NONE).setText("Simple Text");
 Multi Text new Text(shell, SWT.MULTI).setText("Multi Text");
 List new List(shell, SWT.NONE);
 Combo new Combo(shell, SWT.NONE);
Introduction to SWT | Rahul Shukla
 Layout - abstract superclass
 FillLayout - single row or column
 RowLayout - multiple rows or columns
 GridLayout - grid
 FormLayout - attach the edges of each
child
 StackLayout - children are stacked
and topmost is drawn
Notes:
 Controls the position and size of the children
of a composite
 Most layouts have a corresponding layout
data object that can be set into a control
using Control.setLayoutData(Object)
Introduction to SWT | Rahul Shukla
 Lays out the children of a
composite in a single row or
column
 Controls are forced to be the same
size
 All controls are as tall as the tallest
control, as wide as the widest
 Constructors
 FillLayout()
 FillLayout(int type)
 Fields
 type - HORIZONTAL or VERTICAL
 marginWidth, marginHeight - pixels
between controls and edge of layout
 spacing - pixels between controls
Introduction to SWT | Rahul Shukla
Horizontal
Vertical
public class HelloWorld {
public static void main(String[] args) {
Display display = new Display();
Shell shell = new Shell(display);
shell.setLayout(new FillLayout(SWT.VERTICAL));
new Label(shell, SWT.BORDER).setText("Label");
new Button(shell, SWT.PUSH).setText("PUSH");
new Button(shell, SWT.RADIO).setText("RADIO");
new Button(shell, SWT.CHECK).setText("Check");
new Text(shell, SWT.BORDER).setText("Simple Text");
new Text(shell, SWT.MULTI).setText("Multi Text");
shell.setText("Dialog Title");
shell.setSize(200, 100);
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
}
}
Introduction to SWT | Rahul Shukla
 Lays out the children of a composite in
rows or columns
 RowData object
 Specifies the width and height of a specific control
 Constructors
 RowLayout(), RowLayout(int type)
 Fields
 type - HORIZONTAL or VERTICAL
 marginWidth, marginHeight, spacing - same as
FillLayout
 marginLeft, marginTop, marginRight,
marginBottom - for fine tuning
 wrap - wrap control to next row when there is no
space in current row
 pack - if true, controls take their preferred size 則
fill - make controls in the same row all have the
same height
 justify - controls will be spread out to occupy all
available space
Introduction to SWT | Rahul Shukla
public class RowLayoutExample {
public static void main(String[] args) {
Display display = new Display();
Shell shell = new Shell(display);
RowLayout layout = new RowLayout(SWT.VERTICAL);
layout.marginBottom = 5;layout.marginHeight = 5;layout.marginLeft = 5;
layout.marginTop = 5;layout.marginWidth = 5;layout.wrap = true;
shell.setLayout(layout);
new Label(shell, SWT.BORDER).setText("Label");
new Button(shell, SWT.PUSH).setText("PUSH");
new Button(shell, SWT.RADIO).setText("RADIO");
new Button(shell, SWT.CHECK).setText("Check");
new Text(shell, SWT.BORDER).setText("Simple Text");
new Text(shell, SWT.MULTI).setText("Multi Text");
shell.setText("Dialog Title");
shell.setSize(200, 100);
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
}
}
Introduction to SWT | Rahul Shukla
 Lays out the children of a composite in a grid
 Specify the number of columns; the rows are created as needed
 GridData object
 Specifies the alignment, span, indent, grab, and desired width
and/or height properties for each child of the composite
 Each child must have its own GridData instance (or null)
 Constructors
 GridLayout()
 GridLayout(int numColumns, boolean makeColumnsEqualWidth)
 Fields
 numColumns, makeColumnsEqualWidth
 marginWidth, marginHeight, horizontalSpacing, verticalSpacing
Introduction to SWT | Rahul Shukla
 Constructors
 GridData()
 GridData(int style) 則 GridData(int width, int height)
 ..and other constructors to set alignment, grab and span
 Fields
 horizontalAlignment, verticalAlignment - align child within its grid
cell
 horizontalIndent, verticalIndent - number of pixels to move the
child
 horizontalSpan, verticalSpan - number of columns to occupy
(default 1)
 grabExcessHorizontalSpace, grabExcessVerticalSpace - occupy
any space not taken by other controls in the row or column
 widthHint, heightHint - attempt to make the child this width
and/or height
 minimumWidth, minimumHeight -childs minimum width and/or
height
Introduction to SWT | Rahul Shukla
public class GridLayoutExample {
public static void main(String[] args) {
Display display = new Display();
Shell shell = new Shell(display);
GridLayout layout = new GridLayout();
layout.numColumns = 6;
shell.setLayout(layout);
for (int i = 0; i < 12; i++) {
Button button = new Button(shell, SWT.PUSH);
button.setText("B" + i);
if (i % 5 == 0)
button.setLayoutData(new GridData(64, 32));
if (i == 2)
button.setLayoutData(new GridData(SWT.LEFT, SWT.FILL, false,false, 1, 2));
if (i == 3)
button.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false,false, 3, 1));
}
shell.setText("Dialog Title");
shell.setSize(200, 100);
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
}
}
Introduction to SWT | Rahul Shukla
 Lays out the children of a composite by attaching
edges
 FormData object
 specifies the left, right, top, and bottom FormAttachments
 specifies the width and height for the control
 FormAttachment object
 Edges can be attached to a position that is a fraction of the
height or width of the parents client area, or they can be
attached to, or centered on, an edge of another control
 Constructors
 FormLayout()
 Fields
 marginWidth, marginHeight, spacing
Introduction to SWT | Rahul Shukla
 Constructors
 FormAttachment(int numerator) 則 FormAttachment(int
numerator, int offset).
 FormAttachment(int numerator, int denominator, int offset).
 FormAttachment(Control control).
 FormAttachment(Control control, int offset).
 FormAttachment(Control control, int offset, int alignment).
 Fields
 numerator, denominator - fraction specifying how far from
the top or left of the parents client area to attach the edge
(default %).
 offset - # of pixels to move the edge (+/-) from the
attachment point.
 control, alignment - align the edge to the TOP, BOTTOM,
LEFT, RIGHT, CENTER or DEFAULT edge of another control.
Introduction to SWT | Rahul Shukla
public class FormLayoutExample {
public static void main(String[] args) {
Display display = new Display();
Shell shell = new Shell(display);
FormLayout formLayout = new FormLayout();
shell.setLayout(formLayout);
Button button0 = new Button(shell, SWT.PUSH);
button0.setText("Button0");
button0.setLayoutData(new FormData());
Button button1 = new Button(shell, SWT.PUSH);
button1.setText("Button1");
FormData data = new FormData();
// Allign left edge of Button1 with BUtton 0
data.left = new FormAttachment(button0, 4);
button1.setLayoutData(data);
Introduction to SWT | Rahul Shukla
Button button2 = new Button(shell, SWT.PUSH);
button2.setText("Button2");
data = new FormData();
data.left = new FormAttachment(0, 0);
data.right = new FormAttachment(100, 0);
// allign top edge of Button 2 with button 0
data.top = new FormAttachment(button0, 4);
button2.setLayoutData(data);
Button button3 = new Button(shell, SWT.PUSH);
button3.setText("Button3");
data = new FormData(60, 40);
data.right = new FormAttachment(button2, 0, SWT.CENTER);
data.top = new FormAttachment(button2, 4);
button3.setLayoutData(data);
shell.setText("Dialog Title");
shell.setSize(200, 100);
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();}}}}
Introduction to SWT | Rahul Shukla
 Composite.layout()
 Composite.layout(boolean changed)
 Causes the layout algorithm to position and resize children
 The changed flag indicates whether the contents of any children
have changed in a way that would affect their preferred size,
thereby invalidating the layouts cached data. For example, if you
have done any of the following then you should call layout (true):
 Most setText() calls
 Font changes
 Adding/removing widgets
 Adding/removing images
 Adding/removing items
 Free layout only happens when the Composite is resized
 Invokes Composite.layout(false)
Introduction to SWT | Rahul Shukla
 new Table(parent, SWT.SINGLE);
 Styles
 SINGLE, MULTI, CHECK,
 FULL_SELECTION, HIDE_SELECTION
 Events
 Selection, DefaultSelection
 Interesting methods
 setHeaderVisible(boolean), setLinesVisible(boolean)
 getHeaderHeight(), getItemHeight()
 indexOf(TableColumn), indexOf(TableItem)
 getColumn(int), getItem(int)
 isSelected(int), setSelection(int[]), setSelection(TableItem[])
 setTopIndex(int)
Introduction to SWT | Rahul Shukla
 new TableColumn(table, SWT.LEFT);
 TableColumn
 Can have text, image, and alignment
 Can set column width, and pack columns
 Generates Move, Resize, and Selection events
 new TableItem(table, SWT.NONE);
 TableItem
 Can have text, image, color, checkbox, gray-state checkbox
Introduction to SWT | Rahul Shukla
public class TableExample {
public static void main(String[] args) {
Display display = new Display();
Shell shell = new Shell(display);
shell.setLayout(new GridLayout(1, true));
Table table = new Table(shell, SWT.BORDER);
table.setHeaderVisible(true);
for (int i = 0; i < 4; i++) {
TableColumn column = new TableColumn(table, SWT.NONE);
column.setText("Column " + i);
}
for (int i = 0; i < 5; i++) {
TableItem item = new TableItem(table, SWT.NULL);
for (int j = 0; j < 4; j++) {
item.setText(j, "Item " + i + "-" + j);
}
}
for (int i = 0; i < 4; i++) {
table.getColumn(i).pack();
}
table.pack();
shell.setText("Dialog Title");
shell.pack();
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}}}}
Introduction to SWT | Rahul Shukla
 new Tree(parent, SWT.MULTI);
 new TreeItem(tree, SWT.NONE);
 new TreeItem(treeItem, SWT.NONE);
 Styles
 SINGLE, MULTI, CHECK
 Events
 Selection, DefaultSelection, Collapse, Expand
 Interesting methods
 setSelection(TreeItem[])
 setTopItem(TreeItem) 則 showItem(TreeItem)
 TreeItem
 Can have text, image, color, checkbox, gray-state checkbox
Introduction to SWT | Rahul Shukla
public class TreeExample {
public static void main(String[] args) {
Display display = new Display();
Shell shell = new Shell(display);
shell.setLayout(new GridLayout(1, true));
Tree tree = new Tree(shell, SWT.BORDER);
tree.setHeaderVisible(true);
for (int i = 0; i < 5; i++) {
TreeItem item = new TreeItem(tree, SWT.NULL);
item.setText("Item" + i);
for (int j = 0; j < 4; j++) {
new TreeItem(item, SWT.NULL).setText("Item" + i + j);
}
}
tree.setLayoutData(new GridData(GridData.FILL_BOTH));
shell.setText("Dialog Title");
shell.pack();
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
}
}
Introduction to SWT | Rahul Shukla
 new ToolBar(parent, SWT.HORIZONTAL);
 Styles
 WRAP, FLAT, RIGHT (text to the right of image)
 HORIZONTAL, VERTICAL
 SHADOW_OUT
 Events
 None
 Interesting methods
 indexOf(ToolItem)
 getItems(), getItem(int)
 Notes
 Display horizontal or vertical rows of ToolItems
Introduction to SWT | Rahul Shukla
 new ToolItem(toolBar, SWT.PUSH);
 Styles
 PUSH, CHECK, RADIO, SEPARATOR, DROP_DOWN
 Events
 Selection
 Interesting methods
 setText(String), setImage(Image), setSelection(boolean),
setToolTipText(String), setEnabled(boolean)
 SEPARATOR style: setWidth(int), setControl(Control)
 DROP_DOWN style: Selection event with detail == SWT.ARROW, and x, y to
position drop-down control (i.e. menu or list or toolbar)
 Notes
 Similar API to Button
Introduction to SWT | Rahul Shukla
 Menu(Decorations parent, int style)
 Parent of menus are Decorations or Shell
 Menu(Menu menu), Menu(MenuItem item),
Menu(Control parent)
 Convenience constructors for Menu(Decorations, int)
 Styles
 BAR, DROP_DOWN, POP_UP, NO_RADIO_GROUP,
LEFT_TO_RIGHT, RIGHT_TO_LEFT
 Events
 Help, Hide, Show
 Interesting Methods
 setLocation(int x, int y) - tell pop-up menu where to open
 setVisible(boolean) - to display a pop-up menu
 Decorations.setMenuBar(Menu), Control.setMenu(Menu)
Introduction to SWT | Rahul Shukla
 MenuItem(Menu parent, int style)
 MenuItem(Menu parent, int style, int index)
 Styles
 CHECK, PUSH, RADIO, SEPARATOR, CASCADE
 Events
 Arm, Help, Selection
 Interesting methods
 setText(String) - string may include mnemonic & accelerator text
 setImage(Image) - feature not available on all platforms 則
setAccelerator(int) - SWT.MOD1 + 'T', SWT.CONTROL + 'T
 setEnabled(boolean) - disabled menu item typically drawn gray
 setSelection(boolean) - for radio or check menu items
 setMenu(Menu) - for cascade menu items, sets the pull-down
menu
Introduction to SWT | Rahul Shukla
public class ToolBarExample {
public static void main(String[] args) {
final Display display = new Display();
Shell shell = new Shell(display);
shell.setLayout(new RowLayout());
final ToolBar toolBar = new ToolBar(shell, SWT.HORIZONTAL);
final ToolItem item = new ToolItem(toolBar, SWT.DROP_DOWN);
item.setImage(new
Image(null,"D:/workdir/units/tc10.1.0.2013060400/eclipse/rcptraining/icons/open_16.png"));
final Menu menu = new Menu(shell, SWT.POP_UP);
for (int i = 0; i < 8; i++) {
new MenuItem(menu, SWT.PUSH).setText("Item " + i);
}
item.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent event) {
if (event.detail == SWT.ARROW) {
Point point = new Point(event.x, event.y);
point = display.map(toolBar, null, point);
menu.setLocation(point);
menu.setVisible(true);
}}});
shell.setText("Dialog Title");
shell.setSize(200, 100);
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}}}}
Introduction to SWT | Rahul Shukla
 Events indicate that something interesting has
happened
 mouse, keyboard, paint, focus, move, resize, ...
 Widgets can issue a higher-level event to
indicate a state change
 For example, a Button may track mouse press, mouse
move and mouse release in order to issue selection
 Event classes contain detailed information about
what happened
 Listeners are instances of classes that implement
an interface of event-specific methods
Introduction to SWT | Rahul Shukla
 Package org.eclipse.swt.events
 Follows standard Java listener pattern
 Event classes extend java.util.EventObject
 Listener interfaces extend java.util.EventListener
 Adapter classes for multi-method listener interfaces
(convenience) 則 Use addTypeListener(TypeListener) to hook
listener to widget
 Use removeTypeListener(TypeListener) to unhook 則 Multiple
listeners are called in the order they were added
 For example, to listen for dispose event on a
widget
 addDisposeListener(DisposeListener listener)
widget.addDisposeListener(new DisposeListener() {
public void widgetDisposed(DisposeEvent event) {
// widget was disposed }
});
Introduction to SWT | Rahul Shukla
Introduction to SWT | Rahul Shukla
public class SelectionListenerExample {
public static void main(String[] args) {
Display display = new Display();
Shell shell = new Shell(display);
shell.setLayout(new RowLayout());
final Button land = new Button(shell, SWT.RADIO);
land.setText("By Land");
final Button sea = new Button(shell, SWT.RADIO);
sea.setText("By Sea");
sea.setSelection(true);
SelectionListener listener = new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
Button button = (Button) e.widget;
if (!button.getSelection())
return;
System.out.println("Arriving " + button.getText());
}};
land.addSelectionListener(listener);
sea.addSelectionListener(listener);
shell.setText("Dialog Title");
shell.setSize(200, 100);
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}}}}
Introduction to SWT | Rahul Shukla
 Get a system color using
Device.getSystemColor (int colorConstant)
 Do not dispose of system colors 
 Color(Device device, int red, int green, int
blue)
 Color(Device device, RGB rgb)
 Example: Color red = new Color(display, 0xFF,
0x00, 0x00);
 OS resources are allocated, therefore must dispose
Introduction to SWT | Rahul Shukla
 Image(Device device, ImageData data)
 Create image from image data
 Image(Device device, int width, int height)
 Blank off-screen image used for drawing
 Image(Device device, String filename)
 Image loaded from file
 Image(Device device, Image image, int flag)
 Apply some transformation: SWT.DISABLE,
SWT.GRAY
 OS resources are allocated, therefore must dispose
Introduction to SWT | Rahul Shukla
 Font(Device device, FontData data)
 Font(Device display, String name, int height, int
style)
 Example: new Font(display, "Arial", 40, SWT.BOLD);
 OS resources are allocated, therefore must dispose
Button button = new Button(shell, SWT.PUSH);
button.setText("Button");
Font font = new Font(display, "Arial", 40, SWT.BOLD);
button.setFont(font);
Introduction to SWT | Rahul Shukla
 Display.asyncExec(Runnable runnable)
 Causes the argument to be run by the UI thread of the
Display
 Display.syncExec(Runnable runnable)
 Causes the argument to be run by the UI thread of the
Display, and causes the current thread to wait for the
Runnable to finish
 Display.timerExec(int milliseconds, Runnable
runnable)
 Causes the Runnable argument to be evaluated after the
specified number of milliseconds have elapsed
 Notes
 These methods do not create a thread; they simply execute the
Runnable argument in the UI thread
Introduction to SWT | Rahul Shukla
public class ProgressBarExample {
public static void main(String[] args) {
final Display display = new Display();
Shell shell = new Shell(display);
final ProgressBar bar = new ProgressBar(shell, SWT.NONE);
bar.setSize(200, 32);
shell.pack();
shell.open();
final int maximum = bar.getMaximum();
new Thread() {
public void run() {
for (int i = 0; i <= maximum; i++) {
try {Thread.sleep(100);
} catch (Throwable th) {
}
final int index = i;
display.asyncExec(new Runnable() {
public void run() {
bar.setSelection(index);
}});}}}.start();
shell.setText("Dialog Title");
shell.setSize(200, 100);
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}}}}
Introduction to SWT | Rahul Shukla
 DragSource
 Create on a widget that is eligible as a drag source
 Provides content and format information from the source
widget to the Drag and Drop operation
 DropTarget
 Create on a widget that is eligible as a drop target
 Receives content and format information from a Drag and
Drop operation, and updates the target widget accordingly
 Clipboard
 Allows deferred transfer of data within and between
applications
 Transfer & subclasses
 Converts between Java representation and platform specific
representation of data and vice versa
 Provided by default: Text, RTF, File
Introduction to SWT | Rahul Shukla
Thanks 
Introduction to SWT | Rahul Shukla

More Related Content

Introduction_To_SWT_Rahul_Shukla

  • 1. Rahul Shukla Introduction to SWT | Rahul Shukla
  • 2. Cut through the hype and explain what SWT really is Describe SWT's advantages and disadvantages Explain SWT's technical relationship to Swing Provide a taste of coding with SWT Introduction to SWT | Rahul Shukla
  • 3. You feel comfortable with Java You have prior experience programming using Java Introduction to SWT | Rahul Shukla
  • 4. Standard Widget Toolkit: A GUI Toolkit for Java The SWT component is designed to provide efficient, portable user-interface facilities the operating systems on which it is implemented. Introduction to SWT | Rahul Shukla
  • 5. Native look and feel across the platform Using native widgets performance is very good SWT Disadvantages Immature compared to Swing Introduction to SWT | Rahul Shukla
  • 6. Web Services shift the emphasis on the client away from the web browser, back toward traditional GUI applications. SWT strengthens Java's position in this market. SWT provides features that compliment, rather than replace, Swing. Introduction to SWT | Rahul Shukla
  • 7. Display Represents a workstation (monitor(s), keyboard, mouse. Responsible for event dispatching in the event loop Contains a list of top-level Shells, and a list of Monitors Shell Represents a window on the screen. Root of a tree composed of Composites & Controls Composite Control that can contain other Composites & Controls. Control Represents a heavyweight operating system control. Button, Label, Text, Tree, etc - as well as Shell & Composite. Shell, Composite & Control are subclasses of Widget Introduction to SWT | Rahul Shukla
  • 8. In SWT, the event loop is explicit: it must be coded by the application. The loop repeatedly reads and dispatches the next UI event from the OS, and yields the CPU when there are no events to dispatch. The loop completes when the application finishes - typically when the user closes the applications main window. while (!shell.isDisposed ()) { if (!display.readAndDispatch ()) display.sleep (); } Introduction to SWT | Rahul Shukla
  • 9. import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; public class HelloWorld { public static void main(String[] args) { Display display = new Display(); Shell shell = new Shell(display); shell.setText("Hello World"); shell.setSize(200, 100); shell.open(); while (!shell.isDisposed()) { if (!display.readAndDispatch()) { display.sleep(); } } } } Introduction to SWT | Rahul Shukla
  • 10. swt.jar contains the following Java packages org.eclipse.swt org.eclipse.swt.widgets org.eclipse.swt.graphics org.eclipse.swt.events org.eclipse.swt.layout 則 org.eclipse.swt.dnd org.eclipse.swt.printing org.eclipse.swt.program org.eclipse.swt.accessibility org.eclipse.swt.custom org.eclipse.swt.browser org.eclipse.swt.awt org.eclipse.swt.internal.* Introduction to SWT | Rahul Shukla
  • 11. Uses Java Native Interface (JNI) to call the C-based API of the underlying platforms UI library. One-to-one mapping Uses the same function names and arguments as the platform (typically only a subset of the platform API is needed). Uses the same naming conventions for data structures, constants, and variables . All of the interesting aspects of SWT are coded in Java. Developers familiar with the API for a platform can develop an SWT port using their full knowledge of the platform code. Introduction to SWT | Rahul Shukla
  • 12. In order to run an SWT application, you need 2 sets of components: 1. SWT Jars Contain the Java classes that make up the SWT library . The main file, swt.jar, has its source code in swtsrc.zip. The set of additional jar files depends on the platform. In order to compile your SWT application, these jar files must be available to the java compiler. 2. SWT shared libraries Contain the SWT Platform Interface (PI), which makes the platforms GUI API available in Java. Shared library filenames are platform-specific, for example: swt-XX.dll on Windows, libswt-XX.so on Linux, etc. The set of additional shared library files depends on the platform. Introduction to SWT | Rahul Shukla
  • 13. All constants for SWT Examples: SWT.PUSH, SWT.RADIO SWT.Selection Interesting methods: getPlatform() getVersion() error() Notes: Platform codes are Strings such as win32, carbon, gtk Version is encoded in an integer (major * 1000 + minor) Introduction to SWT | Rahul Shukla
  • 14. SWT methods throw only three kinds of exceptions and errors: SWTError Thrown when an unrecoverable error occurs internally in SWT int code - the SWT error code Throwable throwable - the throwable that caused the problem, or null String getMessage() - text description of the problem SWTException Thrown when a recoverable error occurs internally in SWT Same fields and methods as SWTError IllegalArgumentException Thrown with descriptive string when argument is invalid Introduction to SWT | Rahul Shukla
  • 15. Introduction to SWT | Rahul Shukla
  • 16. Widgets always have a parent Typical constructor looks like: Widget(Composite parent, int style) Styles are the bitwise-or constants from class SWT Examples: new Label(shell, SWT.NONE); Button push = new Button(shell, SWT.PUSH); Button radio = new Button(shell, SWT.RADIO); Text text = new Text(shell, SWT.SINGLE|SWT.BORDER); Exceptions: shells have a display or shell parent Shell shell = new Shell(display, SWT.SHELL_TRIM); Shell dialog = new Shell(shell, SWT.DIALOG_TRIM); Introduction to SWT | Rahul Shukla
  • 17. Abstract superclass for all UI objects Created using constructors (no factories) OS resources are allocated when a widget is created Disposed by the user or programmatically with dispose() OS resources are released when a widget is disposed Notify listeners when widget-specific events occur Allow application-specific data to be stored using setData(Object) setData(String, Object) Event Dispose Introduction to SWT | Rahul Shukla
  • 18. You must explicitly dispose of resource-based objects Resource-based objects: Widget & subclasses, Color, Cursor, Font, GC, Image, Region, Device & subclasses (Display, Printer) Rule 1: If you created it, you dispose it Programmer is responsible for disposing this font: Font font = new Font (display, "Courier", 10, SWT.NORMAL); font.dispose (); Programmer must not dispose this font: Font font = control.getFont (); Introduction to SWT | Rahul Shukla
  • 19. Rule 2: Disposing a parent disposes the children shell.dispose(); disposes all children of the shell menu.dispose(); disposes all menu items in the menu tree.dispose(); disposes all items in the tree Introduction to SWT | Rahul Shukla
  • 20. Abstract superclass of all heavyweight UI objects Styles BORDER, LEFT_TO_RIGHT, RIGHT_TO_LEFT Events FocusIn, FocusOut KeyDown, KeyUp Traverse MouseDown, MouseUp, MouseDoubleClick MouseEnter, MouseExit, MouseMove, MouseHover Move, Resize 則 Paint Help Introduction to SWT | Rahul Shukla
  • 21. Shell shell = new Shell(display, SWT.SHELL_TRIM); Shell shell = new Shell(display, SWT.DIALOG_TRIM); Styles (most Shell styles are hints to WM) BORDER, CLOSE, MIN, MAX, NO_TRIM, RESIZE, TITLE APPLICATION_MODAL, MODELESS, PRIMARY_MODAL, SYSTEM_MODAL Events Close, Activate, Deactivate, Iconify, Deiconify Interesting methods open(), close(), setActive() Notes The parent of a top-level shell is the display The parent of a dialog shell is a top-level shell Introduction to SWT | Rahul Shukla
  • 22. Label new Label(shell, SWT.BORDER).setText("Label"); Button Push new Button(shell, SWT.PUSH).setText("PUSH"); Radio new Button(shell, SWT.RADIO).setText("RADIO"); Check new Button(shell, SWT.CHECK).setText("Check"); Text Simple Text new Text(shell, SWT.NONE).setText("Simple Text"); Multi Text new Text(shell, SWT.MULTI).setText("Multi Text"); List new List(shell, SWT.NONE); Combo new Combo(shell, SWT.NONE); Introduction to SWT | Rahul Shukla
  • 23. Layout - abstract superclass FillLayout - single row or column RowLayout - multiple rows or columns GridLayout - grid FormLayout - attach the edges of each child StackLayout - children are stacked and topmost is drawn Notes: Controls the position and size of the children of a composite Most layouts have a corresponding layout data object that can be set into a control using Control.setLayoutData(Object) Introduction to SWT | Rahul Shukla
  • 24. Lays out the children of a composite in a single row or column Controls are forced to be the same size All controls are as tall as the tallest control, as wide as the widest Constructors FillLayout() FillLayout(int type) Fields type - HORIZONTAL or VERTICAL marginWidth, marginHeight - pixels between controls and edge of layout spacing - pixels between controls Introduction to SWT | Rahul Shukla Horizontal Vertical
  • 25. public class HelloWorld { public static void main(String[] args) { Display display = new Display(); Shell shell = new Shell(display); shell.setLayout(new FillLayout(SWT.VERTICAL)); new Label(shell, SWT.BORDER).setText("Label"); new Button(shell, SWT.PUSH).setText("PUSH"); new Button(shell, SWT.RADIO).setText("RADIO"); new Button(shell, SWT.CHECK).setText("Check"); new Text(shell, SWT.BORDER).setText("Simple Text"); new Text(shell, SWT.MULTI).setText("Multi Text"); shell.setText("Dialog Title"); shell.setSize(200, 100); shell.open(); while (!shell.isDisposed()) { if (!display.readAndDispatch()) { display.sleep(); } } } } Introduction to SWT | Rahul Shukla
  • 26. Lays out the children of a composite in rows or columns RowData object Specifies the width and height of a specific control Constructors RowLayout(), RowLayout(int type) Fields type - HORIZONTAL or VERTICAL marginWidth, marginHeight, spacing - same as FillLayout marginLeft, marginTop, marginRight, marginBottom - for fine tuning wrap - wrap control to next row when there is no space in current row pack - if true, controls take their preferred size 則 fill - make controls in the same row all have the same height justify - controls will be spread out to occupy all available space Introduction to SWT | Rahul Shukla
  • 27. public class RowLayoutExample { public static void main(String[] args) { Display display = new Display(); Shell shell = new Shell(display); RowLayout layout = new RowLayout(SWT.VERTICAL); layout.marginBottom = 5;layout.marginHeight = 5;layout.marginLeft = 5; layout.marginTop = 5;layout.marginWidth = 5;layout.wrap = true; shell.setLayout(layout); new Label(shell, SWT.BORDER).setText("Label"); new Button(shell, SWT.PUSH).setText("PUSH"); new Button(shell, SWT.RADIO).setText("RADIO"); new Button(shell, SWT.CHECK).setText("Check"); new Text(shell, SWT.BORDER).setText("Simple Text"); new Text(shell, SWT.MULTI).setText("Multi Text"); shell.setText("Dialog Title"); shell.setSize(200, 100); shell.open(); while (!shell.isDisposed()) { if (!display.readAndDispatch()) { display.sleep(); } } } } Introduction to SWT | Rahul Shukla
  • 28. Lays out the children of a composite in a grid Specify the number of columns; the rows are created as needed GridData object Specifies the alignment, span, indent, grab, and desired width and/or height properties for each child of the composite Each child must have its own GridData instance (or null) Constructors GridLayout() GridLayout(int numColumns, boolean makeColumnsEqualWidth) Fields numColumns, makeColumnsEqualWidth marginWidth, marginHeight, horizontalSpacing, verticalSpacing Introduction to SWT | Rahul Shukla
  • 29. Constructors GridData() GridData(int style) 則 GridData(int width, int height) ..and other constructors to set alignment, grab and span Fields horizontalAlignment, verticalAlignment - align child within its grid cell horizontalIndent, verticalIndent - number of pixels to move the child horizontalSpan, verticalSpan - number of columns to occupy (default 1) grabExcessHorizontalSpace, grabExcessVerticalSpace - occupy any space not taken by other controls in the row or column widthHint, heightHint - attempt to make the child this width and/or height minimumWidth, minimumHeight -childs minimum width and/or height Introduction to SWT | Rahul Shukla
  • 30. public class GridLayoutExample { public static void main(String[] args) { Display display = new Display(); Shell shell = new Shell(display); GridLayout layout = new GridLayout(); layout.numColumns = 6; shell.setLayout(layout); for (int i = 0; i < 12; i++) { Button button = new Button(shell, SWT.PUSH); button.setText("B" + i); if (i % 5 == 0) button.setLayoutData(new GridData(64, 32)); if (i == 2) button.setLayoutData(new GridData(SWT.LEFT, SWT.FILL, false,false, 1, 2)); if (i == 3) button.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false,false, 3, 1)); } shell.setText("Dialog Title"); shell.setSize(200, 100); shell.open(); while (!shell.isDisposed()) { if (!display.readAndDispatch()) { display.sleep(); } } } } Introduction to SWT | Rahul Shukla
  • 31. Lays out the children of a composite by attaching edges FormData object specifies the left, right, top, and bottom FormAttachments specifies the width and height for the control FormAttachment object Edges can be attached to a position that is a fraction of the height or width of the parents client area, or they can be attached to, or centered on, an edge of another control Constructors FormLayout() Fields marginWidth, marginHeight, spacing Introduction to SWT | Rahul Shukla
  • 32. Constructors FormAttachment(int numerator) 則 FormAttachment(int numerator, int offset). FormAttachment(int numerator, int denominator, int offset). FormAttachment(Control control). FormAttachment(Control control, int offset). FormAttachment(Control control, int offset, int alignment). Fields numerator, denominator - fraction specifying how far from the top or left of the parents client area to attach the edge (default %). offset - # of pixels to move the edge (+/-) from the attachment point. control, alignment - align the edge to the TOP, BOTTOM, LEFT, RIGHT, CENTER or DEFAULT edge of another control. Introduction to SWT | Rahul Shukla
  • 33. public class FormLayoutExample { public static void main(String[] args) { Display display = new Display(); Shell shell = new Shell(display); FormLayout formLayout = new FormLayout(); shell.setLayout(formLayout); Button button0 = new Button(shell, SWT.PUSH); button0.setText("Button0"); button0.setLayoutData(new FormData()); Button button1 = new Button(shell, SWT.PUSH); button1.setText("Button1"); FormData data = new FormData(); // Allign left edge of Button1 with BUtton 0 data.left = new FormAttachment(button0, 4); button1.setLayoutData(data); Introduction to SWT | Rahul Shukla
  • 34. Button button2 = new Button(shell, SWT.PUSH); button2.setText("Button2"); data = new FormData(); data.left = new FormAttachment(0, 0); data.right = new FormAttachment(100, 0); // allign top edge of Button 2 with button 0 data.top = new FormAttachment(button0, 4); button2.setLayoutData(data); Button button3 = new Button(shell, SWT.PUSH); button3.setText("Button3"); data = new FormData(60, 40); data.right = new FormAttachment(button2, 0, SWT.CENTER); data.top = new FormAttachment(button2, 4); button3.setLayoutData(data); shell.setText("Dialog Title"); shell.setSize(200, 100); shell.open(); while (!shell.isDisposed()) { if (!display.readAndDispatch()) { display.sleep();}}}} Introduction to SWT | Rahul Shukla
  • 35. Composite.layout() Composite.layout(boolean changed) Causes the layout algorithm to position and resize children The changed flag indicates whether the contents of any children have changed in a way that would affect their preferred size, thereby invalidating the layouts cached data. For example, if you have done any of the following then you should call layout (true): Most setText() calls Font changes Adding/removing widgets Adding/removing images Adding/removing items Free layout only happens when the Composite is resized Invokes Composite.layout(false) Introduction to SWT | Rahul Shukla
  • 36. new Table(parent, SWT.SINGLE); Styles SINGLE, MULTI, CHECK, FULL_SELECTION, HIDE_SELECTION Events Selection, DefaultSelection Interesting methods setHeaderVisible(boolean), setLinesVisible(boolean) getHeaderHeight(), getItemHeight() indexOf(TableColumn), indexOf(TableItem) getColumn(int), getItem(int) isSelected(int), setSelection(int[]), setSelection(TableItem[]) setTopIndex(int) Introduction to SWT | Rahul Shukla
  • 37. new TableColumn(table, SWT.LEFT); TableColumn Can have text, image, and alignment Can set column width, and pack columns Generates Move, Resize, and Selection events new TableItem(table, SWT.NONE); TableItem Can have text, image, color, checkbox, gray-state checkbox Introduction to SWT | Rahul Shukla
  • 38. public class TableExample { public static void main(String[] args) { Display display = new Display(); Shell shell = new Shell(display); shell.setLayout(new GridLayout(1, true)); Table table = new Table(shell, SWT.BORDER); table.setHeaderVisible(true); for (int i = 0; i < 4; i++) { TableColumn column = new TableColumn(table, SWT.NONE); column.setText("Column " + i); } for (int i = 0; i < 5; i++) { TableItem item = new TableItem(table, SWT.NULL); for (int j = 0; j < 4; j++) { item.setText(j, "Item " + i + "-" + j); } } for (int i = 0; i < 4; i++) { table.getColumn(i).pack(); } table.pack(); shell.setText("Dialog Title"); shell.pack(); shell.open(); while (!shell.isDisposed()) { if (!display.readAndDispatch()) { display.sleep(); }}}} Introduction to SWT | Rahul Shukla
  • 39. new Tree(parent, SWT.MULTI); new TreeItem(tree, SWT.NONE); new TreeItem(treeItem, SWT.NONE); Styles SINGLE, MULTI, CHECK Events Selection, DefaultSelection, Collapse, Expand Interesting methods setSelection(TreeItem[]) setTopItem(TreeItem) 則 showItem(TreeItem) TreeItem Can have text, image, color, checkbox, gray-state checkbox Introduction to SWT | Rahul Shukla
  • 40. public class TreeExample { public static void main(String[] args) { Display display = new Display(); Shell shell = new Shell(display); shell.setLayout(new GridLayout(1, true)); Tree tree = new Tree(shell, SWT.BORDER); tree.setHeaderVisible(true); for (int i = 0; i < 5; i++) { TreeItem item = new TreeItem(tree, SWT.NULL); item.setText("Item" + i); for (int j = 0; j < 4; j++) { new TreeItem(item, SWT.NULL).setText("Item" + i + j); } } tree.setLayoutData(new GridData(GridData.FILL_BOTH)); shell.setText("Dialog Title"); shell.pack(); shell.open(); while (!shell.isDisposed()) { if (!display.readAndDispatch()) { display.sleep(); } } } } Introduction to SWT | Rahul Shukla
  • 41. new ToolBar(parent, SWT.HORIZONTAL); Styles WRAP, FLAT, RIGHT (text to the right of image) HORIZONTAL, VERTICAL SHADOW_OUT Events None Interesting methods indexOf(ToolItem) getItems(), getItem(int) Notes Display horizontal or vertical rows of ToolItems Introduction to SWT | Rahul Shukla
  • 42. new ToolItem(toolBar, SWT.PUSH); Styles PUSH, CHECK, RADIO, SEPARATOR, DROP_DOWN Events Selection Interesting methods setText(String), setImage(Image), setSelection(boolean), setToolTipText(String), setEnabled(boolean) SEPARATOR style: setWidth(int), setControl(Control) DROP_DOWN style: Selection event with detail == SWT.ARROW, and x, y to position drop-down control (i.e. menu or list or toolbar) Notes Similar API to Button Introduction to SWT | Rahul Shukla
  • 43. Menu(Decorations parent, int style) Parent of menus are Decorations or Shell Menu(Menu menu), Menu(MenuItem item), Menu(Control parent) Convenience constructors for Menu(Decorations, int) Styles BAR, DROP_DOWN, POP_UP, NO_RADIO_GROUP, LEFT_TO_RIGHT, RIGHT_TO_LEFT Events Help, Hide, Show Interesting Methods setLocation(int x, int y) - tell pop-up menu where to open setVisible(boolean) - to display a pop-up menu Decorations.setMenuBar(Menu), Control.setMenu(Menu) Introduction to SWT | Rahul Shukla
  • 44. MenuItem(Menu parent, int style) MenuItem(Menu parent, int style, int index) Styles CHECK, PUSH, RADIO, SEPARATOR, CASCADE Events Arm, Help, Selection Interesting methods setText(String) - string may include mnemonic & accelerator text setImage(Image) - feature not available on all platforms 則 setAccelerator(int) - SWT.MOD1 + 'T', SWT.CONTROL + 'T setEnabled(boolean) - disabled menu item typically drawn gray setSelection(boolean) - for radio or check menu items setMenu(Menu) - for cascade menu items, sets the pull-down menu Introduction to SWT | Rahul Shukla
  • 45. public class ToolBarExample { public static void main(String[] args) { final Display display = new Display(); Shell shell = new Shell(display); shell.setLayout(new RowLayout()); final ToolBar toolBar = new ToolBar(shell, SWT.HORIZONTAL); final ToolItem item = new ToolItem(toolBar, SWT.DROP_DOWN); item.setImage(new Image(null,"D:/workdir/units/tc10.1.0.2013060400/eclipse/rcptraining/icons/open_16.png")); final Menu menu = new Menu(shell, SWT.POP_UP); for (int i = 0; i < 8; i++) { new MenuItem(menu, SWT.PUSH).setText("Item " + i); } item.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent event) { if (event.detail == SWT.ARROW) { Point point = new Point(event.x, event.y); point = display.map(toolBar, null, point); menu.setLocation(point); menu.setVisible(true); }}}); shell.setText("Dialog Title"); shell.setSize(200, 100); shell.open(); while (!shell.isDisposed()) { if (!display.readAndDispatch()) { display.sleep(); }}}} Introduction to SWT | Rahul Shukla
  • 46. Events indicate that something interesting has happened mouse, keyboard, paint, focus, move, resize, ... Widgets can issue a higher-level event to indicate a state change For example, a Button may track mouse press, mouse move and mouse release in order to issue selection Event classes contain detailed information about what happened Listeners are instances of classes that implement an interface of event-specific methods Introduction to SWT | Rahul Shukla
  • 47. Package org.eclipse.swt.events Follows standard Java listener pattern Event classes extend java.util.EventObject Listener interfaces extend java.util.EventListener Adapter classes for multi-method listener interfaces (convenience) 則 Use addTypeListener(TypeListener) to hook listener to widget Use removeTypeListener(TypeListener) to unhook 則 Multiple listeners are called in the order they were added For example, to listen for dispose event on a widget addDisposeListener(DisposeListener listener) widget.addDisposeListener(new DisposeListener() { public void widgetDisposed(DisposeEvent event) { // widget was disposed } }); Introduction to SWT | Rahul Shukla
  • 48. Introduction to SWT | Rahul Shukla
  • 49. public class SelectionListenerExample { public static void main(String[] args) { Display display = new Display(); Shell shell = new Shell(display); shell.setLayout(new RowLayout()); final Button land = new Button(shell, SWT.RADIO); land.setText("By Land"); final Button sea = new Button(shell, SWT.RADIO); sea.setText("By Sea"); sea.setSelection(true); SelectionListener listener = new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { Button button = (Button) e.widget; if (!button.getSelection()) return; System.out.println("Arriving " + button.getText()); }}; land.addSelectionListener(listener); sea.addSelectionListener(listener); shell.setText("Dialog Title"); shell.setSize(200, 100); shell.open(); while (!shell.isDisposed()) { if (!display.readAndDispatch()) { display.sleep(); }}}} Introduction to SWT | Rahul Shukla
  • 50. Get a system color using Device.getSystemColor (int colorConstant) Do not dispose of system colors Color(Device device, int red, int green, int blue) Color(Device device, RGB rgb) Example: Color red = new Color(display, 0xFF, 0x00, 0x00); OS resources are allocated, therefore must dispose Introduction to SWT | Rahul Shukla
  • 51. Image(Device device, ImageData data) Create image from image data Image(Device device, int width, int height) Blank off-screen image used for drawing Image(Device device, String filename) Image loaded from file Image(Device device, Image image, int flag) Apply some transformation: SWT.DISABLE, SWT.GRAY OS resources are allocated, therefore must dispose Introduction to SWT | Rahul Shukla
  • 52. Font(Device device, FontData data) Font(Device display, String name, int height, int style) Example: new Font(display, "Arial", 40, SWT.BOLD); OS resources are allocated, therefore must dispose Button button = new Button(shell, SWT.PUSH); button.setText("Button"); Font font = new Font(display, "Arial", 40, SWT.BOLD); button.setFont(font); Introduction to SWT | Rahul Shukla
  • 53. Display.asyncExec(Runnable runnable) Causes the argument to be run by the UI thread of the Display Display.syncExec(Runnable runnable) Causes the argument to be run by the UI thread of the Display, and causes the current thread to wait for the Runnable to finish Display.timerExec(int milliseconds, Runnable runnable) Causes the Runnable argument to be evaluated after the specified number of milliseconds have elapsed Notes These methods do not create a thread; they simply execute the Runnable argument in the UI thread Introduction to SWT | Rahul Shukla
  • 54. public class ProgressBarExample { public static void main(String[] args) { final Display display = new Display(); Shell shell = new Shell(display); final ProgressBar bar = new ProgressBar(shell, SWT.NONE); bar.setSize(200, 32); shell.pack(); shell.open(); final int maximum = bar.getMaximum(); new Thread() { public void run() { for (int i = 0; i <= maximum; i++) { try {Thread.sleep(100); } catch (Throwable th) { } final int index = i; display.asyncExec(new Runnable() { public void run() { bar.setSelection(index); }});}}}.start(); shell.setText("Dialog Title"); shell.setSize(200, 100); shell.open(); while (!shell.isDisposed()) { if (!display.readAndDispatch()) { display.sleep(); }}}} Introduction to SWT | Rahul Shukla
  • 55. DragSource Create on a widget that is eligible as a drag source Provides content and format information from the source widget to the Drag and Drop operation DropTarget Create on a widget that is eligible as a drop target Receives content and format information from a Drag and Drop operation, and updates the target widget accordingly Clipboard Allows deferred transfer of data within and between applications Transfer & subclasses Converts between Java representation and platform specific representation of data and vice versa Provided by default: Text, RTF, File Introduction to SWT | Rahul Shukla
  • 56. Thanks Introduction to SWT | Rahul Shukla