Está en la página 1de 69

Interfaces grficas con

Swing
Java y Servicios Web I
Master en Ingeniera Matemtica
Manuel Montenegro
Dpto. Sistemas Informticos y Computacin
Desp. 467 (Mat) montenegro@fdi.ucm.es
8. Interfaces grficas con Swing 28/Mayo/2012 2
Introdcci!n

Swing es una biblioteca e interfaces grficas e


usuario (!"I) para #a$a.

%iene incluia con el entorno e esarrollo e #a$a


(#D&).

'(tiene a otra librer)a grfica ms antigua


llamaa *+,.

-a.uetes/

javax.swing

java.awt

java.awt.event

*lternati$as/ S+, (0ttp/11222.eclipse.org1s2t1)


8. Interfaces grficas con Swing 28/Mayo/2012 "
#ontenidos

%entanas

Componentes

3ayout Managers

Mane4o e e$entos

Cuaros e ilogo preefinios

Dibu4o e grficos

*r.uitectura M%C
8. Interfaces grficas con Swing 28/Mayo/2012 $
#reaci!n de ventanas

3a clase JFrame proporciona operaciones para


manipular $entanas.

Constructores/

JFrame()

JFrame(String titulo)

"na $e5 creao el ob4eto e $entana6 0ay .ue/

'stablecer su tama7o.

'stablecer la accin e cierre.

8acerla $isible.
8. Interfaces grficas con Swing 28/Mayo/2012 %
#reaci!n de ventanas
import javax.swing.*;
public class entana!est "
public static void main(String#$ args) "
JFrame f % new JFrame(&!itulo de ventana&);
f.setSi'e(())* +)));
f.set,efault-lose.peration(JFrame./01!2.32-4.S/);
f.setisible(true);
5
5

*cciones e cierre/

JFrame./01!2.32-4.S// *banona aplicacin.

JFrame.,1S6.S/2.32-4.S// 3ibera los recursos asociaos a la $entana.

JFrame.,.23.!71382.32-4.S// 9o 0ace naa.

JFrame.71,/2.32-4.S// Cierra la $entana6 sin liberar sus recursos.


8. Interfaces grficas con Swing 28/Mayo/2012 &
#reaci!n de ventanas
8. Interfaces grficas con Swing 28/Mayo/2012 '
#reaci!n de ventanas

's usual e(tener la clase JFrame6 y reali5ar las


operaciones e iniciali5acin en su constructor.
public class 9ientana extends JFrame "
public 9ientana() "
super(&!itulo de ventana&);
setSi'e(())* +)));
set,efault-lose.peration(JFrame./01!2.32-4.S/);
5
5
public class entana!est "
public static void main(String#$ args) "
9ientana v % new 9ientana();
v.setisible(true);
5
5
8. Interfaces grficas con Swing 28/Mayo/2012 8
#ontenidos

%entanas

Componentes

3ayout Managers

Mane4o e e$entos

Cuaros e ilogo preefinios

Dibu4o e grficos

*r.uitectura M%C
8. Interfaces grficas con Swing 28/Mayo/2012 (
#om)onentes de na ventana
JButton
JLabel
JTextField
JCheckBox
JRadioButton

,ras crear uno e estos componentes con new6 0a e


a7airse al content6ane e la $entana
corresponiente meiante su m:too add.
8. Interfaces grficas con Swing 28/Mayo/2012 10
*+adir com)onentes
public class 9ientana extends JFrame "
public 9ientana() "
super(&!itulo de ventana&);
setSi'e(())* +)));
set,efault-lose.peration(JFrame./01!2.32-4.S/);
-ontainer cp % get-ontent6ane();
cp.set4a:out(new Flow4a:out());
J4abel eti;ueta % new J4abel(&3ombre< &);
J!extField texto % new J!extField(=));
J>utton boton % new J>utton(&Saludar&);
cp.add(eti;ueta);
cp.add(texto);
cp.add(boton);
5
5
8. Interfaces grficas con Swing 28/Mayo/2012 11
*+adir com)onentes
8. Interfaces grficas con Swing 28/Mayo/2012 12
#ontenidos

%entanas

Componentes

3ayout Managers

Mane4o e e$entos

Cuaros e ilogo preefinios

Dibu4o e grficos

*r.uitectura M%C
8. Interfaces grficas con Swing 28/Mayo/2012 1"
Layout Managers

'n #a$a no es 0abitual inicar e(pl)citamente la posicin


e los componentes e la interfa5 entro e la $entana.

3os layout managers se encargan e colocar los


componentes e la interfa5 e usuario en la $entana
conteneora.

'specifican la posicin y el tama7o e ic0os


componentes.

Flow4a:out

8rid4a:out

>order4a:out

8rid>ag4a:out

?
8. Interfaces grficas con Swing 28/Mayo/2012 1$
FlowLayout

Coloca los elementos uno a continuacin e otro6


e manera similar a la colocacin e palabras en
un procesaor e te(tos.

M:toos/

set@ligment(int alineacion)

set7gap(int separacion)

setgap(int separacion)
8. Interfaces grficas con Swing 28/Mayo/2012 1%
GridLayout

Coloca los componentes e la interfa5 en


forma e re4illa.

'l oren en .ue se a7aan los componentes


etermina su posicin en la re4illa.

Constructor/

8rid4a:out(int filas* int columnas)

M:toos/

set7gap(int separacion)

setgap(int separacion)
8. Interfaces grficas con Swing 28/Mayo/2012 1&
GridLayout
public class 9ientana= extends JFrame "
public 9ientana=() "
super(&!itulo de ventana&);
setSi'e(())* +)));
set,efault-lose.peration(JFrame./01!2.32-4.S/);
-ontainer cp % get-ontent6ane();
8rid4a:out gl % new 8rid4a:out((*+);
gl.set7gap(A); gl.setgap(A);
cp.set4a:out(gl);
for(int i % B; i C% D; iEE) "
cp.add(new J>utton(String.value.f(i)));
5
cp.add(new J>utton(&*&));
cp.add(new J>utton(&)&));
cp.add(new J>utton(&F&));
5
5
8. Interfaces grficas con Swing 28/Mayo/2012 1'
GridLayout
8. Interfaces grficas con Swing 28/Mayo/2012 18
BorderLayout

Coloca y cambia e tama7o sus componentes


para .ue se a4usten a los bores y parte
central e la $entana.

M:toos/

set7gap(int separacion)

setgap(int separacion)

*l a7air un elemento a la
$entana6 0ay .ue especificar
su colocacin/
J>utton b % new J>utton(...);
get-ontent6ane().add(b* >order4a:out./@S!)
8. Interfaces grficas con Swing 28/Mayo/2012 1(
Interfaces com),e-as. JPanel

"n panel es un componente con un layout


manager propio6 y .ue puee contener $arios
componentes en su interior.

Constructor/

J6anel()

M:toos/

void set4a:out(4a:out9anager lm)

void add(J-omponent componente)

?
8. Interfaces grficas con Swing 28/Mayo/2012 20
Interfaces com),e-as. JPanel
8. Interfaces grficas con Swing 28/Mayo/2012 21
Interfaces com),e-as. JPanel
!ri3ayout
;lo23ayout
;lo23ayout
8. Interfaces grficas con Swing 28/Mayo/2012 22
Interfaces com),e-as. JPanel
public 9ientana+() "
super(&@Gadir usuario&);
set,efault-lose.peration(JFrame./01!2.32-4.S/);
HH 6anel de fecIa
J6anel panelFecIa % new J6anel();
panelFecIa.set4a:out(new Flow4a:out());
panelFecIa.add(new J!extField(=));
panelFecIa.add(new J4abel(&H&));
panelFecIa.add(new J!extField(=));
panelFecIa.add(new J4abel(&H&));
panelFecIa.add(new J!extField(=));
HH 6anel de datos
J6anel panel,atos % new J6anel();
8rid4a:out gl % new 8rid4a:out(+*=*)*A);
panel,atos.set4a:out(gl);
panel,atos.add(new J4abel(&3ombre<&));
panel,atos.add(new J!extField(B)));
panel,atos.add(new J4abel(&,31<&));
panel,atos.add(new J!extField(B)));
panel,atos.add(new J4abel(&FecIa de nacimiento< &));
panel,atos.add(panelFecIa);
?
8. Interfaces grficas con Swing 28/Mayo/2012 2"
Interfaces com),e-as. JPanel
?
HH 6anel de botones
J6anel panel>otones % new J6anel();
panel>otones.set4a:out(new Flow4a:out());
panel>otones.add(new J>utton(&@ceptar&));
panel>otones.add(new J>utton(&-ancelar&));

