SWT & JFace
 
1


2
Подключаем SWT
- 
org.eclipse.swt_3.5.2.v3557f.jar
- 
org.eclipse.swt.win32.win32.x86_3.5.2.v3557f.jar
3
"Hello, World" in SWT
import org.eclipse.swt.widgets.*; 
import org.eclipse.swt.SWT; 
public class HelloWorld { 
  public static void main(String[] args) { 
Display display = new Display(); 
Shell shell = new Shell(display); 
Label label = new Label(shell, SWT.CENTER); 
label.setText("Hello, World"); 
label.setBounds(shell.getClientArea());
shell.open(); 
while (!shell.isDisposed()) { 
	if (!display.readAndDispatch())    display.sleep(); 
} 
display.dispose(); 
}  } 
4

5
Создание элементов SWT
- 
Всегда создаётся пара объектов
- 
Label label = new Label(shell, SWT.CENTER);
- 
//что решает ряд проблем, например (MFC)
- 
CButton button;    // Construct the C++ object on the stack CString str = _T("Hi");         // Create a CString to text button.SetWindowText(str); // Set the button text-PROBLEM!
- 
button.Create(…);              // Creates the Windows widget
 
- 
Родительский эл. и стиль
- 
Label label = new Label(shell, SWT.CENTER);
 
6
Освобождение ресурсов в SWT
- 
Rule 1 : If You Created it, You Dispose It
- 
Color color1 = new Color(display, 255, 0, 0);
- 
………….
- 
Rule 1 says you created it, so you must dispose it when you are done using it, like this:
- 
color1.dispose();
- 
However, if you don't call a constructor to get a resource, you must not dispose the resource:
- 
Color color2 = display.getSystemColor(SWT.COLOR_RED);
- 
…………..
 
7
- 
Rule 2 : Disposing the Parent Disposes the Children
- 
// Create the text field
- 
Text text = new Text(shell, SWT.BORDER);
- 
// Create the new font
- 
Font font = new Font(display, "Arial", 14, SWT.BOLD);
- 
// Set the font into the text field
- 
text.setFont(font);
- 
???.dispose();
 
8
- 
Rule 3 : Ignoring Disposed Objects
- 
org.eclipse.swt.SWTException: Widget is disposed at org.eclipse.swt.SWT.error(SWT.java:2332) at org.eclipse.swt.SWT.error(SWT.java:2262) at org.eclipse.swt.widgets.Widget.error(Widget.java:385) at org.eclipse.swt.widgets.Control.getDisplay(Control.java:735) at org.eclipse.swt.widgets.Widget.isValidThread(Widget.java:593) at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:315) at org.eclipse.swt.widgets.Text.getText(Text.java:705) at Broken.main(Version.java:24)
 
9
Display object
- 
void asyncExec(Runnable runnable)
- 
Gives non-user-interface threads the ability to invoke the protected functions of the SWT widget classes. The user-interface thread performs the code (invokes the run() method) of the runnable at its next "reasonable opportunity." This function returns immediately.
 
- 
void syncExec(Runnable runnable)
- 
Like asyncExec(), but this function returns after the run method of the Runnable object returns.
 
- 
void update()
- 
Causes all pending paint requests to be processed.
 
- 
static Display findDisplay (Thread thread)
- 
Given a user-interface thread, this function returns the associated Display object. If the given thread isn't a user-interface thread, this method returns null.
 
10
Shell object
- 
BORDER - Adds a border.
- 
CLOSE  - Adds a close button.
- 
MIN - Adds a minimize button.
- 
MAX - Adds a maximize button.
- 
NO_TRIM - Creates a Shell that has no border and can't be moved, closed, resized, minimized, or maximized. Not very useful, except perhaps for splash screens.
- 
RESIZE - Adds a resizable border.
- 
TITLE - Adds a title bar.
- 
DIALOG_TRIM = TITLE | CLOSE | BORDER.
- 
SHELL_TRIM = CLOSE | TITLE | MIN | MAX | RESIZE.
- 
APPLICATION_MODAL - Creates a Shell that's modal to the application.
- 
PRIMARY_MODAL - Creates a primary modal Shell.
- 
SYSTEM_MODAL - Creates a Shell that's modal system-wide.
- 
MODELESS - Creates a modeless Shell.
11
Менеджеры расположения
- 
FillLayout - This layout arranges components horizontally on a row or vertically on a column (BoxLayout)
- 
RowLayout  - Similar to FillLayout but more flexible, allowing multiple rows, fill, wrapping, and custom spacing (FlowLayout)
- 
GridLayout  - Lays components on a grid; offers many options for fine-grained control (GridBagLayout)
- 
FormLayout  - Relative layout that uses attachments to a container edge or a sibling widget's edge (Нет аналога)
- 
StackLayout - Stacks components, only top component is visible (CardLayout)
- 
null layout   - You can place controls absolutely.
12

13
Untyped  Listeners
- 
Listener interface, contains one method:
- 
void handleEvent(Event event)
 
- 
Add an untyped listener to a widget:
- 
void addListener(int eventType, Listener l)
 
- 
button.addListener(SWT.Selection, new Listener() { public void handleEvent(Event e) {
- 
switch (e.type) {
- 
case SWT.Selection:
- 
System.out.println(“pressed");
- 
break;
- 
} } };
14
Typed  Listeners
- 
ControlListener  - Listens for move and resize events
- 
DisposeListener - Listens for dispose events
- 
FocusListener - Listens for focus gained and lost events
- 
HelpListener - Listens for help requests
- 
KeyListener  - Listens for key presses and releases
- 
MenuListener  - Listens for menu events
- 
ModifyListener  - Listens for text modifications
- 
MouseListener  - Listens for mouse button presses
- 
MouseMoveListener  - Listens for mouse movements
- 
MouseTrackListener  - Listens for when the mouse enters
- 
PaintListener - Listens for paint events
- 
SelectionListener  - Listens for selection events (for example, button clicks)
- 
ShellListener - Listens for shell events
- 
TraverseListener  - Listens for traverse events
- 
TreeListener - Listens for tree events
- 
VerifyListener - Listens for, and potentially intercepts, text modifications
15

16
- 
JFace:
- 
Provides Viewer classes that handle the tedious tasks of populating, sorting, filtering, and updating widgets
- 
Provides Actions to allow users to define their own behavior and to assign that behavior to specific components, e.g. menu items, tool items, push buttons, etc.
- 
Provides registries that hold Images and Fonts
- 
Defines standard dialogs and wizards, and defines a framework for building complex interactions with the user
 
17

18
- 
Window: The org.eclipse.jface.window package provides window creation and management facilities. Of particular interest is the ApplicationWindow class, which provides a higher-level application window and encapsulates the SWT event loop.
- 
Viewers: The org.eclipse.jface.viewers package provides a framework of viewers such as TreeViewer and TableViewer, which are model-driven components that make use of SWT widgets and adapt content of a model to the widget.
- 
Dialogs: The org.eclipse.jface.dialogs package provides several commonly used dialog boxes.
- 
Actions: The org.eclipse.jface.actions package provides a UI action framework that's similar