Budapes(  Műszaki  és  Gazdaságtudományi  Egyetem  
Méréstechnika  és  Információs  Rendszerek  Tanszék  
User	
  Interface	
  Programming	
  in	
  SWT	
  
Eclipse	
  Based	
  Technologies	
  
h:p://inf.mit.bme.hu/edu/courses/eat	
  	
  
Developing	
  Graphical	
  User	
  Interfaces	
  
! Java	
  Graphics	
  Toolkits	
  
o AWT	
  
• NaGve	
  widgets	
  
• Only	
  common	
  subset	
  of	
  plaKorm	
  widgets	
  available!	
  
o Swing	
  
• Manually	
  drawn	
  widgets	
  
• Superset	
  of	
  plaKorm	
  widgets	
  
• Extensible	
  
o JavaFX	
  
• Available	
  with	
  Java	
  7	
  (but	
  not	
  added	
  by	
  default!)	
  
• Completely	
  rethinked	
  UI	
  model	
  
2	
  
Problems	
  with	
  User	
  Interfaces	
  
! “Does	
  not	
  look	
  like	
  Word”	
  problem	
  
o Reusing	
  plaKorm	
  look-­‐and-­‐feel	
  
o InternaGonalizaGon	
  se[ngs	
  
o Java	
  goal:	
  look	
  everywhere	
  the	
  same	
  
! AWT	
  
o very	
  low	
  level	
  
! Swing	
  	
  
o memory	
  usage	
  and	
  performance	
  issues	
  at	
  start	
  
o Since	
  Java	
  6	
  more	
  than	
  appropriate	
  
! Java	
  FX	
  
o SGll	
  not	
  widely	
  used	
  
3	
  
SWT	
  –	
  Standard	
  Widget	
  Toolkit	
  
! Developed	
  by	
  IBM	
  
o Swing	
  was	
  not	
  appropriate	
  
o When	
  starGng	
  the	
  Eclipse	
  project	
  
• Based	
  on	
  Smalltalk	
  naGve	
  widget	
  accessing	
  experiments	
  
o Goals	
  
• Use	
  naGve	
  widgets	
  everywhere	
  possible	
  
• Looks	
  like	
  a	
  naGve	
  applicaGon	
  
4	
  
SWT	
  –	
  Standard	
  Widget	
  Toolkit	
  
! Reusing	
  plaKorm	
  widgets	
  
o Fast	
  
o PlaKorm	
  look-­‐and-­‐feel	
  
• Every	
  plaKorm	
  service	
  available	
  
– OLE,	
  drag-­‐n-­‐drop,	
  …	
  
o Needs	
  porGng!	
  
• Appears	
  differently	
  
5	
  
Source	
  of	
  pictures:	
  
h:p://eclipse.org/swt	
  
Programming	
  Model	
  
6	
  
User	
  acGon	
  
Event	
  
Event	
  Queue	
  
Event	
  
Event	
  
Programming	
  Model	
  
7	
  
User	
  acGon	
  
Event	
  
Event	
  Queue	
  
Event	
  
Event	
  
SWT:	
  
Display	
  object	
  
Programming	
  Model	
  
8	
  
User	
  acGon	
  
Event	
  
Event	
  Queue	
  
Event	
  
Event	
  
SWT:	
  
Display	
  object	
  
A	
  Window	
  in	
  SWT:	
  
Shell	
  
SWT	
  Event	
  Loop	
  
! Explicit	
  event	
  loop	
  
o The	
  applicaGon	
  needs	
  to	
  include	
  it!	
  
• CollecGng	
  incoming	
  events	
  
• and	
  processing	
  it	
  
o Loop	
  terminaGon	
  
• ApplicaGon	
  terminates	
  
o Very	
  similar	
  to	
  Win32	
  API	
  
9	
  
SWT	
  Event	
  Loop	
  
public static void main(String [] args) {!
" "Display display = new Display();!
" "final Shell shell = new Shell(display);!
" "shell.setSize(400, 400);!
" "shell.open();!
!
" "while (!shell.isDisposed()) {!
" " "if (!display.readAndDispatch())!
" " " "display.sleep();!
" "}!
" "display.dispose();!
"}	
  
10	
  
Event	
  Handling	
  
! Event:	
  something	
  the	
  applicaGon	
  needs	
  to	
  react	
  
o User	
  events	
  
• Mouse	
  move	
  
• Key	
  presses	
  
• …	
  
o System	
  
• Time	
  passes	
  
• …	
  
11	
  
Event	
  Handling	
  
! Assigning	
  Event	
  Listeners	
  
o Generic	
  event	
  listeners	
  for	
  every	
  widget	
  
• Event	
  informaGon	
  available	
  as	
  style	
  bits	
  (see	
  later)	
  
o Typed	
  listeners	
  when	
  applicable	
  
• Keyboard	
  
• Mouse	
  
• MulGtouch	
  
• …	
  
! Both	
  Listener	
  and	
  Adapters	
  available	
  
12	
  
SWT	
  widgets	
  
! RelaGvely	
  small	
  widget	
  hierarchy	
  
o E.g.	
  as	
  opposed	
  to	
  Swing	
  
o A	
  class	
  describes	
  mulGple	
  widgets	
  
• SelecGon	
  happens	
  via	
  style	
  bits	
  
! AssociaGng	
  model	
  objects	
  possible	
  
o getData()/setData()	
  methods	
  
o Very	
  useful	
  for	
  generic	
  UI	
  processing	
  code	
  and	
  data	
  
bindings	
  
13	
  
Style	
  bits	
  
! AddiGonal	
  informaGon	
  
• E.g.	
  Bu:on-­‐>CheckBox	
  	
  
! Constructor	
  parameter	
  
o It	
  is	
  not	
  possible	
  to	
  change	
  later	
  
o The	
  available	
  styles	
  depend	
  on	
  specific	
  widgets	
  
! ImplementaGon	
  
o Works	
  with	
  Java	
  1.4	
  -­‐>	
  no	
  ‘enum’	
  available	
  
o Using	
  int	
  constants	
  from	
  the	
  SWT	
  class	
  
• MulGple	
  style	
  bits	
  can	
  be	
  selected	
  via	
  bitwise	
  or:	
  
– SWT.SEPARATOR|SWT.HORIZONTAL	
  
14	
  
SWT	
  widgets	
  
! Manual	
  instanGaGon	
  
o No	
  factory	
  
o Strict	
  containment	
  hierarchy	
  
! Manual	
  cleanup	
  
o Garbage	
  collecGon	
  is	
  not	
  enough!	
  
• NaGve	
  widgets!	
  
o Method	
  dispose()	
  needs	
  to	
  be	
  called	
  manually	
  
15	
  
Dispose	
  rules	
  
16	
  
Dispose	
  rules	
  
1. Base	
  rule:	
  	
  
o If  you  create  it,  you  dispose  it!  
2. Reverse	
  rule:	
  
o Do  only  dispose  it  if  you  create  it!  
3. ExcepGon:	
  
o Widgets	
  hierarchies	
  are	
  disposed	
  by	
  disposing	
  the	
  
top-­‐level	
  element	
  
17	
  
Dispose	
  rules	
  
1. Base	
  rule:	
  	
  
o If  you  create  it,  you  dispose  it!  
2. Reverse	
  rule:	
  
o Do  only  dispose  it  if  you  create  it!  
3. ExcepGon:	
  
o Widgets	
  hierarchies	
  are	
  disposed	
  by	
  disposing	
  the	
  
top-­‐level	
  element	
  
18	
  
Dispose	
  rules	
  
1. Base	
  rule:	
  	
  
o If  you  create  it,  you  dispose  it!  
2. Reverse	
  rule:	
  
o Do  only  dispose  it  if  you  create  it!  
3. ExcepGon:	
  
o Widgets	
  hierarchies	
  are	
  disposed	
  by	
  disposing	
  the	
  
top-­‐level	
  element	
  
19	
  
Common	
  widgets	
  
! Bu:on	
  
o Push,	
  radio,	
  combo	
  bu:ons	
  
! Label	
  
o Read-­‐only	
  text	
  display	
  field	
  (w	
  or	
  w/o	
  icons)	
  
! Text	
  
o Writeable	
  text	
  fields	
  (single	
  line,	
  mulGline)	
  
! StyledText	
  
o Custom	
  drawn	
  mulGline	
  text	
  field	
  (e.g.	
  Eclipse	
  editors)	
  
20	
  
Common	
  widgets	
  
! Composite	
  
o Stores	
  other	
  widgets	
  
o Allows	
  se[ng	
  layouts	
  
! Canvas	
  
o Manual	
  drawing	
  
! Menu,	
  Toolbar	
  
! List,	
  Tree,	
  Table	
  
o Specific	
  widgets	
  for	
  displaying	
  large	
  amounts	
  of	
  data	
  
o Avoids	
  creaGng	
  a	
  huge	
  number	
  of	
  bu:ons,	
  etc.	
  
21	
  
Common	
  Widgets	
  
! And	
  many	
  more:	
  h:p://eclipse.org/swt/widgets/	
  
22	
  
AddiGonal	
  widget	
  –	
  Nebula	
  project	
  
! h:p://eclipse.org/nebula/	
  
! Date-­‐Gme	
  handling	
  
	
  
! Forma:edText	
  
23	
  
AddiGonal	
  widgets	
  –	
  Nebula	
  project	
  
! Gan:	
  diagram	
  
! Galery	
  
24	
  
Dialog	
  windows	
  
! Types	
  
o MessageBox-­‐	
  displaying	
  messages	
  
o ColorDialog	
  –	
  color	
  choosing	
  
o DirectoryDialog	
  –	
  directory	
  structure	
  
o FileDialog	
  –	
  file	
  selecGon/save	
  
o FontDialog	
  –	
  font	
  selecGng	
  
o PrintDialog	
  –	
  prinGng	
  
o These	
  are	
  not	
  widgets!	
  
! Reuses	
  operaGng	
  system	
  dialogs	
  
o Specific	
  dialog	
  se[ngs	
  available	
  
• Pl.	
  SWT.SHEET	
  
25	
  
Dialog	
  windows	
  
! Types	
  
o MessageBox-­‐	
  displaying	
  messages	
  
o ColorDialog	
  –	
  color	
  choosing	
  
o DirectoryDialog	
  –	
  directory	
  structure	
  
o FileDialog	
  –	
  file	
  selecGon/save	
  
o FontDialog	
  –	
  font	
  selecGng	
  
o PrintDialog	
  –	
  prinGng	
  
o These	
  are	
  not	
  widgets!	
  
! Reuses	
  operaGng	
  system	
  dialogs	
  
o Specific	
  dialog	
  se[ngs	
  available	
  
• Pl.	
  SWT.SHEET	
  
26	
  
Complex  Form  Design  
Layouts	
  
27	
  
Complex	
  Forms	
  
28	
  
How	
  
m
any	
  
widgets	
  
d
oes	
  
t
he	
  
window	
  
c
ontain?	
  
Complex	
  Forms	
  
29	
  
How	
  
m
any	
  
widgets	
  
d
oes	
  
t
he	
  
window	
  
c
ontain?	
  
Complex	
  Forms	
  
30	
  
How	
  
m
any	
  
widgets	
  
d
oes	
  
t
he	
  
window	
  
c
ontain?	
  
Complex	
  Forms	
  
31	
  
How	
  
m
any	
  
widgets	
  
d
oes	
  
t
he	
  
window	
  
c
ontain?	
  
Widget	
  Containment	
  Hierarchy	
  
! Strict	
  containment	
  hierarchy	
  
o Every	
  widget	
  has	
  a	
  single	
  parent	
  
o ExcepGon:	
  Shell	
  (window)	
  
! Composite	
  widget	
  
o Contains	
  other	
  widgets	
  
o Layout	
  can	
  be	
  created	
  
32	
  
Layout	
  
! SeparaGon	
  of	
  arrangement	
  and	
  content	
  
o Decides	
  posiGoning	
  
o RelaGve	
  to	
  container	
  
o KöveG	
  a	
  konténer	
  méretének	
  változását	
  
! Abstract	
  Base	
  class:	
  Layout	
  
o Do	
  not	
  call	
  it	
  manually	
  
33	
  
Layout	
  Hints	
  
! Every	
  widget	
  might	
  give	
  some	
  posiGoning	
  
informaGon	
  
o Use	
  #setLayoutData	
  
o Different	
  data	
  for	
  different	
  layouts	
  
• Inconsistent	
  se[ng	
  results	
  in	
  runGme	
  error	
  
34	
  
Layouts	
  in	
  SWT	
  
! Built-­‐in	
  layouts	
  available	
  
o FillLayout	
  
o RowLayout	
  
o GridLayout	
  
o FormLayout	
  
o StackLayout	
  
! Default	
  layout	
  
o Set	
  up	
  coordinates	
  and	
  size	
  for	
  each	
  widget!	
  
35	
  
Layouts	
  in	
  SWT	
  
! Built-­‐in	
  layouts	
  available	
  
o FillLayout	
  
o RowLayout	
  
o GridLayout	
  
o FormLayout	
  
o StackLayout	
  
! Default	
  layout	
  
o Set	
  up	
  coordinates	
  and	
  size	
  for	
  each	
  widget!	
  
36	
  
If	
  no	
  layout	
  is	
  defined	
  and	
  
no	
  size/posiGoning	
  is	
  set	
  
up,	
  the	
  widget	
  will	
  not	
  
appear!	
  
FillLayout	
  
! Fill	
  all	
  space	
  
o Places	
  all	
  elements	
  next	
  to	
  each	
  other	
  
o Horizontal	
  or	
  verGcal	
  
o PrimiGve	
  layout	
  
• Ignores	
  suggested	
  size	
  of	
  widgets!	
  
! May	
  be	
  useful	
  for	
  
nested	
  composites	
  
RowLayout	
  
! Similar	
  to	
  FillLayout	
  
o Arranges	
  elements	
  into	
  rows	
  or	
  columns	
  
o Considers	
  widget	
  size	
  
! Hint	
  object:	
  RowData	
  (LayoutData)	
  :	
  height,	
  width	
  
o Sets	
  the	
  preferred	
  size	
  of	
  the	
  widget	
  
GridLayout	
  
! Grid	
  arrangement	
  
o Fixed	
  number	
  of	
  columns	
  
! Important	
  properGes	
  
o horizontalSpacing	
  
o makeColumnsEqualWidth	
  
o marginHeight	
  
o marginWidth	
  
o numColumns	
  
o verGcalSpacing	
  
FormLayout	
  
! Complex	
  layout	
  
! Layout	
  data	
  stores	
  a:achments	
  
o RelaGve	
  posiGoning	
  for	
  
a	
  selected	
  side	
  
o DefiniGon	
  
• y=ax+b	
  	
  
• y:	
  height,	
  x:	
  width	
  
• a:	
  relaGve	
  posiGoning,	
  b:	
  ofset	
  
FormLayout	
  
! Complex	
  layout	
  
! Layout	
  data	
  stores	
  a:achments	
  
o RelaGve	
  posiGoning	
  for	
  
a	
  selected	
  side	
  
o DefiniGon	
  
• y=ax+b	
  	
  
• y:	
  height,	
  x:	
  width	
  
• a:	
  relaGve	
  posiGoning,	
  b:	
  ofset	
  
Absolute	
  
posiGon	
  wrt	
  
container	
  
FormLayout	
  
! Complex	
  layout	
  
! Layout	
  data	
  stores	
  a:achments	
  
o RelaGve	
  posiGoning	
  for	
  
a	
  selected	
  side	
  
o DefiniGon	
  
• y=ax+b	
  	
  
• y:	
  height,	
  x:	
  width	
  
• a:	
  relaGve	
  posiGoning,	
  b:	
  ofset	
  
Right	
  and	
  
down	
  wrt	
  the	
  
2nd	
  widget	
  
StackLayout	
  
! Each	
  element	
  has	
  the	
  same	
  size	
  and	
  posiGon	
  
! Only	
  the	
  top	
  control	
  will	
  be	
  visible	
  
o StackLayout.topControl
o A|er	
  se[ng,	
  layout()	
  needs	
  to	
  be	
  called	
  for	
  UI	
  
update	
  
! Margin	
  se:able	
  
o marginHeight	
  
o marginWidth
Layout	
  
Layout	
  
! Many	
  layouts	
  available	
  
! Custom	
  layouts	
  possible	
  
o Create	
  new	
  layout	
  implementaGon	
  
o E.g.	
  responsive	
  layout	
  from	
  
h:p://www.codeaffine.com/2014/02/24/responsive-­‐
uis-­‐with-­‐eclipse-­‐and-­‐swt/	
  	
  
! Not	
  required	
  to	
  use	
  
o Widget#setBound(x,y,w,h)	
  
• Container-­‐relaGve	
  posiGoning	
  
• Size	
  
Layout	
  
! Many	
  layouts	
  available	
  
! Custom	
  layouts	
  possible	
  
o Create	
  new	
  layout	
  implementaGon	
  
o E.g.	
  responsive	
  layout	
  from	
  
h:p://www.codeaffine.com/2014/02/24/responsive-­‐
uis-­‐with-­‐eclipse-­‐and-­‐swt/	
  	
  
! Not	
  required	
  to	
  use	
  
o Widget#setBound(x,y,w,h)	
  
• Container-­‐relaGve	
  posiGoning	
  
• Size	
  
Layout	
  
! Many	
  layouts	
  available	
  
! Custom	
  layouts	
  possible	
  
o Create	
  new	
  layout	
  implementaGon	
  
o E.g.	
  responsive	
  layout	
  from	
  
h:p://www.codeaffine.com/2014/02/24/responsive-­‐
uis-­‐with-­‐eclipse-­‐and-­‐swt/	
  	
  
! Not	
  required	
  to	
  use	
  
o Widget#setBound(x,y,w,h)	
  
• Container-­‐relaGve	
  posiGoning	
  
• Size	
  
Layout	
  
! Many	
  layouts	
  available	
  
! Custom	
  layouts	
  possible	
  
o Create	
  new	
  layout	
  implementaGon	
  
o E.g.	
  responsive	
  layout	
  from	
  
h:p://www.codeaffine.com/2014/02/24/responsive-­‐
uis-­‐with-­‐eclipse-­‐and-­‐swt/	
  	
  
! Not	
  required	
  to	
  use	
  
o Widget#setBound(x,y,w,h)	
  
• Container-­‐relaGve	
  posiGoning	
  
• Size	
  
Layout	
  
! Many	
  layouts	
  available	
  
! Custom	
  layouts	
  possible	
  
o Create	
  new	
  layout	
  implementaGon	
  
o E.g.	
  responsive	
  layout	
  from	
  
h:p://www.codeaffine.com/2014/02/24/responsive-­‐
uis-­‐with-­‐eclipse-­‐and-­‐swt/	
  	
  
! Not	
  required	
  to	
  use	
  
o Widget#setBound(x,y,w,h)	
  
• Container-­‐relaGve	
  posiGoning	
  
• Size	
  
Sample	
  applicaGon	
  
private void createSShell() {!
"sShell = new Shell();!
"sShell.setText("Shell");!
"sShell.setLayout(new GridLayout());!
"sShell.setSize(new Point(90,127));!
"label1 = new Label(sShell, SWT.NONE);!
"label1.setText("Some Text");!
"label2 = new Label(sShell, SWT.SEPARATOR |
SWT.HORIZONTAL);!
"label2.setText("Label");!
"checkBox = new Button(sShell, SWT.CHECK);!
"checkBox.setText("check");!
"button = new Button(sShell, SWT.NONE);!
"button.setText("PushMe");!
}	
  
50	
  
Sample	
  applicaGon	
  
private void createSShell() {!
"sShell = new Shell();!
"sShell.setText("Shell");!
"sShell.setLayout(new GridLayout());!
"sShell.setSize(new Point(90,127));!
"label1 = new Label(sShell, SWT.NONE);!
"label1.setText("Some Text");!
"label2 = new Label(sShell, SWT.SEPARATOR |
SWT.HORIZONTAL);!
"label2.setText("Label");!
"checkBox = new Button(sShell, SWT.CHECK);!
"checkBox.setText("check");!
"button = new Button(sShell, SWT.NONE);!
"button.setText("PushMe");!
}	
  
51	
  
Se[ng	
  Layout	
  
Sample	
  applicaGon	
  
private void createSShell() {!
"sShell = new Shell();!
"sShell.setText("Shell");!
"sShell.setLayout(new GridLayout());!
"sShell.setSize(new Point(90,127));!
"label1 = new Label(sShell, SWT.NONE);!
"label1.setText("Some Text");!
"label2 = new Label(sShell, SWT.SEPARATOR |
SWT.HORIZONTAL);!
"label2.setText("Label");!
"checkBox = new Button(sShell, SWT.CHECK);!
"checkBox.setText("check");!
"button = new Button(sShell, SWT.NONE);!
"button.setText("PushMe");!
}	
  
52	
  
Read	
  only	
  label	
  
Sample	
  applicaGon	
  
private void createSShell() {!
"sShell = new Shell();!
"sShell.setText("Shell");!
"sShell.setLayout(new GridLayout());!
"sShell.setSize(new Point(90,127));!
"label1 = new Label(sShell, SWT.NONE);!
"label1.setText("Some Text");!
"label2 = new Label(sShell, SWT.SEPARATOR |
SWT.HORIZONTAL);!
"label2.setText("Label");!
"checkBox = new Button(sShell, SWT.CHECK);!
"checkBox.setText("check");!
"button = new Button(sShell, SWT.NONE);!
"button.setText("PushMe");!
}	
  
53	
  
	
  ‘SEPARATOR’	
  
stylebit	
  
Sample	
  applicaGon	
  
private void createSShell() {!
"sShell = new Shell();!
"sShell.setText("Shell");!
"sShell.setLayout(new GridLayout());!
"sShell.setSize(new Point(90,127));!
"label1 = new Label(sShell, SWT.NONE);!
"label1.setText("Some Text");!
"label2 = new Label(sShell, SWT.SEPARATOR |
SWT.HORIZONTAL);!
"label2.setText("Label");!
"checkBox = new Button(sShell, SWT.CHECK);!
"checkBox.setText("check");!
"button = new Button(sShell, SWT.NONE);!
"button.setText("PushMe");!
}	
  
54	
  
Checkbox	
  	
  uses	
  
‘CHECK’	
  style	
  
bit	
  
Sample	
  applicaGon	
  
private void createSShell() {!
"sShell = new Shell();!
"sShell.setText("Shell");!
"sShell.setLayout(new GridLayout());!
"sShell.setSize(new Point(90,127));!
"label1 = new Label(sShell, SWT.NONE);!
"label1.setText("Some Text");!
"label2 = new Label(sShell, SWT.SEPARATOR |
SWT.HORIZONTAL);!
"label2.setText("Label");!
"checkBox = new Button(sShell, SWT.CHECK);!
"checkBox.setText("check");!
"button = new Button(sShell, SWT.NONE);!
"button.setText("PushMe");!
}	
  
55	
  
Simple	
  bu:on	
  
Sample	
  applicaGon	
  
private void createSShell() {!
"sShell = new Shell();!
"sShell.setText("Shell");!
"sShell.setLayout(new GridLayout());!
"sShell.setSize(new Point(90,127));!
"label1 = new Label(sShell, SWT.NONE);!
"label1.setText("Some Text");!
"label2 = new Label(sShell, SWT.SEPARATOR |
SWT.HORIZONTAL);!
"label2.setText("Label");!
"checkBox = new Button(sShell, SWT.CHECK);!
"checkBox.setText("check");!
"button = new Button(sShell, SWT.NONE);!
"button.setText("PushMe");!
}	
  
56	
  
Developing  User  Interface  
57	
  
Designing	
  user	
  interfaces	
  
! Required	
  features	
  
o Direct	
  code	
  ediGng	
  
o Layout	
  support	
  
o Both	
  source	
  and	
  UI	
  ediGng	
  
! MulGple	
  tools	
  available	
  
o Eclipse	
  WindowBuilder	
  is	
  one	
  of	
  the	
  best	
  
WindowBuilder	
  
! History	
  
o InstanGaGons	
  -­‐>	
  Google	
  -­‐>	
  Eclipse	
  
o Roundtrip	
  engineering	
  
o SWT,	
  JFace,	
  Forms	
  API	
  
o Eclipse	
  Workbench	
  
o BUT:	
  memory	
  requirements	
  
• Pro	
  Gp:	
  do	
  not	
  use	
  WindowBuilder	
  as	
  default	
  Java	
  editor	
  
o BUT:	
  Smaller	
  bugs,	
  missing	
  features	
  
59	
  
WindowBuilder	
  
60	
  
PiKall	
  1.	
  
! Use	
  automaGc	
  layouGng	
  if	
  possible	
  
o Avoids	
  alignment	
  errors	
  
61	
  
Source:	
  h:p://uxma:ers.com/mt/archives/2009/02/reviewing-­‐user-­‐interfaces.php	
  
Easy	
  to	
  create	
  !=	
  Easy	
  to	
  use	
  
62	
  
Summary  
63	
  
SWT	
  -­‐	
  Summary	
  
! NaGve	
  graphical	
  user	
  interface	
  framework	
  
o Fast	
  
o Simple	
  
! Different	
  form	
  elements	
  
o Complex  forms  
o Dialogs	
  
o Menus	
  
o Drawing	
  
o PrinGng	
  
o …	
  
64	
  
Further	
  reading	
  
! Understanding	
  Layout	
  in	
  SWT	
  
o h:p://www.eclipse.org/arGcles/arGcle.php?
file=ArGcle-­‐Understanding-­‐Layouts/index.html	
  
o Describes	
  Layouts	
  
! User	
  Interface	
  Guidelines	
  –	
  Eclipsepedia	
  
o h:p://wiki.eclipse.org/User_Interface_Guidelines	
  
! SWT	
  Snippets:	
  	
  
o h:p://www.eclipse.org/swt/snippets/	
  
o Grouped	
  samples	
  for	
  coding	
  SWT	
  
65	
  

GOM Player Plus Free crack Download .

  • 1.
    Budapes(  Műszaki  és Gazdaságtudományi  Egyetem   Méréstechnika  és  Információs  Rendszerek  Tanszék   User  Interface  Programming  in  SWT   Eclipse  Based  Technologies   h:p://inf.mit.bme.hu/edu/courses/eat    
  • 2.
    Developing  Graphical  User  Interfaces   ! Java  Graphics  Toolkits   o AWT   • NaGve  widgets   • Only  common  subset  of  plaKorm  widgets  available!   o Swing   • Manually  drawn  widgets   • Superset  of  plaKorm  widgets   • Extensible   o JavaFX   • Available  with  Java  7  (but  not  added  by  default!)   • Completely  rethinked  UI  model   2  
  • 3.
    Problems  with  User  Interfaces   ! “Does  not  look  like  Word”  problem   o Reusing  plaKorm  look-­‐and-­‐feel   o InternaGonalizaGon  se[ngs   o Java  goal:  look  everywhere  the  same   ! AWT   o very  low  level   ! Swing     o memory  usage  and  performance  issues  at  start   o Since  Java  6  more  than  appropriate   ! Java  FX   o SGll  not  widely  used   3  
  • 4.
    SWT  –  Standard  Widget  Toolkit   ! Developed  by  IBM   o Swing  was  not  appropriate   o When  starGng  the  Eclipse  project   • Based  on  Smalltalk  naGve  widget  accessing  experiments   o Goals   • Use  naGve  widgets  everywhere  possible   • Looks  like  a  naGve  applicaGon   4  
  • 5.
    SWT  –  Standard  Widget  Toolkit   ! Reusing  plaKorm  widgets   o Fast   o PlaKorm  look-­‐and-­‐feel   • Every  plaKorm  service  available   – OLE,  drag-­‐n-­‐drop,  …   o Needs  porGng!   • Appears  differently   5   Source  of  pictures:   h:p://eclipse.org/swt  
  • 6.
    Programming  Model   6   User  acGon   Event   Event  Queue   Event   Event  
  • 7.
    Programming  Model   7   User  acGon   Event   Event  Queue   Event   Event   SWT:   Display  object  
  • 8.
    Programming  Model   8   User  acGon   Event   Event  Queue   Event   Event   SWT:   Display  object   A  Window  in  SWT:   Shell  
  • 9.
    SWT  Event  Loop   ! Explicit  event  loop   o The  applicaGon  needs  to  include  it!   • CollecGng  incoming  events   • and  processing  it   o Loop  terminaGon   • ApplicaGon  terminates   o Very  similar  to  Win32  API   9  
  • 10.
    SWT  Event  Loop   public static void main(String [] args) {! " "Display display = new Display();! " "final Shell shell = new Shell(display);! " "shell.setSize(400, 400);! " "shell.open();! ! " "while (!shell.isDisposed()) {! " " "if (!display.readAndDispatch())! " " " "display.sleep();! " "}! " "display.dispose();! "}   10  
  • 11.
    Event  Handling   !Event:  something  the  applicaGon  needs  to  react   o User  events   • Mouse  move   • Key  presses   • …   o System   • Time  passes   • …   11  
  • 12.
    Event  Handling   !Assigning  Event  Listeners   o Generic  event  listeners  for  every  widget   • Event  informaGon  available  as  style  bits  (see  later)   o Typed  listeners  when  applicable   • Keyboard   • Mouse   • MulGtouch   • …   ! Both  Listener  and  Adapters  available   12  
  • 13.
    SWT  widgets   !RelaGvely  small  widget  hierarchy   o E.g.  as  opposed  to  Swing   o A  class  describes  mulGple  widgets   • SelecGon  happens  via  style  bits   ! AssociaGng  model  objects  possible   o getData()/setData()  methods   o Very  useful  for  generic  UI  processing  code  and  data   bindings   13  
  • 14.
    Style  bits   !AddiGonal  informaGon   • E.g.  Bu:on-­‐>CheckBox     ! Constructor  parameter   o It  is  not  possible  to  change  later   o The  available  styles  depend  on  specific  widgets   ! ImplementaGon   o Works  with  Java  1.4  -­‐>  no  ‘enum’  available   o Using  int  constants  from  the  SWT  class   • MulGple  style  bits  can  be  selected  via  bitwise  or:   – SWT.SEPARATOR|SWT.HORIZONTAL   14  
  • 15.
    SWT  widgets   !Manual  instanGaGon   o No  factory   o Strict  containment  hierarchy   ! Manual  cleanup   o Garbage  collecGon  is  not  enough!   • NaGve  widgets!   o Method  dispose()  needs  to  be  called  manually   15  
  • 16.
  • 17.
    Dispose  rules   1.Base  rule:     o If  you  create  it,  you  dispose  it!   2. Reverse  rule:   o Do  only  dispose  it  if  you  create  it!   3. ExcepGon:   o Widgets  hierarchies  are  disposed  by  disposing  the   top-­‐level  element   17  
  • 18.
    Dispose  rules   1.Base  rule:     o If  you  create  it,  you  dispose  it!   2. Reverse  rule:   o Do  only  dispose  it  if  you  create  it!   3. ExcepGon:   o Widgets  hierarchies  are  disposed  by  disposing  the   top-­‐level  element   18  
  • 19.
    Dispose  rules   1.Base  rule:     o If  you  create  it,  you  dispose  it!   2. Reverse  rule:   o Do  only  dispose  it  if  you  create  it!   3. ExcepGon:   o Widgets  hierarchies  are  disposed  by  disposing  the   top-­‐level  element   19  
  • 20.
    Common  widgets   !Bu:on   o Push,  radio,  combo  bu:ons   ! Label   o Read-­‐only  text  display  field  (w  or  w/o  icons)   ! Text   o Writeable  text  fields  (single  line,  mulGline)   ! StyledText   o Custom  drawn  mulGline  text  field  (e.g.  Eclipse  editors)   20  
  • 21.
    Common  widgets   !Composite   o Stores  other  widgets   o Allows  se[ng  layouts   ! Canvas   o Manual  drawing   ! Menu,  Toolbar   ! List,  Tree,  Table   o Specific  widgets  for  displaying  large  amounts  of  data   o Avoids  creaGng  a  huge  number  of  bu:ons,  etc.   21  
  • 22.
    Common  Widgets   !And  many  more:  h:p://eclipse.org/swt/widgets/   22  
  • 23.
    AddiGonal  widget  –  Nebula  project   ! h:p://eclipse.org/nebula/   ! Date-­‐Gme  handling     ! Forma:edText   23  
  • 24.
    AddiGonal  widgets  –  Nebula  project   ! Gan:  diagram   ! Galery   24  
  • 25.
    Dialog  windows   !Types   o MessageBox-­‐  displaying  messages   o ColorDialog  –  color  choosing   o DirectoryDialog  –  directory  structure   o FileDialog  –  file  selecGon/save   o FontDialog  –  font  selecGng   o PrintDialog  –  prinGng   o These  are  not  widgets!   ! Reuses  operaGng  system  dialogs   o Specific  dialog  se[ngs  available   • Pl.  SWT.SHEET   25  
  • 26.
    Dialog  windows   !Types   o MessageBox-­‐  displaying  messages   o ColorDialog  –  color  choosing   o DirectoryDialog  –  directory  structure   o FileDialog  –  file  selecGon/save   o FontDialog  –  font  selecGng   o PrintDialog  –  prinGng   o These  are  not  widgets!   ! Reuses  operaGng  system  dialogs   o Specific  dialog  se[ngs  available   • Pl.  SWT.SHEET   26  
  • 27.
    Complex  Form  Design  Layouts   27  
  • 28.
    Complex  Forms   28   How   m any   widgets   d oes   t he   window   c ontain?  
  • 29.
    Complex  Forms   29   How   m any   widgets   d oes   t he   window   c ontain?  
  • 30.
    Complex  Forms   30   How   m any   widgets   d oes   t he   window   c ontain?  
  • 31.
    Complex  Forms   31   How   m any   widgets   d oes   t he   window   c ontain?  
  • 32.
    Widget  Containment  Hierarchy   ! Strict  containment  hierarchy   o Every  widget  has  a  single  parent   o ExcepGon:  Shell  (window)   ! Composite  widget   o Contains  other  widgets   o Layout  can  be  created   32  
  • 33.
    Layout   ! SeparaGon  of  arrangement  and  content   o Decides  posiGoning   o RelaGve  to  container   o KöveG  a  konténer  méretének  változását   ! Abstract  Base  class:  Layout   o Do  not  call  it  manually   33  
  • 34.
    Layout  Hints   !Every  widget  might  give  some  posiGoning   informaGon   o Use  #setLayoutData   o Different  data  for  different  layouts   • Inconsistent  se[ng  results  in  runGme  error   34  
  • 35.
    Layouts  in  SWT   ! Built-­‐in  layouts  available   o FillLayout   o RowLayout   o GridLayout   o FormLayout   o StackLayout   ! Default  layout   o Set  up  coordinates  and  size  for  each  widget!   35  
  • 36.
    Layouts  in  SWT   ! Built-­‐in  layouts  available   o FillLayout   o RowLayout   o GridLayout   o FormLayout   o StackLayout   ! Default  layout   o Set  up  coordinates  and  size  for  each  widget!   36   If  no  layout  is  defined  and   no  size/posiGoning  is  set   up,  the  widget  will  not   appear!  
  • 37.
    FillLayout   ! Fill  all  space   o Places  all  elements  next  to  each  other   o Horizontal  or  verGcal   o PrimiGve  layout   • Ignores  suggested  size  of  widgets!   ! May  be  useful  for   nested  composites  
  • 38.
    RowLayout   ! Similar  to  FillLayout   o Arranges  elements  into  rows  or  columns   o Considers  widget  size   ! Hint  object:  RowData  (LayoutData)  :  height,  width   o Sets  the  preferred  size  of  the  widget  
  • 39.
    GridLayout   ! Grid  arrangement   o Fixed  number  of  columns   ! Important  properGes   o horizontalSpacing   o makeColumnsEqualWidth   o marginHeight   o marginWidth   o numColumns   o verGcalSpacing  
  • 40.
    FormLayout   ! Complex  layout   ! Layout  data  stores  a:achments   o RelaGve  posiGoning  for   a  selected  side   o DefiniGon   • y=ax+b     • y:  height,  x:  width   • a:  relaGve  posiGoning,  b:  ofset  
  • 41.
    FormLayout   ! Complex  layout   ! Layout  data  stores  a:achments   o RelaGve  posiGoning  for   a  selected  side   o DefiniGon   • y=ax+b     • y:  height,  x:  width   • a:  relaGve  posiGoning,  b:  ofset   Absolute   posiGon  wrt   container  
  • 42.
    FormLayout   ! Complex  layout   ! Layout  data  stores  a:achments   o RelaGve  posiGoning  for   a  selected  side   o DefiniGon   • y=ax+b     • y:  height,  x:  width   • a:  relaGve  posiGoning,  b:  ofset   Right  and   down  wrt  the   2nd  widget  
  • 43.
    StackLayout   ! Each  element  has  the  same  size  and  posiGon   ! Only  the  top  control  will  be  visible   o StackLayout.topControl o A|er  se[ng,  layout()  needs  to  be  called  for  UI   update   ! Margin  se:able   o marginHeight   o marginWidth
  • 44.
  • 45.
    Layout   ! Many  layouts  available   ! Custom  layouts  possible   o Create  new  layout  implementaGon   o E.g.  responsive  layout  from   h:p://www.codeaffine.com/2014/02/24/responsive-­‐ uis-­‐with-­‐eclipse-­‐and-­‐swt/     ! Not  required  to  use   o Widget#setBound(x,y,w,h)   • Container-­‐relaGve  posiGoning   • Size  
  • 46.
    Layout   ! Many  layouts  available   ! Custom  layouts  possible   o Create  new  layout  implementaGon   o E.g.  responsive  layout  from   h:p://www.codeaffine.com/2014/02/24/responsive-­‐ uis-­‐with-­‐eclipse-­‐and-­‐swt/     ! Not  required  to  use   o Widget#setBound(x,y,w,h)   • Container-­‐relaGve  posiGoning   • Size  
  • 47.
    Layout   ! Many  layouts  available   ! Custom  layouts  possible   o Create  new  layout  implementaGon   o E.g.  responsive  layout  from   h:p://www.codeaffine.com/2014/02/24/responsive-­‐ uis-­‐with-­‐eclipse-­‐and-­‐swt/     ! Not  required  to  use   o Widget#setBound(x,y,w,h)   • Container-­‐relaGve  posiGoning   • Size  
  • 48.
    Layout   ! Many  layouts  available   ! Custom  layouts  possible   o Create  new  layout  implementaGon   o E.g.  responsive  layout  from   h:p://www.codeaffine.com/2014/02/24/responsive-­‐ uis-­‐with-­‐eclipse-­‐and-­‐swt/     ! Not  required  to  use   o Widget#setBound(x,y,w,h)   • Container-­‐relaGve  posiGoning   • Size  
  • 49.
    Layout   ! Many  layouts  available   ! Custom  layouts  possible   o Create  new  layout  implementaGon   o E.g.  responsive  layout  from   h:p://www.codeaffine.com/2014/02/24/responsive-­‐ uis-­‐with-­‐eclipse-­‐and-­‐swt/     ! Not  required  to  use   o Widget#setBound(x,y,w,h)   • Container-­‐relaGve  posiGoning   • Size  
  • 50.
    Sample  applicaGon   privatevoid createSShell() {! "sShell = new Shell();! "sShell.setText("Shell");! "sShell.setLayout(new GridLayout());! "sShell.setSize(new Point(90,127));! "label1 = new Label(sShell, SWT.NONE);! "label1.setText("Some Text");! "label2 = new Label(sShell, SWT.SEPARATOR | SWT.HORIZONTAL);! "label2.setText("Label");! "checkBox = new Button(sShell, SWT.CHECK);! "checkBox.setText("check");! "button = new Button(sShell, SWT.NONE);! "button.setText("PushMe");! }   50  
  • 51.
    Sample  applicaGon   privatevoid createSShell() {! "sShell = new Shell();! "sShell.setText("Shell");! "sShell.setLayout(new GridLayout());! "sShell.setSize(new Point(90,127));! "label1 = new Label(sShell, SWT.NONE);! "label1.setText("Some Text");! "label2 = new Label(sShell, SWT.SEPARATOR | SWT.HORIZONTAL);! "label2.setText("Label");! "checkBox = new Button(sShell, SWT.CHECK);! "checkBox.setText("check");! "button = new Button(sShell, SWT.NONE);! "button.setText("PushMe");! }   51   Se[ng  Layout  
  • 52.
    Sample  applicaGon   privatevoid createSShell() {! "sShell = new Shell();! "sShell.setText("Shell");! "sShell.setLayout(new GridLayout());! "sShell.setSize(new Point(90,127));! "label1 = new Label(sShell, SWT.NONE);! "label1.setText("Some Text");! "label2 = new Label(sShell, SWT.SEPARATOR | SWT.HORIZONTAL);! "label2.setText("Label");! "checkBox = new Button(sShell, SWT.CHECK);! "checkBox.setText("check");! "button = new Button(sShell, SWT.NONE);! "button.setText("PushMe");! }   52   Read  only  label  
  • 53.
    Sample  applicaGon   privatevoid createSShell() {! "sShell = new Shell();! "sShell.setText("Shell");! "sShell.setLayout(new GridLayout());! "sShell.setSize(new Point(90,127));! "label1 = new Label(sShell, SWT.NONE);! "label1.setText("Some Text");! "label2 = new Label(sShell, SWT.SEPARATOR | SWT.HORIZONTAL);! "label2.setText("Label");! "checkBox = new Button(sShell, SWT.CHECK);! "checkBox.setText("check");! "button = new Button(sShell, SWT.NONE);! "button.setText("PushMe");! }   53    ‘SEPARATOR’   stylebit  
  • 54.
    Sample  applicaGon   privatevoid createSShell() {! "sShell = new Shell();! "sShell.setText("Shell");! "sShell.setLayout(new GridLayout());! "sShell.setSize(new Point(90,127));! "label1 = new Label(sShell, SWT.NONE);! "label1.setText("Some Text");! "label2 = new Label(sShell, SWT.SEPARATOR | SWT.HORIZONTAL);! "label2.setText("Label");! "checkBox = new Button(sShell, SWT.CHECK);! "checkBox.setText("check");! "button = new Button(sShell, SWT.NONE);! "button.setText("PushMe");! }   54   Checkbox    uses   ‘CHECK’  style   bit  
  • 55.
    Sample  applicaGon   privatevoid createSShell() {! "sShell = new Shell();! "sShell.setText("Shell");! "sShell.setLayout(new GridLayout());! "sShell.setSize(new Point(90,127));! "label1 = new Label(sShell, SWT.NONE);! "label1.setText("Some Text");! "label2 = new Label(sShell, SWT.SEPARATOR | SWT.HORIZONTAL);! "label2.setText("Label");! "checkBox = new Button(sShell, SWT.CHECK);! "checkBox.setText("check");! "button = new Button(sShell, SWT.NONE);! "button.setText("PushMe");! }   55   Simple  bu:on  
  • 56.
    Sample  applicaGon   privatevoid createSShell() {! "sShell = new Shell();! "sShell.setText("Shell");! "sShell.setLayout(new GridLayout());! "sShell.setSize(new Point(90,127));! "label1 = new Label(sShell, SWT.NONE);! "label1.setText("Some Text");! "label2 = new Label(sShell, SWT.SEPARATOR | SWT.HORIZONTAL);! "label2.setText("Label");! "checkBox = new Button(sShell, SWT.CHECK);! "checkBox.setText("check");! "button = new Button(sShell, SWT.NONE);! "button.setText("PushMe");! }   56  
  • 57.
  • 58.
    Designing  user  interfaces   ! Required  features   o Direct  code  ediGng   o Layout  support   o Both  source  and  UI  ediGng   ! MulGple  tools  available   o Eclipse  WindowBuilder  is  one  of  the  best  
  • 59.
    WindowBuilder   ! History   o InstanGaGons  -­‐>  Google  -­‐>  Eclipse   o Roundtrip  engineering   o SWT,  JFace,  Forms  API   o Eclipse  Workbench   o BUT:  memory  requirements   • Pro  Gp:  do  not  use  WindowBuilder  as  default  Java  editor   o BUT:  Smaller  bugs,  missing  features   59  
  • 60.
  • 61.
    PiKall  1.   !Use  automaGc  layouGng  if  possible   o Avoids  alignment  errors   61   Source:  h:p://uxma:ers.com/mt/archives/2009/02/reviewing-­‐user-­‐interfaces.php  
  • 62.
    Easy  to  create  !=  Easy  to  use   62  
  • 63.
  • 64.
    SWT  -­‐  Summary   ! NaGve  graphical  user  interface  framework   o Fast   o Simple   ! Different  form  elements   o Complex  forms   o Dialogs   o Menus   o Drawing   o PrinGng   o …   64  
  • 65.
    Further  reading   !Understanding  Layout  in  SWT   o h:p://www.eclipse.org/arGcles/arGcle.php? file=ArGcle-­‐Understanding-­‐Layouts/index.html   o Describes  Layouts   ! User  Interface  Guidelines  –  Eclipsepedia   o h:p://wiki.eclipse.org/User_Interface_Guidelines   ! SWT  Snippets:     o h:p://www.eclipse.org/swt/snippets/   o Grouped  samples  for  coding  SWT   65