laborator11 -Java

download laborator11 -Java

of 9

Transcript of laborator11 -Java

  • 7/25/2019 laborator11 -Java

    1/9

    TEHNOLOGII JAVALUCRARE DE LABORATOR 11

    Java Swing

    JFrame, JApplet, JPanel, Borders

    I.

    SCOPUL LUCRRII

    Lucrarea de fa are rolul de a prezenta i familiariza studentul cu modul deconstruire a unei interfee grafice utilizator folosind pachetul de clasejava.swing.Se vorprezenta cteva componente vizuale utile, mpreun cu modul de creare i utilizare aacestora.

    La sfritul acestei lucrri, studentul va avea posibilitatea sscrie programe Java ncare sutilizeze noiunile nvate.

    II.

    NOIUNI TEORETICE

    Swing este un subset JFC (Java Foundation Classes) i const dintr-o serie decomponente vizuale care extind (mbuntesc) componentele AWT, i furnizeaz noifaciliti precum tabele i arbori. Structura de clase din Swing este asemntoare cu ceadin AWT, n sensul ctoate componentele interfeei grafice sunt derivate dintr-un singurprinte numit JComponent (care este derivat din clasa AWT Container).

    Pachetul de clase Swing reprezint soluia furnizat de Sun pentru crearea unorinterfee utilizator grafice complet portabile pe orice platform.

    n Swing, toate numele claselor ncep cu litera J, i atunci cnd este posibil,numele este acelai cu cel al clasei AWT pe care o nlocuiete.

    La fel ca la AWT, punctul de plecare pentru un program bazat pe Swing, esteclasa JFrame sau clasa JApplet.

    1. JFrame

    JFrame este o versiune extins a clasei Frame care adaug suport pentru uncomportament de desenare special. Adi

    ional, JFrame permite componentelor Swing

    MenuBars s fie ataate nu numai n partea de sus a ferestrei dar oriunde n fereastr.Toate obiectele asociate unui JFrame sunt manipulate de o instan a clasei

    JRootPane, care este singura component-fiu a unei instane JFrame. JRootPane este uncontainer simplu pentru alte cteva componente. Iatcare este ierarhia de obiecte dintr-oinstanJFrame:

    1

  • 7/25/2019 laborator11 -Java

    2/9

    JFrameJRootPane

    glassPanelayeredPane

    [menuBar]

    contentPaneO aplicaie JFrame

    i mpor t j ava. awt . *;i mpor t j avax. swi ng. *;cl ass Test Fr ame ext ends J Fr ame{publ i c Test Frame( ){set Ti t l e( " Test Appl i cat i on" ) ;set Si ze( 100, 100 ) ;setBackgr ound( Col or . gr ay ) ;

    Panel t opPanel = new Panel ( ) ;t opPanel . setLayout ( new Bor der Layout ( ) ) ;get Cont ent Pane( ) . add( t opPanel ) ;Label l abel Hel l o = new Label ( "Hel l o Wor l d! " ) ;t opPanel . add( l abel Hel l o, Bor der Layout . NORTH ) ;}publ i c stati c voi d mai n( St r i ng ar gs[ ] ){

    Test Fr ame mai nFr ame = new Test Fr ame( ) ;mai nFrame. set Vi si bl e( t r ue ) ;}}

    Este posibil sse mixeze componentele AWT cu cele Swing, ntr-o aplica ie JavaSwing, dar n general se recomand utilizarea exclusiv a componentelor Swing (unposibil efect: componentele AWT sunt desenate mai rapid undeva n colul din stnga susal frame-ului nainte de a fi corect poziionate, rezultnd un flicker neateptat n timpuloperaiilor de redesenare a ecranului).

    Codul din exemplul anterior este foarte simplu i arat ca i cum s-ar fi utilizatcomponente AWT, cu o singurexcepie:getContentPane().add( topPanel );

    O clasJFrame prezinto singurincompatibilitate n raport cu o clas AWT. nAWT Frame se puteau aduga componente direct la instana frame (pentru cclasa AWTFrame creeazautomat o instanPanel).frame.add( component );

    Pentru JFrame, trebuie s specificm exact n care subcomponent a luiJRootPane vom plasa componenta noastr. Cel mai adesea, componentele grafice se voraduga la contentPane. Trebuie utilizaturmtoarea sintax:myJFrame.getContentPane().add( component );

    Cea mai bunsoluie este de se crea un Panel, de a se aduga acesta la ContentPane, i dea se aduga apoi toate componentele la Panel-ul nou creat.

    2

  • 7/25/2019 laborator11 -Java

    3/9

    Similar, cnd se seteazun layout pentru coninutul unui JFrame , de obicei seseteazlayout-ul pentru subcomponenta contentPane:myJFrame.getContentPane().setLayout(new FlowLayout());

    Variabile JFrame

    protected JRootPane rootPane - aceastvariabilconine o instana JRootPane-uluiasociat frame-ului.

    Constructori JFrame

    JFrame()

    JFrame( String title )

    - creeazo nouinstanJFrame care iniial este invizibil.

    Metode importante JFrame

    public void setJMenuBar( JMenuBar menu );

    O caracteristic unic a clasei JFrame este abilitatea de a determina cum se vaefectua operaia de nchidere a ferestrei. JFrame implementeazmetode set/get pentruvaloarea operaiei implicite de nchidere.

    public void setDefaultCloseOperation(int operation);

    public int getDefaultCloseOperation();

    Layered pane este un container invizibil plasat peste root pane. Poate fiaccesat pentru a afia peste coninutul frame-ului obiecte dinamice (precumcursoarele).Glass Pane permite afiarea unor componente n faa instanei JFrameexistente.

    protected JRootPane createRootPane();protected void setRootPane(JRootPane root);

    public JRootPane getRootPane();

    public Container getContentPane();

    public void setLayeredPane(JLayeredPane layered);

    public JLayeredPane getLayeredPane();

    public void setGlassPane(Component glass);

    public Component getGlassPane();

    2. JWindow

    JWindow este similarcu JFrame exceptnd faltul c nu are no title bar, nueste redimensionabil, minimizabil, maximizabil, i nu se poate inchide (fr a scriecod pentru acest lucru). Se utilizeaz n general pentru a mesaje temporare (splashscreen).

    3

  • 7/25/2019 laborator11 -Java

    4/9

    3. JApplet

    JApplet are structur similar cu JFrame. Permite adugarea de componenteMenuBars i toolbars. Exemplu:

    i mpor t j ava. awt . *;i mpor t j avax. swi ng. *;publ i c cl ass Test Appl etext ends J Appl et{publ i c Test Appl et ( ){}publ i c voi d i ni t ( ){set Si ze( 100, 100 ) ;setBackgr ound( Col or . gr ay ) ;Panel t opPanel = new Panel ( ) ;t opPanel . setLayout ( new Bor der Layout ( ) ) ;get Cont ent Pane( ) . add( t opPanel ) ;Label l abel Hel l o = new Label ( "Hel l o Wor l d! " ) ;t opPanel . add( l abel Hel l o, Bor der Layout . NORTH ) ;}}

    Constructori JApplet

    JApplet() -creeazo nouinstanJApplet.

    Metode importante JApplet

    public void setJMenuBar( JMenuBar menu );

    public JMenuBar getJMenuBar();

    public void setContentPane(Container contentPane);

    public Container getContentPane();

    public void setLayeredPane(JLayeredPane layered);

    public JLayeredPane getLayeredPane();

    public void setGlassPane(Component glass);

    public Component getGlassPane();

    protected void setRootPane(JRootPane root);

    public JRootPane getRootPane();

    protected JRootPane createRootPane();

    4. JPanel

    Echivalentul Swing al clasei AWT Panel este JPanel. JPanel suporttoate tipurilede layout manager din AWT, plus cele noi din Swing.

    4

  • 7/25/2019 laborator11 -Java

    5/9

    i mpor t j ava. awt . *;i mpor t j avax. swi ng. *;cl ass Test Panel ext ends J Fr ame{publ i c Test Panel ( ){

    set Si ze( 200, 200 ) ;setBackgr ound( Col or . gr ay ) ;

    J Panel t opPanel = new J Panel ( ) ;t opPanel . setLayout ( new Gr i dLayout ( 3, 2 ) ) ;get Cont ent Pane( ) . add( t opPanel ) ;t opPanel . set Backgr ound( Col or . l i ght Gr ay ) ;t opPanel . add( new But t on( "One" ) ) ;t opPanel . add( new But t on( "Two" ) ) ;t opPanel . add( new But t on( "Thr ee" ) ) ;t opPanel . add( new But t on( "Four " ) ) ;t opPanel . add( new But t on( "Fi ve" ) ) ;}

    publ i c stati c voi d mai n( St r i ng ar gs[ ] ){Test Panel mai nFr ame = new Test Panel ( ) ;mai nFrame. set Vi si bl e( t r ue ) ;}}

    Clasa TestPanel este derivat din JFrame; creeaz o instan JPanel creia i seaplic GridLayout manager. Butoanele sunt adugate instanei JPanel, ci nu ferestreiprincipale.

    O instan JPanel este implicit double buffered, ceea ce reduce efectul de

    flicker n timpul operaiilor de redesenare a ecranului, pentru programele de animaie.Dac utilizm double-buffering pentru o component, toi fii acesteia vor utiliza deasemenea double-buffering (chiar daca nu este activat). JRootPane este componentadin vrful ierarhiei oricrei ferestre Swing, deci activnd double-buffering pentruJRootPane, toate subcomponentele sale vor fi desenate utilizndu-se tehnica double-buffering.

    Constructori JPanel

    JPanel( LayoutManager layout, boolean isDoubleBuffered )

    - creeazo instanJPanel cu un layout specifcat, iar capacitile de double bufferingsunt controlate de variabila de tip boolean.JPanel( LayoutManager layout )- creeazo instanJPanel cu un layout specifcat.JPanel( boolean isDoubleBuffered )

    - creeazo instanJPanel cu un layout implicit de tipul FlowLayout, iar capacitile dedouble buffering sunt controlate de variabila de tip boolean.JPanel()

    - creeazo instanJPanel cu un layout implicit de tipul FlowLayout, iar capacitile dedouble buffering sunt activate.

    5

  • 7/25/2019 laborator11 -Java

    6/9

    5. Borders

    Pachetul border furnizeaz urmtoarele clase care por fi aplicate oricreicomponente Swing:BevelBorder o margine 3D cu o nfiare ridicat sau nu (respectiv raised saulowered).CompoundBorder - o combinaie de 2 alte tipuri de margini: o margine interioar i omargine exterioar.EmptyBorder - o margine transparentutilizatpentru a defini un spaiu vid n jurul uneicomponente.EtchedBorder o margine cu o linie gravat.LineBorder - o margine cu o grosime i culoare specificate.MatteBorder - o margine constnd fie dintr-o culoare, fie dintr-o imagine repetat(tiled).SoftBevelBorder o margine 3D cu o nfiare ridicat sau nu, i cu capetele rotunjite.

    TitledBorder o margine care permite existena unui titlu ntr-o anume poziie i locaie.

    Pentru a seta marginea unei componente Swing se apeleazmetoda setBorder()aJComponentei. Exist de asemenea i o clas numit BorderFactory (n pachetuljavax.swing), care conine un grup de metode statice utilizate pentru contruirea rapiddemargini. De exemplu:

    myComponent.setBorder(BorderFactory.createEtchedBorder());

    i mpor t j ava. awt . *;i mpor t j avax. swi ng. *;

    i mpor t j avax. swi ng. bor der . *;cl ass BorderTest ext ends J Frame{publ i c Bor der Test ( ) {set Ti t l e( "Bor der Test" ) ;set Si ze( 450, 450) ;

    J Panel cont ent = ( J Panel ) getCont entPane( ) ;cont ent . set Layout ( new Gr i dLayout ( 6, 2) ) ;

    J Panel p = new J Panel ( ) ;p. set Bor der( new Bevel Bor der ( Bevel Bor der . RAI SED) ) ;p. add( new J Label ( "RAI SED Bevel Bor der " ) ) ;cont ent . add( p) ;p = new J Panel ( ) ;p. set Border ( new Bevel Border ( Bevel Border . LOWERED) ) ;p. add( new J Label ( "LOWERED Bevel Border" ) ) ;cont ent . add( p) ;p = new J Panel ( ) ;p. set Bor der ( new Li neBor der ( Col or . bl ack, 5) ) ;p. add( new J Label ( "Bl ack Li neBor der , t hi ckness = 5") ) ;cont ent . add( p) ;p = new J Panel ( ) ;

    6

  • 7/25/2019 laborator11 -Java

    7/9

    p. set Bor der( new Empt yBor der ( 10, 10, 10, 10) ) ;p. add( new J Label ( "Empt yBor der wi t h thi ckness of 10" ) ) ;cont ent . add( p) ;p = new J Panel ( ) ;p. set Bor der( new Et chedBorder ( Et chedBorder. RAI SED) ) ;p. add( new J Label ( "RAI SED Et chedBorder " ) ) ;

    cont ent . add( p) ;p = new J Panel ( ) ;p. set Border ( new Et chedBorder ( Et chedBorder . LOWERED) ) ;p. add( new J Label ( "LOWERED EtchedBorder") ) ;cont ent . add( p) ;p = new J Panel ( ) ;p. setBor der ( new Sof t Bevel Bor der ( Sof t Bevel Bor der . RAI SED) ) ;p. add( new J Label ( "RAI SED Sof t Bevel Bor der " ) ) ;cont ent . add( p) ;p = new J Panel ( ) ;p. set Bor der( new Sof t Bevel Border ( Sof t Bevel Bor der . LOWERED) ) ;p. add( new J Label ( "LOWERED Sof t Bevel Border") ) ;

    cont ent . add( p) ;p = new J Panel ( ) ;p. set Bor der ( new Mat t eBor der ( new I mageI con( "spi r al . gi f ") ) ) ;p. add( new J Label ( "Mat t eBor der " ) ) ;cont ent . add( p) ;p = new J Panel ( ) ;p. setBor der ( new Ti t l edBor der (new Mat t eBor der ( new I mageI con( "spi r al . gi f ") ) , "Ti t l e St r i ng") ) ;p. add( new J Label ( "Ti t l edBor der usi ng Mat t eBor der " ) ) ;cont ent . add( p) ;p = new J Panel ( ) ;p. setBor der ( new Ti t l edBor der (new Li neBor der ( Col or . bl ack, 5) , "Ti t l e St r i ng") ) ;p. add( new J Label ( "Ti t l edBor der usi ng Li neBor der " ) ) ;cont ent . add( p) ;p = new J Panel ( ) ;p. setBor der ( new Ti t l edBor der (new Empt yBor der ( 10, 10, 10, 10) , "Ti t l e St r i ng") ) ;p. add( new J Label ( "Ti t l edBor der usi ng Empt yBor der " ) ) ;cont ent . add( p) ;set Vi s i bl e( t r ue) ;}publ i c stat i c voi d mai n( St r i ng ar gs[ ] ) {new Border Test ( ) ;}

    }

    Crearea unei margini definite de utilizator

    Se implementeazinterfaa javax.swing.Border i se definesc urmtoarele 3 metode:void paintBorder(Component c, Graphics g)Insets getBorderInsets(Component c)boolean isBorderOpaque()

    7

  • 7/25/2019 laborator11 -Java

    8/9

    Sconsiderm urmtorul exemplu. Programul construiete o margine

    dreptunghiularridicat i umbritcu colurile rotunjite. Variabilele instan:int m_w: valorile stanga i dreaptaint m_h: valorile sus i jos

    Color m_topColor: culoarea non-shadowColor m_bottomColor: culoarea shadow.

    i mpor t j ava. awt . *;i mpor t j avax. swi ng. *;i mpor t j avax. swi ng. bor der . *;publ i c cl ass Oval Border i mpl ement s Border{pr ot ect ed i nt m_w=6;pr otect ed i nt m_h=6;pr otected Col or m_t opCol or = Col or . whi t e;pr otected Col or m_bot t omCol or = Col or . gr ay;

    publ i c Oval Bor der ( ) {m_w=6;m_h=6;}publ i c Oval Bor der ( i nt w, i nt h) {m_w=w;m_h=h;}publ i c Oval Bor der ( i nt w, i nt h, Col or t opCol or ,Col or bot t omCol or) {m_w=w;m_h=h;m_t opCol or = t opCol or ;m_bot t omCol or = bot t omCol or ;}publ i c I nset s getBorderI nset s( Component c) {r et urn new I nset s( m_h, m_w, m_h, m_w) ;}publ i c bool ean i sBor der Opaque( ) { r et ur n t r ue; }publ i c voi d pai nt Border( Component c, Gr aphi cs g,i nt x, i nt y, i nt w, i nt h) {w- - ;h- - ;g. set Col or ( m_t opCol or ) ;g. dr awLi ne( x, y+h- m_h, x, y+m_h) ;

    g. dr awAr c( x, y, 2*m_w, 2*m_h, 180, - 90) ;g. drawLi ne( x+m_w, y, x+w- m_w, y) ;g. drawAr c( x+w- 2*m_w, y, 2*m_w, 2*m_h, 90, - 90) ;g. setCol or ( m_bot t omCol or ) ;g. drawLi ne( x+w, y+m_h, x+w, y+h- m_h) ;g. drawAr c( x+w- 2*m_w, y+h- 2*m_h, 2*m_w, 2*m_h, 0, - 90) ;g. drawLi ne( x+m_w, y+h, x+w- m_w, y+h) ;g. dr awAr c( x, y+h- 2*m_h, 2*m_w, 2*m_h, - 90, - 90) ;}

    8

  • 7/25/2019 laborator11 -Java

    9/9

    publ i c stat i c voi d mai n( St r i ng[ ] ar gs) {J Fr ame f r ame = new J Fr ame( "Cust om Bor der : Oval Bor der" ) ;J Label l abel = new J Label ( "Oval Bor der" ) ;( ( J Panel ) f r ame. getCont ent Pane( ) ) . set Bor der ( new CompoundBor der (new Empt yBorder( 10, 10, 10, 10) , new Oval Border( 10, 10) ) ) ;f r ame. get Cont ent Pane( ) . add( l abel ) ;

    f r ame. setBounds( 0, 0, 300, 150) ;f r ame. set Vi si bl e( t r ue) ;}}

    III.

    MODUL DE LUCRU

    1. Se editeazcodul sursal programului Java folosind un editor de text disponibil(deex., se poate utiliza Notepad).

    2. Se salveaz fiierul cu extensia .java. Fiierul trebuie salvat la urmtoarea locaie:c:\JBulider7\jdk1.3.1\bin

    Compilarea aplicaiei Java se va face din linia de comand. Se poate proceda astfel.Se deschide o fereastrMS-Dos: Start ->Run, se tiprete commandn csua de text ise apasbutonul OK. Printr-o schimbare de directoare i subdirectoare se trece la locaia:c:\JBulider7\jdk1.3.1\bin. Sau, se lanseaz WindowsCommander. Se trece la locaiac:\JBulider7\jdk1.3.1\bin. Se deschide o fereastrMS-Dos: Commander ->Run Dos.3. Pentru compilare, se tiprete la prompter javac nume_fiier_surs.javai se apas

    Enter. De ex., dacfiierul se numete Test.java, se va scriejavac Test.java. n cazuln care programul conine erori acestea vor fi semnalate i afiate n fereastraMS-Dos, dup care va apare iar prompter-ul. Dac programul nu conine erori icompilarea se face cu succes, atunci va apare numai prompter-ul.

    4. Pentru rularea unei aplicaii Java stand-alone, se lanseaz interpretorul Java. Se

    tiprete la prompter urmtoarea comandjava nume_clas_care_conine_mainise apas Enter. De ex., dac clasa din program care conine metoda main( ) senumete Test, se va scriejava Test.

    5. Dacprogramul Java este un applet, se editeazfiierul .html. Se salveazn acelaidirector cu fiierul .classrezultat n urma compilrii cu succes a fiierului sursjava.Dup compilarea aplicaiei Java, fiierul .class mpreun cu fiierul .html pot fimutate n orice alt director (nu trebuie neaprat sfie n c:\JBulider7\jdk1.3.1\bin ).Se ncarcfiierul .htmlntr-un browser Web (ex., Internet Explorer).

    IV.

    TEM

    1. Se vor parcurge toate exemplele prezentate n platforma de laborator testndu-sepractic.

    2. Scriei un applet Java care sconin3 componente de tip Panel, fiecare avnd untip diferit de margine (border). Pe fiecare panel se vor plasa unul sau mai multebutoane. Se vor utiliza numai componente grafice swing, cu excepia butoanelorcare vor fi AWT.

    9