Es folgen spezielle Informationen und Beispiele für die Integration von jowidgets Code in Projekte, welche auf dem Standard Widget Toolkit (Swt) basieren.
Das SwtToJoFramesSnipped demonstriert die Erzeugung von Fenstern innerhalb einer nativen SWT Applikation:
1 package org.jowidgets.examples.swt.snipped;
2
3 import net.miginfocom.swt.MigLayout;
4
5 import org.eclipse.swt.SWT;
6 import org.eclipse.swt.events.SelectionAdapter;
7 import org.eclipse.swt.events.SelectionEvent;
8 import org.eclipse.swt.widgets.Button;
9 import org.eclipse.swt.widgets.Display;
10 import org.eclipse.swt.widgets.Shell;
11 import org.jowidgets.api.toolkit.Toolkit;
12 import org.jowidgets.api.widgets.IFrame;
13 import org.jowidgets.api.widgets.blueprint.IDialogBluePrint;
14 import org.jowidgets.api.widgets.blueprint.IFrameBluePrint;
15 import org.jowidgets.common.types.Dimension;
16 import org.jowidgets.tools.widgets.blueprint.BPF;
17
18 public final class SwtToJoFramesSnipped {
19
20 private SwtToJoFramesSnipped() {}
21
22 public static void main(final String[] args) throws Exception {
23 final Display display = new Display();
24
25 final Shell shell = new Shell(display);
26 shell.setSize(1024, 768);
27 shell.setLayout(new MigLayout("", "[]", "[][]"));
28
29 //add button to open a jowidgets root frame
30 final Button frameButton = new Button(shell, SWT.NONE);
31 frameButton.setText("Create root frame");
32 frameButton.addSelectionListener(new SelectionAdapter() {
33
34 @Override
35 public void widgetSelected(final SelectionEvent e) {
36 final IFrameBluePrint frameBp = BPF.frame("Jowidgets Root Frame");
37 frameBp.setSize(new Dimension(400, 300));
38 frameBp.setAutoDispose(true);
39 final IFrame frame = Toolkit.createRootFrame(frameBp);
40 frame.add(BPF.textLabel("This is a jowidgets root frame"));
41 frame.setVisible(true);
42 }
43
44 });
45
46 //add button to open a jowidgets modal dialog
47 final Button dialogButton = new Button(shell, SWT.NONE);
48 dialogButton.setText("Create dialog");
49 dialogButton.addSelectionListener(new SelectionAdapter() {
50
51 @Override
52 public void widgetSelected(final SelectionEvent e) {
53 final IDialogBluePrint dialogBp = BPF.dialog("Jowidgets dialog");
54 dialogBp.setSize(new Dimension(400, 300));
55 final IFrame dialog = Toolkit.getWidgetFactory().create(shell, dialogBp);
56 dialog.add(BPF.textLabel("This is a jowidgets modal dialog"));
57 dialog.setVisible(true);
58 }
59
60 });
61
62 shell.open();
63 while (!shell.isDisposed()) {
64 if (!display.readAndDispatch()) {
65 display.sleep();
66 }
67 }
68 display.dispose();
69 }
70
71 }
Um für ein Swt Composite ein
IComposite Wrapper zu erzeugen, kann man
die Utility Klasse SwtToJoWrapper
verwenden, welche sich im Modul
org.jowidgets.spi.impl.swt.addons befindet.
Der folgende Code zeigt einen Teil der Implementierung:
1 public final class SwtToJoWrapper {
2
3 private SwtToJoWrapper() {}
4
5 public static IComposite create(final Composite composite) {
6 Assert.paramNotNull(composite, "composite");
7 final IComposite result = Toolkit.getWidgetWrapperFactory().createComposite(composite);
8 composite.addDisposeListener(new DisposeListener() {
9 @Override
10 public void widgetDisposed(final DisposeEvent e) {
11 result.dispose();
12 }
13 });
14 return result;
15 }
16
17 }
In Zeile 8 wird auf dem SWT Composite ein
DisposeListener hinzugefügt, der
dasIComposite Wrapper disposed, sobald das
SWT Composite disposed wird. Dies ist im Normalfall genau da
gewünschte Verhalten.
Das folgende Beispiel demonstriert die Verwendung:
1 final IComposite joComposite = SwtToJoWrapper.create(swtComposite);
Das
SwtToJoCompositeSnipped
demonstriert die Erzeugung eines IComposite
Wrapper innerhalb einer nativen SWT Applikation:
1 import org.eclipse.swt.SWT;
2 import org.eclipse.swt.layout.FillLayout;
3 import org.eclipse.swt.widgets.Composite;
4 import org.eclipse.swt.widgets.Display;
5 import org.eclipse.swt.widgets.Shell;
6 import org.jowidgets.api.widgets.IComposite;
7 import org.jowidgets.api.widgets.IInputField;
8 import org.jowidgets.common.widgets.controller.IInputListener;
9 import org.jowidgets.common.widgets.layout.MigLayoutDescriptor;
10 import org.jowidgets.spi.impl.swt.addons.SwtToJoWrapper;
11 import org.jowidgets.tools.widgets.blueprint.BPF;
12
13 public final class SwtToJoCompositeSnipped {
14
15 private SwtToJoCompositeSnipped() {}
16
17 public static void main(final String[] args) throws Exception {
18 //create a swt display
19 final Display display = new Display();
20
21 //create a swt shell
22 final Shell shell = new Shell(display);
23 shell.setSize(400, 300);
24 shell.setText("SwtToJo composite snipped");
25 shell.setLayout(new FillLayout());
26
27 //create a swt composite
28 final Composite swtComposite = new Composite(shell, SWT.NONE);
29
30 //create a jowidgets composite wrapper and do some jowidgets stuff
31 final IComposite joComposite = SwtToJoWrapper.create(swtComposite);
32 joComposite.setLayout(new MigLayoutDescriptor("[][grow]", "[]"));
33
34 //add a label
35 joComposite.add(BPF.textLabel("Name"));
36
37 //add a input field for double values
38 final IInputField<String> nameField = joComposite.add(BPF.inputFieldString(), "grow x");
39 nameField.addInputListener(new IInputListener() {
40 @Override
41 public void inputChanged() {
42 //CHECKSTYLE:OFF
43 System.out.println("Hello " + nameField.getValue());
44 //CHECKSTYLE:ON
45 }
46 });
47
48 //open the swt shell and start event dispatching
49 shell.open();
50 while (!shell.isDisposed()) {
51 if (!display.readAndDispatch()) {
52 display.sleep();
53 }
54 }
55 display.dispose();
56 }
57 }