-ontainer cp % get-ontent6ane();
cp.add(panel,atos* >order4a:out.-/3!/J);
cp.add(panel>otones* >order4a:out.S.K!7);
5
8. Interfaces grficas con Swing 28/Mayo/2012 2$
Interfaces com),e-as. GridBagLayout

Ms fle(ible .ue 8rid4a:out

Caa componente 0a e tener asociao un


ob4eto e la clase 8rid>ag-onstraints. 3a
asociacin se proucir en el m:too add.
J>utton b % new J>utton(L@ceptarM);
8rid>ag-onstraints gbc % new 8rid>ag-onstraints(...);
get-ontent6ane().add(b* gbc);
8. Interfaces grficas con Swing 28/Mayo/2012 2%
GridBagConstraints

*tributos p<blicos/

int gridx* grid:

int gridwidtI* gridIeigIt

double weigItx* weigIt:

int fill

int ancIor

1nsets insets

int ipadx* ipad:

-ueen ser iniciali5aos en el constructor.


8. Interfaces grficas con Swing 28/Mayo/2012 2&
GridBagConstraints

*tributos p<blicos/

int gridx* grid:


8. Interfaces grficas con Swing 28/Mayo/2012 2'
GridBagConstraints

*tributos p<blicos/

int gridwidtI* gridIeigIt


gridheight = 2
gridwidth = 2
8. Interfaces grficas con Swing 28/Mayo/2012 28
GridBagConstraints

*tributos p<blicos/

double weigItx* weigIt:


weightx = !" weightx = "!"
8. Interfaces grficas con Swing 28/Mayo/2012 2(
GridBagConstraints

*tributos p<blicos/

int fill

-uee ser/

8rid>ag4a:out.7.J1N.3!@4

8rid>ag4a:out./J!1-@4

8rid>ag4a:out.>.!7
8. Interfaces grficas con Swing 28/Mayo/2012 "0
GridBagConstraints

*tributos p<blicos/

int ancIor
8. Interfaces grficas con Swing 28/Mayo/2012 "1
GridBagConstraints

*tributos p<blicos/

1nsets insets
insets = new #nsets$"% 2"% "% 2"&
8. Interfaces grficas con Swing 28/Mayo/2012 "2
GridBagConstraints

*tributos p<blicos/

int padx* int pad:

'specifican cunto espacio a7air a la


anc0ura1altura m)nima e los componentes.
8. Interfaces grficas con Swing 28/Mayo/2012 ""
#onstrctores de interfaces

-ermiten construir interfaces e usuario


interacti$amente.

'4emplo/ Netbeans (netbeans.org)


8. Interfaces grficas con Swing 28/Mayo/2012 "$
#ontenidos

%entanas

Componentes

3ayout Managers

Mane4o e e$entos

Cuaros e ilogo preefinios

Dibu4o e grficos

*r.uitectura M%C
8. Interfaces grficas con Swing 28/Mayo/2012 "%
Mane-o de eventos

"n e$ento es un suceso .ue ocurre como


consecuencia e la interaccin el usuario con
la interfa5 grfica.

-ulsacin e un botn.

Cambio el contenio en un cuaro e te(to.

Desli5amiento e una barra.

*cti$acin e un J-IecO>ox.

Mo$imiento e la $entana.
8. Interfaces grficas con Swing 28/Mayo/2012 "&
/,saci!n de n bot!n

3a clase J>utton tiene un m:too/

void add@ction4istener(@ction4istener l)

=ue especifica el ob4eto (mane4aor e


e$ento) .ue se encargar e tratar el e$ento
e pulsacin el botn.

'ste ob4eto 0a e interpretar la interfa5


@ction4istener (pa.uete java.awt.event)
public interface @ction4istener "
void action6erformed(@ction/vent e)
5
8. Interfaces grficas con Swing 28/Mayo/2012 "'
/,saci!n de n bot!n

Cuano el usuario pulse el botn6 se llamar al


m:too action6erformed e toos los
mane4aores e e$entos .ue se 0ayan
registrao.

M:toos e *ction'$ent/

public .bject getSource()

public int get9odifiers()


public class 9anejador implements @ction4istener "
public void action6erformed(@ction/vent e) "
...
5
5
Informaci!n sobre
e, evento
8. Interfaces grficas con Swing 28/Mayo/2012 "8
0-em),o
public class >otonentana extends JFrame "
public >otonentana() "
super(&>otPn&);
setSi'e(=))*B)));
set,efault-lose.peration(JFrame./01!2.32-4.S/);
-ontainer cp % get-ontent6ane();
cp.set4a:out(new Flow4a:out());
J>utton boton % new J>utton(&Q6RlsameS&);
boton.add@ction4istener(new /vento>oton6ulsado());
cp.add(boton);
5
5
8. Interfaces grficas con Swing 28/Mayo/2012 "(
0-em),o
public class /vento>oton6ulsado implements @ction4istener "
public void action6erformed(@ction/vent e) "
S:stem.out.println(LQ8raciasSM);
5
5
8. Interfaces grficas con Swing 28/Mayo/2012 $0
0-em),o
public class /vento>oton6ulsado implements @ction4istener "
public void action6erformed(@ction/vent e) "
J>utton boton % (J>utton) e.getSource();
boton.set!ext(&Q8raciasS&);
5
5
8. Interfaces grficas con Swing 28/Mayo/2012 $1
*cceso a com)onentes de ,a interfa1
8. Interfaces grficas con Swing 28/Mayo/2012 $2
*cceso a com)onentes de ,a interfa1
public class /ventoSaludo implements @ction4istener "
public void action6erformed(@ction/vent e) "
5
5
2

