Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Dodavanje prosirene komponente na JFrame

[es] :: Java :: Dodavanje prosirene komponente na JFrame

[ Pregleda: 1351 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Prika

Član broj: 20692
Poruke: 43
*.dynamic.sbb.rs.

ICQ: 229087266


Profil

icon Dodavanje prosirene komponente na JFrame10.06.2009. u 13:20 - pre 181 meseci
Pozdrav,
poceo sam da se zanimam Java-om i nadam se da ce vremenom to poceti da bude sve ozbiljnije.
Pravim "igru zivota" koja ce raditi u GUI. Da bih prikazao stanje svake celije napravio sam komponentu GUIKolonija koja je prosirena klasa klase JComponent.
Code:

class GUIKolonija extends JComponent{
    private int x;
    private int y;
    public void paint(Graphics graf){
        graf.setColor(Color.BLUE);
        graf.drawRect(x*20, y*20, 20, 20);

    }

    public void setKoordinate(int x, int y){
        this.x = x;
        this.y = y;
    }
}

Prilikom dodavanja komponente na JFrame pomocu metode , komponenta se prikazuje bez problema.
Code:
okvir.add(kolonija);

Medjutim kada pokusam da napravim niz objekata koje cu dodati na JFrame prikazuje mi se samo poslednji kreiran objekat nacrtan na koordinatama x,y.
Code:

    GUIKolonija[][] guiKolonija;
    guiKolonija = new GUIKolonija[10][10];
    for(int y=0; y<=9; y++)
       for(int x=0; x<=9; x++){
           guiKolonija[x][y]=new GUIKolonija();
           guiKolonija[x][y].setKoordinate(x, y);
           prozor.add(guiKolonija[x][y]);
       }

Zbog cega mi program ne crta dvodimenzionalnu matricu kvadrata, nego samo poslednji?
 
Odgovor na temu

Dejan Lozanovic
Dejan Lozanovic
Beograd

Član broj: 691
Poruke: 2325
91.148.87.*

Jabber: null@elitesecurity.org
Sajt: speedy-order.com


+75 Profil

icon Re: Dodavanje prosirene komponente na JFrame11.06.2009. u 20:17 - pre 181 meseci
Pa java Swing radi sa layoutima za prikaz, za razliku od nekih drugih programskih jezika koji su prihvatali apsolutne koordinate. Mozda ti se apsolutne koordinate cine kao dobra stvar , ali generalno to nije slucaj, pre svega posto je java portabilna tj izvrsava se na vise od jednog operativnog sistema. E sad ta informacija ti kaze da ne koriste svi isti font za prikaz svojih kontrola, dok kod windowsa uglavnom svi koriste onaj svoj default font, ne znam da li se secas tog starog perioda kad su ljudi pravili aplikacije u delphiju ili VB-u , pa recimo uzmes Button i u njemu recimo stoji string "Cancel" i to sve lepo izgleda dok recimo neko na svom windowsu nije stavio recimo Large Fonts i tada je sam tekst iskakao iz okvira samog button-a. E sad ti je jasno recimo zasto fixne pozicije nisu dobre kada je gui programiranje u pitanju.

Mogu da ti preporucim ovaj tutorial da bi shvatio kako layouti funkcionisu, i koje sve layoute imas uz svaku JVM
http://java.sun.com/docs/books/tutorial/uiswing/layout/index.html

Iz koda koji vidim tebi ce trebati GridLayout.

a ovo bi otprilike trebao da dodas pre for petlje :)

Code:

// ovo ti govori kako ce JFrame da pozicionira komponente koje dodaje
prozor.setLayout( new GridLayout(10, 10));


    GUIKolonija[][] guiKolonija;
    guiKolonija = new GUIKolonija[10][10];
    for(int y=0; y<=9; y++)
       for(int x=0; x<=9; x++){
           guiKolonija[x][y]=new GUIKolonija();
           guiKolonija[x][y].setKoordinate(x, y);
           prozor.add(guiKolonija[x][y]);
       }



 
Odgovor na temu

Prika

Član broj: 20692
Poruke: 43
82.208.192.*

ICQ: 229087266


