Hirdetés

Keresés

Új hozzászólás Aktív témák

  • Lortech
    addikt

    Sziasztok!

    Nem vagyok egy nagy java májer, úgyhogy bocs ha nagy hülyeséget kérdezek :)
    Szóval írok egy progit, aminek van GUI-ja. A panelokhoz a netbeans beépített JPanel Form készítőjét használtam
    Leírom kb a program vázát:

    main{
    ProgramUI ablak = new ProgramUI();
    }

    public class ProgramUI extends JFrame {
    pnJobb = new JobbPanel();
    pnAlso = new AlsoPanel();

    this.add(pnJobb, BorderLayout.EAST);
    this.add(pnAlso, BorderLayout.SOUTH);
    validate();
    }
    }

    na én nekem mondjuk van a pnJobb panelen egy gombom, legyen start. ha rányomok a startra, szeretném meghívni az ablak start() fv-ét. ezt csk úgy tudtam elérni, ha statikusnak deklarálom a ProgramUI start fv-ét, és az osztályfv-t hívom meg. ez így nme az igazi, bár igazából járható út lenne azt hiszem, mert úgyis csak egy példánya van az osztálynak.
    az még jobb lenne, ha nem a pnJobb kezelné az inputot (vagyis ne ott legyen az actionlistener), hanem esetleg az ProgramUI osztály. ez megoldható valahogy? :)

    de általánosságban is érdekelne a kérdés: ha létrehozok egy objektumot, akkor annak az objektumnak minden fv-ét el tudom érni (hacsak nem private...), de mi van, ha én a létrehozott objektumból akarom meghívni a létrehozó objektum fügvényét? azt hogyan csinálom? Tehát kommunikáljon mindkét irányba.

    de általánosságban is érdekelne a kérdés: ha létrehozok egy objektumot, akkor annak az objektumnak minden fv-ét el tudom érni (hacsak nem private...), de mi van, ha én a létrehozott objektumból akarom meghívni a létrehozó objektum fügvényét? azt hogyan csinálom? Tehát kommunikáljon mindkét irányba.

    Szóval alapvetően ilyen szempontból megkülönböztetünk static - osztályszintű és példányszintű függvényt.
    Osztályszintű függvényt az osztály nevén keresztül tudsz meghívni - osztályszintű fgv definícióban nem hivatkozhatsz az osztály példányszintű mezőire illetve fgv-eire, mert azok az osztály egy konkrét előfordulásához, példányához kötődnek.
    Példányszintű függvényt az osztály egy adott példányánának referenciáján keresztül hívhatsz meg.
    Konkrétan a kérdésedre válaszolva, ahhoz szükséged van a "létrehozott" objektumban a létrehozó objektum egy példányára, ill. annak referenciájára. Ezt biztosíthatod úgy, hogy átadod a létrehozott objektumnak paraméterként (pl. konstruktorban), vagy az adott függvénynek, ahonnan hívni akarod a létrehozott objektumot. Bizonyos esetekben az is megoldás lehet, ha a "létrehozott" objektumban példányosítasz a létrehozó objektum típusából - ha nem lényeges az _eredeti_ objektum belső állapota (ált. ezek osztályszintű fgv-ek, de nem feltétlenül). Akár a létrehozott objektum egy mezője is lehet ez a példány, tarthatod ott is a referenciáját.
    A legfontosabb, hogy mielőtt netbeansben egy GUI-t összekattintgatunk, az alapokkal tisztában legyünk.. mert egyszerűnek látszik a felhasználóbarát GUI builder, de ettől még tudni kell java-ban programozni, ha faéknél bonyolultabb programot csinálsz..

  • eziskamu
    addikt

    Sziasztok!

    Nem vagyok egy nagy java májer, úgyhogy bocs ha nagy hülyeséget kérdezek :)
    Szóval írok egy progit, aminek van GUI-ja. A panelokhoz a netbeans beépített JPanel Form készítőjét használtam
    Leírom kb a program vázát:

    main{
    ProgramUI ablak = new ProgramUI();
    }

    public class ProgramUI extends JFrame {
    pnJobb = new JobbPanel();
    pnAlso = new AlsoPanel();

    this.add(pnJobb, BorderLayout.EAST);
    this.add(pnAlso, BorderLayout.SOUTH);
    validate();
    }
    }

    na én nekem mondjuk van a pnJobb panelen egy gombom, legyen start. ha rányomok a startra, szeretném meghívni az ablak start() fv-ét. ezt csk úgy tudtam elérni, ha statikusnak deklarálom a ProgramUI start fv-ét, és az osztályfv-t hívom meg. ez így nme az igazi, bár igazából járható út lenne azt hiszem, mert úgyis csak egy példánya van az osztálynak.
    az még jobb lenne, ha nem a pnJobb kezelné az inputot (vagyis ne ott legyen az actionlistener), hanem esetleg az ProgramUI osztály. ez megoldható valahogy? :)

    de általánosságban is érdekelne a kérdés: ha létrehozok egy objektumot, akkor annak az objektumnak minden fv-ét el tudom érni (hacsak nem private...), de mi van, ha én a létrehozott objektumból akarom meghívni a létrehozó objektum fügvényét? azt hogyan csinálom? Tehát kommunikáljon mindkét irányba.

    Van rá egy nagyon amatör javaslatom. Legyen egy külön osztály, aminek mondjuk egy statikus változója tartalmazza az objektumot (csak legyen időben értékadás :) ), de esetleg a már létrehozáskor is átadhatod magát a hívó objektumot egy új paraméterként (a hívott objektum konstruktorának paraméterlistáját kibővítve).

Új hozzászólás Aktív témák