>Cmo acceo al ob4eto JTextField?


8. Interfaces grficas con Swing 28/Mayo/2012 $"
/osibi,idad 1
public class /ventoSaludo implements @ction4istener "
private J!extField cuadro!exto;
public /ventoSaludo(J!extField cuadro!exto) "
tIis.cuadro!exto % cuadro!exto;
5

public void action6erformed(@ction/vent e) "
J.ption6ane.sIow9essage,ialog(null* &Q7ola* & E
cuadro!exto.get!ext() E &S&);
5
5
8. Interfaces grficas con Swing 28/Mayo/2012 $$
/osibi,idad 1
public class 9ientana extends JFrame "
public 9ientana() "
super(&!itulo de ventana&);
setSi'e(())* +)));
set,efault-lose.peration(JFrame./01!2.32-4.S/);
set4a:out(new Flow4a:out());
-ontainer cp % get-ontent6ane();
cp.add(new J4abel(&3ombre <&));
J!extField texto % new J!extField(=));
cp.add(texto);
J>utton botonSaludo % new J>utton(&Saludar&);
cp.add(botonSaludo);
botonSaludo.add@ction4istener(new /ventoSaludo(texto));
5
5
8. Interfaces grficas con Swing 28/Mayo/2012 $%
/osibi,idad 2
public class 9ientana extends JFrame "
private J!extField cuadro!exto;
class /ventoSaludo implements @ction4istener "
public void action6erformed(@ction/vent e) "
J.ption6ane.sIow9essage,ialog(null* &Q7ola* & E
cuadro!exto.get!ext() E &S&);
5
5
public 9ientana() "
?
cuadro!exto % new J!extField(=));
cp.add(cuadro!exto);
?
botonSaludo.add@ction4istener(new /ventoSaludo());