Profil

icon Re: Dodavanje prosirene komponente na JFrame11.06.2009. u 21:36 - pre 181 meseci
Vec sam pomislio da ovde nema nikoga :)
Hvala ti na odgovoru!
Nije mi resilo problem, ali si mi dao smernicu za razmisljanje. Vidim da mi se objekti kreiraju, ali se samo poslednji iscrtava.
Ovako izgleda samo treba da se malo pozabavim sa layoutima, jer mi prikazuje sve clanove niza, ali su preterano medjusobno udaljeni.
U svakom slucaju cu javiti da li sam resio ili mi treba dodatna pomoc.
 
Odgovor na temu

Dejan Lozanovic
Dejan Lozanovic
Beograd

Član broj: 691
Poruke: 2325
..178.212.adsl.dyn.beotel.net.

Jabber: null@elitesecurity.org
Sajt: speedy-order.com


+75 Profil

icon Re: Dodavanje prosirene komponente na JFrame12.06.2009. u 17:05 - pre 181 meseci
Znam da ovaj layout ne dolazi uz swing, ali definitivno ga vredi pogledati, mnogo jednostavniji i citljiviji kod od njega dobijas nego uz gridbag layouyt, a isti su po funcionalnosti.

http://www.jgoodies.com/freeware/forms/index.html
 
Odgovor na temu

Prika

Član broj: 20692
Poruke: 43
82.208.192.*

ICQ: 229087266


Profil

icon Re: Dodavanje prosirene komponente na JFrame12.06.2009. u 20:13 - pre 181 meseci
Obzirom da pokusavam da stvorim grid ciji ce objekti biti pozicionirani na tacno odredjenim pozicijama, pronasao sam primer za apsolutno pozicioniranje.
http://roseindia.net/java/example/java/swing/AbsCoordinate.shtml
(Naravno da) za sada ne uspevam da 'nacrtam' kvadrat, ali za ostale komponente uspeva, tako da su mi misli i pokusaji u ovom smeru. Mislim da je ovo definitivno najbolje resenje za moje probleme, samo jos da vidim zasto nece da mi crta komponente.
Code:

    JPanel panel= new JPanel();
    panel.setLayout(null); 
// null je podrazumevana vrednost za apsolutno pozicioniranje
    
    for(int y=0; y<=9; y++)
    for(int x=0; x<=9; x++){
        guiKolonija[x][y]=new GUIKolonija();
// if petlja proverava da li je vrednost clana u referentnom nizu TRUE ili FALSE i na osnovu toga 'crta' popunjen ili prazan kvadrat
       if(guiKolonija[x][y].setZivi(objMatrica.objKolonija[x+1][y+1].getKolonija()))
          guiKolonija[x][y].setZivi(true);
       else
           guiKolonija[x][y].setZivi(false);
           guiKolonija[x][y].setKoordinate(x, y);
           panel.add(guiKolonija[x][y]);
    }
   dugmeSledeca.setBounds(40, 440, 150, 20);
   dugmeStart.setBounds(220, 440,150,20);
   panel.add(dugmeStart);
   panel.add(dugmeSledeca);
   prozor.add(panel);
   prozor.setVisible(true);


Ako imas ideju zasto ne crta komponentu, samo pucaj!
 
Odgovor na temu

Prika

Član broj: 20692
Poruke: 43
82.208.192.*

ICQ: 229087266


Profil

icon Re: Dodavanje prosirene komponente na JFrame12.06.2009. u 20:36 - pre 181 meseci
RESENO!!!

Bilo je potrebno samo ubaciti umesto:
Code:
guiKolonija[x][y].setKoordinate(x, y);

sledece:
Code:
guiKolonija[x][y].setBounds(x*20,y*20,20,20);


Hvala ti na smernicama! Da nije bilo tebe verovatno bih do sad pojeo monitor. :D
Ovo mi je pocetak druzenja sa Java-om i jednog dana cu se verovatno smejati ovom problemu.
Prikačeni fajlovi
 
Odgovor na temu

[es] :: Java :: Dodavanje prosirene komponente na JFrame

[ Pregleda: 1351 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.