Spletni dnevnik
ccpcreations.com v2
LANGUAGE


SEKCIJE
Vse
Android Development
J2ME aplikacije
Kdo sem
Moje skladbe
Moji programi
Nasveti za Javo
Projekti
Triki in namigi
Varnostna politika - Privacy Policy
Zanimivosti


ISKANJE


BLOGI
bohak.si
zelenik.net


POVEZAVE
Mozilla Firefox
Android


ČLANKI PRED LETOM DNI
Datum: 09. oktober 2010
Video Live Wallpaper 0.83b for Android


OCENE OGLEDANIH FILMOV
Avatar 5
Star Trek 4.5
(500) Days of Summer 4.5
Moon 4
2012 3


ZADNJI ODGOVORI
From: Matic
Re: Kako do izbrisanih dat
From: Filip
Re: Video Live Wallpaper 0
From: okokkji

From: hideo
Re: WiimoteController 0.3
From: Katarina



ZA SMETIŠČARJE!
brother_decide@gmail.com
her_courseiud@hotmail.com
take.fine@gmail.com
posecardsf@juno.com
settle-dressxfh@juno.com


Blog zamrznjen -- Blog Frozen

Ta spletni dnevnik je zamrznjen. To pomeni, da ne bo več prejemal novih prispevkov in komentarjev. Kmalu bo tudi arhiviran in s tem prestavljen na trajnejše mesto. Temu sporočilu sledi običajna vsebina spletnega dnevnika.

Hvala za razumevanje.
This blog has been frozen. This means it will no longer accept new posts and comments. It will soon be archived and moved to a more permanent location. Below this message you can find the blog's usual contents.

Thank you for your understanding.
Naloga 4: AWT

Prosim, da, v kolikor želite to besedilo objaviti kje drugje, to storite tako, da linkate povezavo do te strani, ne pa da kopirate besedilo na drugo stran. S pisanjem teh nasvetov si (brez pričakovanja plačila) trgam dragocen čas.

Ti nasveti obravnavajo zaenkrat le ustvarjanje izgleda grafičnega vmesnika, ne pa še funkcionalnosti.
Edit: To besedilo sem po pobudi našega asistenta popravil, ker je imelo nekaj napak.

NAJ TI NAVETI NE BODO (EDINA?) OSNOVA ZA OPRAVLJANJE IZPITA! ZA MOREBITNI NEOPRAVLJEN IZPIT NE ODGOVARJAM!

Abstract Window Toolkit
»Nabor abstraktnih okenskih orodij«


AWT je v Javi nabor razredov in vmesnikov, s katerimi delamo za svoje programe grafični vmesnik. Java je v osnovi konzolni (tekstovni) programski jezik in AWT ji doda zmožnost kreiranja grafičnega vmesnika. AWT je nabor okenskih orodij, ki omogoča grafični vmesnik neodvisno od okolja izvajanja. Grafični izgled vmesnika se podreja samim grafično-oblikovnim karakteristikam sistema, v katerem se program zaganja. To pomeni, da bo vaš program izgledal v Windowsih XP drugače, kot v Windowsih 2000, tam pa spet drugače kot v Linuxu.


Osnovni gradniki in ostala orodja se nahajajo v razredu
java.awt
in ta razred morate vključiti v vaš projekt. Izdelave grafičnega okolja se lahko lotite na dva načina: eden je, da ustvarite nov objekt tipa Frame:
Frame glavnoOkno=new Frame();

in nato delate z njim kot z vsakim drugim objektom. Drug način pa je, da za podstrukture smiselno in logično ustvarjate podrazrede, ki dedujejo od ustreznih orodij:
class GlavnoOkno extends Frame { ... }

v vašem glavnem programu pa ustvarite objekt tega tipa:
GlavnoOkno glavnoOkno=new GlavnoOkno();






Frame in ostali vsebniki

Frame je vsebnik in ima izgled okna. V vašem programu lahko naredite koliko oken želite. V vsako od teh oken nato dodate vsebnike (container), v te pa gradnike (gumbe, polja z besedilom, besedila, ...). Pomembno se je zavedati, da so vsebniki tudi gradniki, torej jih lahko dodate v vsebnike in tako ustvarite gnezdeno strukturo.

Če ste se odločili za uporabo podrazredov, ustvarite nov razred za svoje okno z naslednjimi ukazi:
class GlavnoOkno extends Frame {
public GlavnoOkno() {
//Tukaj napolnite okno s vsebino, na primer:
add(new Button("Prvi gumb" ));
}
}
//V glavnem programu:
GlavnoOkno glavnoOkno=new GlavnoOkno();
glavnoOkno.setVisible(true);