5
5
8. Interfaces grficas con Swing 28/Mayo/2012 $&
/osibi,idad "
public class 9ientana extends JFrame implements @ction4istener "
private J!extField cuadro!exto;
public void action6erformed(@ction/vent e) "
J.ption6ane.sIow9essage,ialog(null* &Q7ola* & E
cuadro!exto.get!ext() E &S&);
5
public 9ientana() "
?
cuadro!exto % new J!extField(=));
cp.add(cuadro!exto);
?
botonSaludo.add@ction4istener(tIis);

5
5
8. Interfaces grficas con Swing 28/Mayo/2012 $'
0ventos en n JTextField

-aret4istener/ Cambios en la posicin el


cursor.

void caretKpdate(-aret/vent e)

,ocument4istener/ Cambios en el te(to.

void cIangedKpdate(,ocument/vent e)

void insertKpdate(,ocument/vent e)

void removeKpdate(,ocument/vent e)
J!extField text % ...;
text.add-aret4istener(...);
text.get,ocument().add,ocument4istener(...);
8. Interfaces grficas con Swing 28/Mayo/2012 $8
0ventos en na ventana

Tindow4istener

void window@ctivated(Tindow/vent e)

void window-losed(Tindow/vent e)

void window-losing(Tindow/vent e)

void window,eactivated(Tindow/vent e)

void window,eiconified(Tindow/vent e)

void window1conified(Tindow/vent e)

void window.pened(Tindow/vent e)
8. Interfaces grficas con Swing 28/Mayo/2012 $(
0ventos de rat!n y de tec,ado

9ouse4istener/ -ulsaciones e botn6 entraas


y salias el puntero en un componente.

9ouse9otion4istener/ Mo$imientos el ratn


entro e un componente.

9ouseTIeel4istener/ Mo$imientos e la ruea


central e un ratn.

Ue:4istener/ -ulsaciones e teclas.


8. Interfaces grficas con Swing 28/Mayo/2012 %0
#ontenidos

%entanas

Componentes

3ayout Managers

Mane4o e e$entos

Cuaros e ilogo preefinios

Dibu4o e grficos

*r.uitectura M%C
8. Interfaces grficas con Swing 28/Mayo/2012 %1
#adros de di,ogo )redefinidos

3a clase J.ption6ane proporciona m:toos e


utilia para mostrar $entanas e a$iso y e
confirmacin estnar.

void sIow9essage,ialog(-omponent padre*


.bject mensaje* String tituloentana*
int tipo9ensaje)
8. Interfaces grficas con Swing 28/Mayo/2012 %2
#adros de di,ogo )redefinidos

3a clase J.ption6ane proporciona m:toos e


utilia para mostrar $entanas e a$iso y e
confirmacin estnar.

String sIow1nput,ialog(-omponent padre*


.bject mensaje* .bject valor,efecto)
8. Interfaces grficas con Swing 28/Mayo/2012 %"
#adros de di,ogo )redefinidos

3a clase J.ption6ane proporciona m:toos e


utilia para mostrar $entanas e a$iso y e
confirmacin estnar.

int sIow-onfirm,ialog(-omponent padre*


.bject mensaje* String titulo*
int tipo.pciones* int tipo9ensaje)
8. Interfaces grficas con Swing 28/Mayo/2012 %$
#ontenidos

%entanas

Componentes

3ayout Managers

Mane4o e e$entos

Cuaros e ilogo preefinios

Dibu4o e grficos

*r.uitectura M%C
8. Interfaces grficas con Swing 28/Mayo/2012 %%
3ib-ar grficos

Caa componente tiene un m:too llamao


paint-omponent6 .ue se encarga e pintarlo en
pantalla.

-ara reali5ar un ibu4o efinio por el


programaor6 basta con 0erear e un
componente (normalmente un J6anel)6 y
sobreescribir su m:too paint-omponent.

void paint-omponent(8rapIics g)
8. Interfaces grficas con Swing 28/Mayo/2012 %&
3ib-ar grficos

M:toos e 8rapIics/

void draw6ol:gon(int#$ x* int#$ :* int puntos)

void drawJect(int x* int :*


int ancIo* int alto)

void fillJect(int x* int :*


int ancIo* int alto)

void draw.val(int x* int :*


int ancIo* int alto)

void fill.val(int x* int :*


int ancIo* int alto)

void drawString(String cad* int x* int :)

void set-olor(-olor c)

void setFont(Font f)
8. Interfaces grficas con Swing 28/Mayo/2012 %'
0-em),o
public class 6anelSol extends J6anel "
public void paint-omponent(8rapIics g) "
g.set-olor(-olor..J@38/);
g.fill.val(B))*B))*=))*=)));
for (double d % ); d C =*9atI.61; d E% ).B) "
int x/nd % (int) (=))EBA)*9atI.cos(d));
int :/nd % (int) (=))EBA)*9atI.sin(d));
g.draw4ine(=))* =))* x/nd* :/nd);
5
g.set-olor(-olor.>4@-U);
g.draw@rc(BA)* BA)* B))* B))* =+)* V));
g.fill.val(BA)* BA)* =)* =));
g.fill.val(=+)* BA)* =)* =));
5
5
8. Interfaces grficas con Swing 28/Mayo/2012 %8
0-em),o
public class entanaSol extends JFrame "
public entanaSol() "
?
-ontainer cp % get-ontent6ane();
cp.add(new 6anelSol());
5
5
8. Interfaces grficas con Swing 28/Mayo/2012 %(
*4n 5ay ms
0ttp/11o2nloa.4a$a.net14a$aes@top1s2ingsetA1S2ingSetA.4nlp
8. Interfaces grficas con Swing 28/Mayo/2012 &0
*4n 5ay ms
0ttp/11222.particle.@t0.se1Bfmi1@urs1-0ysicsSimulation13ectures1C7*1s2ingDesign.0tml
8. Interfaces grficas con Swing 28/Mayo/2012 &1
#ontenidos

%entanas

Componentes

3ayout Managers

Mane4o e e$entos

Cuaros e ilogo preefinios

Dibu4o e grficos

*r.uitectura M%C
8. Interfaces grficas con Swing 28/Mayo/2012 &2
*r6itectra M7#

M%C D Moelo E %ista E Controlaor

's un patrn e ise7o .ue separa los atos e


la aplicacin6 la interfa5 e usuario6 y la lgica
e negocio.
Mode,o 7ista Mode,o
#ontro,ador
8. Interfaces grficas con Swing 28/Mayo/2012 &"
*r6itectra M7#

'4emplo/ 'icin e te(tos.


Mode,o 7ista Mode,o
#ontro,ador
'(i Texto)
interfa' ,ocument class J!extField
class J!extField
8. Interfaces grficas con Swing 28/Mayo/2012 &$
*r6itectra M7#

'4emplo/ 3istas
Mode,o 7ista Mode,o
#ontro,ador
*'(eta+yste,s)% Color!R-./%
*'(eta0orks)% Color!BL1-/%
2
interfa' 4ist9odel
class J4ist
8. Interfaces grficas con Swing 28/Mayo/2012 &%
*r6itectra M7#

-reparacin/ 'l moelo tiene una lista e $istas. Caa


$e5 .ue 0aya un cambio e moelo6 :ste a$isar a
toas las $istas para .ue se actualicen.

Cuano se crea una $ista6 :sta a$isa al moelo para


.ue la a7aa a su lista.
Mode,o 7ista Mode,o
#ontro,ador
8. Interfaces grficas con Swing 28/Mayo/2012 &&
*r6itectra M7#

-aso F/ Cuano el controlaor recibe la accin


el usuario6 en$)a un mensa4e al moelo para
moificarlo.
Mode,o 7ista Mode,o
#ontro,ador
8. Interfaces grficas con Swing 28/Mayo/2012 &'
*r6itectra M7#

-aso G/ Cuano el moelo se moifica6 en$)a


un mensa4e a toas las $istas .ue tenga
registraas.
Mode,o 7ista Mode,o
#ontro,ador
8. Interfaces grficas con Swing 28/Mayo/2012 &8
*r6itectra M7#

-aso A/ 3a $ista se actuali5a con los cambios


reali5aos en el moelo
Mode,o 7ista Mode,o
#ontro,ador
8. Interfaces grficas con Swing 28/Mayo/2012 &(
8eferencias

-. Deitel6 8. Deitel
Java. How to Program (Ht0 'ition)
Caps. F46 FI y GI

J. 'c@el
Thinking in Java (Ar 'ition)
Cap. F4

#. Ku@o2s@i
The definitive guide to Java Swing

También podría gustarte