Building User Interfaces in Java Swing - Danny Fowler Photography

slimwhimperΛογισμικό & κατασκευή λογ/κού

3 Νοε 2013 (πριν από 3 χρόνια και 10 μήνες)

58 εμφανίσεις

Building  User  Interfaces  in  Java  
Swing  
Mr.  Fowler  
Computer  Graphics  
V1.3  
Java  
AWT
 &  Swing  Architecture  
Object  
java.awt
.  
Component  
java.awt
.  
Container  
javax.swing
 
JFrame
 
javax.swing
 
JComponent
 
javax.swing
 
JPanel
 
java.awt
.  
BorderLayout
 
java.awt
.  
MouseAdapter
 
<<interface>>  
LayoutManager
 
<<interface>>  
EventListener
 
Container  methods  


Containers  can  hold  other  components  


Component  add(Component)  


Component  
getComponentAt
(
int
 
x,int
 y)  


Component[]  
getComponents
()  


void  remove(Component)  


void  remove(index)  


void  
removeAll
()  


Containers  have  a  layout  


setLayout
(
LayoutManager
)
 
   
 


W h e n  y o u  c h a n g e  t h e  
l a y o u t,c a l l
 


I n v a l i d a t e ( )  
Layouts  


A component’s parent is the container they
belong to
 


A  layout  manager  is  a  strategy  for  placing  
components  on  the  content  pane  or  another  
component  (usually  a  panel).  


A  layout  is  chosen  by  calling  the  container’s  
setLayout
 method.  


Visual  Guide  to  
Layouts
 
Size  of  components  


Don’t  simply  set  size  


Factor  of:  


Parent  container  size  (maybe)  
AlternaYvely:  size  parent  to  fit  content  


Minimum,  maximum  and  preferred  sizes  


Layout  manager  type  and  constraints  
FlowLayout
 


Places  components  in  a  line  as  long  as  they  fit,  
then  starts  the  next  line.  


Lets  each  component  assume  its  natural  
(preferred)  size.  


Uses  
sethgap
()  and  
setvgap
()  in  change  
spacing  between  components  .    


Centers  by  default  or  use  
setAlignment
(
FlowLayout.RIGHT
)  


O]en  used  for  placing  bu^ons  on  panels.  
JFrame
 and  its  Content  Pane  


Top  Level  Component  


Make  the  program  end  when  the  window  is  closed  


createFrame.setDefaultCloseOperaYon
(
JFrame.EXIT_ON_CLOSE
);  


Don’t  add  components  directly-­‐  get  the  frame’s  “content  pane”  


JFrame
 
createFrame
=new  
JFrame
();  
Container  pane=
createFrame.getContentPane
();  


Or  create  another  Panel  and  add  to  that:  


JPanel
 
scorePanel
 =  new  
JPanel
();  


createFrame.setContentPane
(
scorePanel
);  


Then  add  component  to  the  content  pane  


JBu^on
 
myBu^on
=new  
JBu^on
();  


pane.add
 (
myBu^on
);
 
 
Create  a  simple  
JFrame
 
public  sta/c  void  main(String[]  
args
)  {  
       
//( O p Y o n a l )  S e t  l o o k  a n d  f e e l  
try{  
 
UIManager.setLookAndFeel
(
UIManager.getCrossPlaiormLookAndFeelClassName
()
)  
   
}
catch(Excep/on  ex){
System.out.println
("Couldn't  set  L&F");}  
 
       
//  c r e a t e  
j f r a m e
 
J F r a m e
 
t e s t F r a m e
=
new  
JFrame
("Title");    
     
//g e t  c o n t e n t  p a n e  ( O R:  
s e t C o n t e n t P a n e
 t o  a  n e w  
J P a n e l
)  
Container  pane=
testFrame.getContentPane
();  
       
//s e t  l a y o u t  -­‐  fl o w  l a y o u t  w i t h  c e n t e r  a l i g n m e n t  
p a n e.s e t L a y o u t
(
new  
FlowLayout
(
FlowLayout.
CENTER
));  
       
//c r e a t e  a  c o m p o n e n t  
J L a b e l
 hi=
new  
JLabel
("Hi");  
       
//a d d  t o  c o n t e n t  p a n e  
p a n e.a d d
(hi);  
       
//s e t  s i z e  o f  f r a m e  t o  m a t c h  c o n t e n t  &  s h o w  i t  
t e s t F r a m e.p a c k
();  
testFrame.setVisible
(
true);  
}  
You  try  


Create  a  
JFrame
 


Set  layout  to  Flow  Layout.  


Add  several  
Jbu^ons
 or  
JLabels
 to  it.  


Experiment  with  changing  the  jusYficaYon  of  
the  content  pane.  
Events  


Different  components  generate  different  kinds  
of  events.    


Events  are  processed  by  “listeners”  —  objects  
geared  to  a  parYcular  type  of  event.  


Event  methods  have  an  event  object  
param
.  
JBu^on
 
redB
=
new  
JBuLon
("Red  pill");  
JBu^on
 
blueB
=
new  
JBuLon
("Blue  pill");  
   
 
A c Y o n L i s t e n e r
 
a l i s t
=
new  
Ac/onListener
(){//implements  an  interface!!  
 
public  void  
ac/onPerformed
(
Ac/onEvent
 e){  
   
S y s t e m.
o u t.p r i n t l n
("Y o u  a t e  t h e  "+
e.g e t A c 5 o n C o m m a n d
()
);  
}};  
redB.addAcYonListener
(
alist
);  
blueB.addAcYonListener
(
alist
);  
Swing  Components  


Components  are  created  using  constructors.    
See  visual  index  to  
Swing  Components
 


Classes  and  special  methods  


AWT
 components  (Canvas,  Panel)  :  paint()  


Top  level  components  (Frame,  
JFrame
,  
JDialog
)  
Can  (but  don’t)  override  paint()    


JContainers
 
Override  
paintComponent
()  
Don’t  override  
paintBorder
()  and  
paintChildren
()  
Look  and  Feel  


Look  and  feel
 refers  to  the  GUI  aspect  of  a  
program.  


Draws  UI  from  scratch  (doesn’t  use  OS  libraries)  


Java  provides  several  LAFs,  including:  


“Metal”  
⎯
cross  plaiorm  


 “Windows”  
⎯
 for  
Windows  


“Windows  Classic”  
⎯
 like  
Windows  95  


“MoYf”  
⎯
 for  
Unix
 /  
Linux