Vidite lahko, da ste ustvarili nov razred GlavnoOkno, katerega konstruktor boste sprogramirali, da bo dodal elemente v samega vase. Ko v glavnem programu nato naredite objekt vašega novega tipa, se požene konstruktor in ga ustrezno oblikuje. Prednost metode s podrazredi je, da en razred predstavlja neko okno kot logično celoto - pozneje, ko boste dodajali npr. gumbe, si boste želeli zapomniti reference do nekaterih in jih boste dodali kot atribut razreda GlavnoOkno.

Enak primer zgornjemu primeru, le z direktno kreacijo objektov:
//V glavnem programu:
Frame glavnoOkno=new Frame();
//Tukaj napolnite okno s vsebino, na primer:
glavnoOkno.add(new Button("Prvi gumb" );
glavnoOkno.setVisible(true);

Ta metoda sicer trenutno zgleda enostavnejša, kot prejšnja, vendar pa je prejšnja veliko bolj razvidna in logična, ko oblikujete zelo zapleten grafični vmesnik.





Layout Manager

Layout manager (razporejevalnik) je sistem, s katerim zadolžite AWT, da razvršča vaše grafične elemente (gradnike). Layout manager nastavljate vsebnikom. Razred Panel je eden od vsebnikov, predstavlja pa strukturo pravokotne oblike, v katero nato dodajate vaše gradnike. (tudi aplet (razred Aplet) je otrok (podeduje od) razreda Panel, zato si lahko predstavljate Panel kot neke vrste aplet, le da ga tokrat postavite v vaš grafični vmesnik, ne v spletno stran (aplet se po funkcionalnosti seveda razlikuje od panela, saj je samostojna struktura, ki jo uporabljamo v druge namene kot panel))

Osnovni Layout Managerji so naslednji:


Ko ustvarite vsebnik, ima ta ob deklaraciji privzet layout manager. Panel-u (torej tudi v Apletu) je privzet FlowLayout, Frame-u (običajno okno z naslovno vrstico) in Dialog-u (pogovorno okno) pa je privzet BorderLayout. Če želite vsebniku nastaviti drug layout, to storite z naslednjim stavkom:
vsebnik.setLayout(Layout layout);

kjer je layout seveda eden od zgoraj naštetih layout-ov. Primer nastavitve BorderLayouta Panelu:
mojPanel.setLayout(new BorderLayout() );






Tipični konstruktorji Layout Managerjev

Raznoliki konstruktorji Layout Managerjev omogočajo prilagoditev samega Layout Managerja že med stvaritvijo (besedica new). Reference na nekatere Layout Managerje si je smiselno zapomniti, spet na druge ne. Če boste Layout Managerja kasneje rabili, ga naredite na primer na naslednji način:
GridBagLayout gbl=new GridBagLayout();
vsebnik.setLayout(gbl);

če ne, pa kar direktno:
vsebnik.setLayout(new GridBagLayout());

Tudi, če ste ga uporabili kar direktno, ga še vseeno lahko najdete z metodo vsebnik.getLayout().

  • null

    Null ni dejansko ime Layout Managerja. Če nekemu vsebniku nastavite Layout Manager na null, ste mu s tem odvzeli Layout Manager in vsem gradnikom na tem vsebniku morate določiti absolutno pozicijo in velikost.
    vsebnik.setLayout(null); //tako vsebniku odvzamete Layout Manager


  • FlowLayout

    new FlowLayout()
    new FlowLayout(int poravnava)
    new FlowLayout(int poravnava, int presledekVVodoravniSmeri, int presledekVNavpicniSmeri)

    poravnava je lahko:

  • Presledek v vodoravni/navpični smeri pa pove, koliko prostora (v zaslonskih točkah oz. pixlih) naj bo med gradniki v ustrezni smeri (privzeto 5).

  • GridLayout

    new GridLayout()
    new GridLayout(int steviloVrstic, int steviloStolpcev)
    new GridLayout(int steviloVrstic, int steviloStolpcev, int presledekVVodoravniSmeri, int presledekVNavpicniSmeri)

    Število vrstic/stolpcev je število vrstic in stolpcev mreže, ki naj jih GridLayout uporablja pri vstavljanju gradnikov.

  • GridBagLayout

    new GridBagLayout()

    Ta Layout Manager ima le en konstruktor. Kam naj kakšen gradnik postavi in druge lastnosti, določimo ob samem dodajanju gradnika v vsebnik s objektom tipa java.awt.GridBagConstraints, a več o tem v poglavju o dodajanju.

  • BorderLayout

    new BorderLayout()
    new BorderLayout(int presledekVVodoravniSmeri, int presledekVNavpicniSmeri)


  • CardLayout

    new CardLayout()
    new CardLayout(int presledekVVodoravniSmeri, int presledekVNavpicniSmeri)






    Dodajanje gradnikov pri različnih Layout Managerjih

    Kako dodajamo gradnike v vsebnik je odvisno od tega, kakšen Layout Manager ima le-ta nastavljen. Univerzalna sintaksa dodajanja gradnika na vsebnik je ena od naslednjih:
    (1*) vsebnik.add(Component gradnik) //Doda gradnik na naslednje prosto mesto
    (2*) vsebnik.add(Component gradnik, int p) //Gradnik vrine na p-to mesto med že obstoječe gradnike
    (3*) vsebnik.add(Component gradnik, Object omejitve) //Doda gradnik z omejitvami
    (4*) vsebnik.add(Component gradnik, Object omejitve, int pozicija) //Gradnik z omejitvami vrine na p-to mesto med že obstoječe gradnike

    Katero od teh metod je mogoče uporabiti in kako se bodo obnašale, je odvisno od Layout Managerja.

  • null

    Brez Layout Managerja je smiselno uporabljati le metodo 1*. Gradniku moremo pred dodajanjem nastaviti velikost in pozicijo:
    gradnik.setBounds(int x, int y, int sirina, int dolzina);

    X in y sta koordinati pozicije (x,y) zgornjega levega kota gradnika. (0,0) je zgornji levi kot vsebnika, na katerega dodajate gradnik.

  • FlowLayout

    Metoda 1*: Gradniki se dodajajo po pravilu branja: od leve proti desni in nato od zgoraj navzdol. Če se velikost vsebnika spremeni, se spremeni tudi pozicija njegovih gradnikov (torej - če se vsebnik preveč zoži, se vsi gradniki, ki se jih sicer nebi več videlo, prestavijo v nove vrstice).

  • GridLayout

    Metoda 1*: Gradnik se doda v naslednje polje. Če so meje mreže določene, imajo pri polnitvi prednost vrstice - dokler je gradnikov manj kot je število vrstic, se le-ti dodajajo navpično eden pod drugega. Ko vrstic zmanjka, se gradniki prerazporedijo v dve koloni in se nato dodajajo po pravilu branja. Ko spet zmanjka prostora, se naredijo tri kolone itn...

    Metoda 2*: Gradnik se doda na pozicijo pozicija. Pozicija 0 je zgornje levo polje, pozicija 1 je polje desno od njega itd... Pozicije ne moremo preskakovati! Ta metoda je torej dobra le za to, če želimo vriniti nov gradnik med polja, ki so že polna.

  • GridBagLayout

    Metoda 1*: Gradnik se doda v naslednje polje. Za vrstni red dodajanja velja pravilo branja.

    Metoda 2*: Se uporablja za vrivanje novih gradnikov, kot pri GridLayout in pri vseh ostalih. (ne bo več omenjena)

    Metoda 3*: Pri tej metodi pa moramo ustvariti objekt omejitev tipa java.awt.GridBagConstraints, ki ga nato podamo kot argument v add metodi (Object omejitve). Ustvarimo ga lahko na dva načina:
    new GridBagConstraints();
    new GridBagConstraints(int gridx, int gridy, int gridwidth, int gridheight, double weightx, double weighty, int anchor, int fill, Insets insets, int ipadx, int ipady)

    V drugem konstrukturju lahko nastavite vse atribute razreda. Vsi ti atributi so v vsakem takem razredu tudi javni in jih lahko direktno spreminjate. Pomeni atributov:

  • Metoda 4*: Podobno kot metoda 3*, vendar se uporablja za vrivanje novih gradnikov med obstoječe (podobno kot metoda 2*) (ne bo več omenjena)

  • BorderLayout

    Metoda 1*: Gradnik se doda v območje BorderLayout.CENTER (sredina).

    Metoda 3*: Argument omejitve mora biti pri tem Layout Managerju tipa String, pomeni pa, v katero območje se naj gradnik doda. Možne vrednosti tega argumenta:


  • CardLayout

    Metoda 1*: Ta metoda ni možna (glej metodo 3*)

    Metoda 3*: Gradnik se doda na dno že obstoječih "kart". Priredi se mu ime, ki ga podamo v argumentu omejitve (kljub tipu argumenta Object, je ime seveda tipa String (kar je v bistvu tudi Object)).

    "Karte" nato menjavate z eno od naslednjih metod, ki si jih lasti razporejevalnik:
    CardLayout mojCL=(CardLayout)vsebnik.getLayout(); //Dobi referenco od CardLayout Managerja
    //Tega ni potrebno storiti, če ste si zapomnili referenco CardLayout-a, ko ste ga prirejali vmesniku







  • Primer uporabe CardLayout Layout Managerja

    Primer prikazuje, kako naložimo karte eno na drugo in kako nato med njimi menjujemo.
    PREBERITE IN UPOŠTEVAJTE KOMENTARJE!
    PrimerCardLayout.java
    Nasveti za Javo - 22. april 2007 @ 15:23 - Ogledov: 3613 - Komentarjev: 0
    Komentarji
    Ni komentarjev.
    Komentirajte ta vnos (registracija ni potrebna)
    Tega vnosa žal ni dovoljeno komentirati.