java, bakalarska otazka :))

Programovacie jazyky, rady, poradňa...
nolentak
Amateur
Amateur
Príspevky: 11
Registrovaný: 29 okt 2008, 19:28

java, bakalarska otazka :))

Príspevok od používateľa nolentak »

zdravim.
Ako java lama som narazil na maly problem. Uloha je nasledovna:
Mame nejake buttony a chceme, aby pri stlaceni buttonu sa vykonala akcia- vykreslenie obdlznika, "najlepsie" metodou

paint(Graphics g) {
g.drawRect(nejake suradnice, tira ri ra..)
}

na obsluhu udalosti implementujeme metodu

public void actionPerformed(ActionEvent e) {
//tu chcem, aby sa zavolala metoda na vykreslenie obdlznika, da sa to?
}

Neviem, kde sa vobec vytvara ref. premenna g, a akym sposobom ju predat inej metode, ak je to mozne..
Keby niekto mal sajn, ako na to, /mozno toto nie je cesta../ tak mi pls dajte vediet.
Diky
lama 4ever :cry:
pheo
Light Star
Light Star
Používateľov profilový obrázok
Príspevky: 212
Registrovaný: 20 sep 2005, 16:53
Bydlisko: moje hniezdo
Kontaktovať používateľa:

Príspevok od používateľa pheo »

je :)


takze moje predoklady mas nejakJFrme f v tomnejky jpanel p a jButton b

Ked implementujes tu metodu actionPerformed tak ju implementuj v anonymnej vnutornej triede (inak pisem to z hlavy takze nie je to urcite syntakticky OK)

Kód: Vybrať všetko

addActionLister(new ActionListener() {
    @override
    public void actionPerformed() {
    }

});
(inak viac o swingu na java tutorial)
takato vytvorena trieda ma tu vlatnost ze okremineho vidi na instancie obalovej triedy, teda b.
Tvojou ulohou bude cez nejaky setter (pripade konstruktor) tu instanciu vlozit
nolentak
Amateur
Amateur
Príspevky: 11
Registrovaný: 29 okt 2008, 19:28

Príspevok od používateľa nolentak »

predpoklady su dobre :)
Lenze: nejde o problem implementacie posluchaca a nechcem to riesit anonymnou triedou, kvoli prehladnosti a lahsej pripadnej dalsej modofikovatelnosti. Takze nemam anonym. triedu, ale dalsiu triedu, ktora je registrovana ako posluchac. V tom problem nebol, ide o to, ze som odkukal od pana Herouta, ze sa kresli metodou
paint(Graphics g...... a kedze ma ako formalny parameter referencnu premennu na triedu Graphics, a neviem ani kde sa tato trieda vytvara a parameter g musim pouzit na kreslenie, zaroven obsluha udalosti sa tiez riesi metodou, /actionPerformed { nejake telo} tusim/ teda neviem dostat do jednej metody formalny parameter druhej metody..
Napisem to inac:
Aj keby vnutorna trieda videla do vsetkych atributov obalovacej triedy, tak metoda paint(bla bla..) je vzdy len metoda, ktora ma formalny parameter a presne ten mi treba pouzit v dalsej metode (actionPerformed), takze stale neviem, da sa vykreslit obdlznik pomocou naprogramovania obsluhy na udalost tymto sposobom, alebo je treba nejaku uplne inu cestu?
celkom hokej :roll:
Vladot
Light Expert
Light Expert
Používateľov profilový obrázok
Príspevky: 35
Registrovaný: 20 dec 2005, 19:18

Príspevok od používateľa Vladot »

Graphics získaš z inštancií JPanel alebo JFrame (podľa toho kam to chceš vykresliť) pomocou ich metódy getGraphics().
Pozor ale na to kde implementuješ tú metódu paint( ... ), pretože ak to budeš robiť v triede rozširújúcej JFrame/JPanel tak prekryješ originál paint(...), ktorá sa stará o vykresľovanie a ak tak urobíš, kreslil by som to takto:

Kód: Vybrať všetko

    @Override
    public void paint(Graphics g){
        super.paint(g);
        if(showRec)
            g.drawRect(10, 10, 100, 100);
    }
a premennú showRec si nastavíš pri stlačení buttonu a pri jej zmene nezabudni volať metódu repaint() toho JFrame/JPanel kde to kreslíš...
nolentak
Amateur
Amateur
Príspevky: 11
Registrovaný: 29 okt 2008, 19:28

Príspevok od používateľa nolentak »

to Vladot:
som sa dostal k tomu az teraz, ale funguje, takze diky moc, ma to kus posunulo. Pouzivam getGraphics() v triede, co dedi od Canvas,
no moc su mi nie jasne tie vztahy, ale slape to..

to all:
public void actionPerformed(ActionEvent e) {
akasimetoda(tato metoda nieco robi);
}

metoda actionPerformed() je zrejme staticka, takze ak vola metodu akasimetoda() aj tato musi byt static. Da sa to nejako oblbnut? alebo ako sa riesia taketo pripady?


p.s najlepsi zdroj, ako porozumiet tymto srandam v jave, internet? alebo sa sprtaju prirucky? thinking in java a pod?
p.s2 od @Override nasleduje pretazenie, ci prekrytie?
lamazz :oops:
Vladot
Light Expert
Light Expert
Používateľov profilový obrázok
Príspevky: 35
Registrovaný: 20 dec 2005, 19:18

Príspevok od používateľa Vladot »

Preco by public void actionPerformed(ActionEvent e) by mala byt staticka? Kym tam nie je klucove slovo "static" tak to staticke nebude... :)

Co sa tyka literatury tak pre zaciatok staci http://java.sun.com/docs/books/tutorial/ , samozrejme kvalitna kniha od dobreho autora je skoro vzdy lepsia ako nejake clanky po nete... ale len na ujasnenie pojmov a zaklady je ten tutorial viac nez dostacujuci.

Tusim na nete sa nachadza aj trochu starsi cesky alebo slovensky preklad tych zakladov...
nolentak
Amateur
Amateur
Príspevky: 11
Registrovaný: 29 okt 2008, 19:28

Príspevok od používateľa nolentak »

no to s tym static ma mohlo napadnut..:oops: Lenze ked som do tejto metody dal volat nestaticku metodu, teda ako obsluhu, co sa malo vykonat, prekladac vypisal, ze Expected static method..
Cerpam z toho pana herouta, tam bolo popisane, ze staticka metoda nemoze volat metodu triedy (ak teda nedostane refernciu na uz existujuci objekt).. Tak som si myslel, ze by to mohlo nejak spolu suvisiet.. A prepisal som svoje metody, ktore sa budu volat na staticke, potom to zozral, no neviem ci to bolo to nejspravnejsie riesenie..
Skratka borim sa s tym jak blazen a je v tom teraz bordel
:? snad to do terminu nejako toto...
Odkial mas getGraphics() ? lebo som zhanal taku informaciu po nete a nikde nic az tu na hojkovi
Vladot
Light Expert
Light Expert
Používateľov profilový obrázok
Príspevky: 35
Registrovaný: 20 dec 2005, 19:18

Príspevok od používateľa Vladot »

Tazko povedat preco ti to pisalo, to by trebalo vidiet cely kod... z nestatickych vnorenych tried by si mal mat pristup k celnskym metodam.

Knihy od Herouta su fajn, aj ked samozreme najlepsie sa naucis praxou... :)
S getGraphics() som sa stretol tiez ked som potreboval nieco vykreslit, takze som zhruba vedel co potrebujes.. ;)
Napísať odpoveď