Hirdetés

Keresés

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

  • shev7
    veterán

    ja, mostmár valamennyire értem

    mostmár nagyjából megvan az alapja az egész programnak, csak azt nem tudom hogy oldjam meg a kommunikációt két olyan objektum közt amikor egyik számára nem ismert a másik obj.példány neve, mégis meg kéne hívni a metódusát

    konkrétan arról van szó hogy a bábuk tömbjét (class Babu extends JPanel) adatelemként tartalmazó objektum (class Tabla) tartalmazza a tömböt módosító metódusokat is , ezeket kellene meghívni az egyes bábúkra aggatott eseménykezelőkből (MouseListener), csak hát a az eseménykezelő nem tudja a nevét a táblának ami egy másik osztályban, az ablakban kerül példányosításra (Ablak extends JFrame)

    ami leegyszerűsítené a dolgokat hogy a Tabla class implementálná a MouseListentenert is egyben, és így abból egyszerűen meg lehetne hívni a 'Tabla' metódusait
    azonban ez ellentmondana a terveimnek (külön classok) illetve az újrafelhasználhatóságnak

    [link]
    itt találtam megoldásokat, csak ebben az esetben nem olyan egyszerű mert nem az eseményt kiváltó objektum metódusát kell meghívni hanem annak az objektumnak (tábla) a metódusát ami az eseményt kiváltó objektumok tömbjét tartalmazza adattagként ( Babu[][] mezok = new Babu[5][5]; )

    Erre szerintem a legegyszerubb, ha minden babunak van referenciaja a tablara, meg egy getter metodusa hozza. A babuk peldanyositasanal atadod a tabla objektum referenciajat is, az esemenykezelobol meg meghivod a hozza tartozo get-et, es maris megvan amit szeretnel.

  • shev7
    veterán

    "az Event getSource() methodusa Object-et ad vissza."
    na, kösz ezt nem tudtam (gondoltam magát a konkrét objektumot adja vissza mert az összehasonlítás egy ugyanolyan tipusú objektummal és az instanceof, toString működött eddig is, de akkor ezekszerint nem ezért )

    Na, megvan a probléma: rossz volt a zárójelezés és ezért nem fogadta el a cast-olást :)

    Igen magat az objektumot adja vissza. De Object is, hiszen javaban minden osztaly az Object osztalybol szarmazik. Ugy latom az objektumorientalt programozas alapjai hianyoznak egy kicsit.

    persze hogy mukodtek. Mert a getSource azt az objektumot adja vissza amit te szeretnel. Ennek a toString metodusa kerul meghivasra stb. (De attol hogy ennek a tipusa Babu, attol az meg Object is, hiszen abbol szarmazik. A toStringre nem szol be a fordito, mert olyanja van az Objectnek is)

    DE ez mind futasi idoben tortenik. Forditasnal viszont a fordito nem tud semmit errol az objektumrol, neked kell megmondanod, hogy mi az.

  • shev7
    veterán

    Helló, ismét lenne egy kérdésem, ezúttal eseménykezeléssel kapcsolatban:

    Habár már dolgoztam MouseListener-el, és jól is müködött
    most hogy elkezdtem újrairni a programomat különálló osztályokban (egy táblajáték) egyre több a probléma, az egyik hogy az eseménykezelő e.getSource() metódusa elvileg az 'e' eseményt kiváltó objektumot adja vissza
    ennek az egyik metodusát hivnám meg ( getBackground() , mivelhogy egy JPanel példányról van szó)
    de nem hajlandó leforditani se, arra hivatkozva hogy a getBackground()-ot nem találja az ősosztályban (Object) , amit nem értek, hiszen be van importálva az az osztály amiböl a kérdéses objektum van példányositva (JPanel), illetve ugyanez müködött amig egyben volt az egész program

    a fordítási hiba:

    .\elements\EsemenyKezelo.java:13: cannot find symbol
    symbol : method getBackground()
    location: class java.lang.Object
    if( e.getSource().getBackground().equals(Color.GREEN) )

    Azt nem értem, hogy miért simán Object-ként kezeli, miért ott keresi a getBackground()-ot, mikor konkrétan lehet tudni hogy az egy 'JPanel'-ból származtatott 'Babu' osztályú objektum, és abban benne van ez a metodus

    u.i: úgytünik castolással se müködik, illetve akkor se ha az obejektum csak simán JPanel

    "úgytünikcastolással se müködik, "

    Ezt kifejtened? marmint hogyan castoltal? mert pont az a megoldas.

    ugyanis ez: "mikor konkrétan lehet tudni hogy az egy 'JPanel'-ból származtatott 'Babu' osztályú objektum" hulyeseg. nem lehet tudni. Legalabbis a kodod nem tudja. az Event getSource() methodusa Object-et ad vissza. Neked kell megmondanod, hogy ott eppen ez az Object mi is valojaban, ezert kell castolni.

  • Löncsi
    őstag

    Üdv.
    Egy olyan problémám van ami már rettentő idegesítö, mert teljesen érthetetlen és nem találok rá semmi megoldást
    GUI-val kapcsolatos

    Van egy Ablak osztály ami a JFrame-t örökli
    Ha ebben hozok létre egy JLabel-t és adom hozzá, akkor a szöveg egyszerü formázatlan szövegként fog megjelenni az ablakban ( UIManager-el átállítottam a kinézetet, ezért itt nem hat az hogy a swing alapesetben félkövérre állítja a szövegeket)

    De ha ezt a JLabelt egy előre létehozott külső osztályból importálom akkor minden beállítás ellenére félkövérre állítja
    Itt viszont arra gyanakodtam hogy erre már nem terjed ki a Ablak osztály UIManager beállítása - de hiába állítottam itt is be külön a kinézetet, nem működik)
    Ha van valakinek valami ötlete, írjon, elöre is kösz

    néhány kódrészlet:

    Az ablak osztály egyes részei:

    public class Ablak extends JFrame {
    Status statusz;
    JLabel valami;

    [...]

    public Ablak() {
    statusz = new Status();
    valami = new JLabel("nem félkövér, egyszerű szöveg");
    [...]
    add(statusz);
    add(valami);
    }
    }

    A teljes Status osztály:

    import javax.swing.*;
    import java.awt.*;

    public class Status extends JLabel {
    String text;

    public Status() {
    text = new String("ez nem kellene hogy félkövér legyen");
    setText(text);
    }
    }

    Ez esetleg?
    jl.setFont(new Font("Times-Roman", Font.BOLD, 17));

    Vagy
    Font f = label.getFont();

    // bold
    label.setFont(f.deriveFont(f.getStyle() ^ Font.BOLD));
    // unbold
    label.setFont(f.deriveFont(f.getStyle() | Font.BOLD));

    Ez egyszerű kényszerítés, sztem mennie kell..

  • Na, kész is van
    viszont nagyon alap (csak egész számokkal dolgozik)
    nemhinném hogy sokat segít abban a program, de felteszem ide, hátha: [link] :)

    Igen az:D Köszi ezt is vmire tudom használni úgyis:)

  • szte/hálózatok 2010 kötprog esetleg? :D

    sajnos ebben nem vagyok otthon (nekem is lenne elvileg, de nem vettem fel most ezt a tárgyat), de lehet hogy ezt még egyszerűbb lenne konzolosan elkészíteni

    mindenesetre ami kész van azt még ma este felrakom, hátha segít valamit (aztán csinálom a java kötprogot hátha lesz belöe valami :D )

    Na, kész is van
    viszont nagyon alap (csak egész számokkal dolgozik)
    nemhinném hogy sokat segít abban a program, de felteszem ide, hátha: [link] :)

  • Helló

    Én úgy csinálnám (ha GUI-val ellátott számológépröl van szó):

    Ablak osztály mely a JFrame-t örökli:
    -ezen belül a gombváltozók(tömb), egy JLabel az eredmények kijelzésére, és a számváltozók (a, b, c)
    -konsruktor mely létrehozza az Ablakot (beállítja az ablak tulajdonságait, az elrendezést, létrehozza a gombokat, feltölti vele az ablakot)
    -egy eseménykezelő metódus
    -egy számoló metódus

    Program föosztály
    -ezen belül a main metódus, ebben csak példányosítani kell az Ablak-ot, és láthatóvá tenni (bár azt a konstruktorában is lehetne)

    Közben el is kezdtem csinálni, én is már régóta akartam egyet írni :)
    (ha érdekel késöbb beposztolom a kódot)

    szerk.: +megoldani a számok bevitelét műveleti gomb megnyomásáig, na ez lehet hogy nem is lesz olyan egyszerü mint gondoltam elsőre

    Igen érdekelne:) Egy olyan infót kifelejtettem belőle hogy server kliens módon kell megcsinálni:D
    Ez lenne az am:
    A szervernek el kell végeznie a kliens által küldött float típusú számokon a kért számításokat. (összeadás,kivonás,osztás,szorzás,gyökvonás,pozitív egész kitevőjű hatványozás) Tetszőleges számra is működnie kell. (példa input: 5.1 + 2.9 * 3.4 gyök hatv 3 = ) Ekkor a szervernek a következő számítást kell elvégeznie: ( gyök((5.1 + 2.9) * 3.4) )^3 . Tehát nem kell a műveletek precedenciájával foglalkozni, mindig az utolsó részéredmény és az új szám lesz a művelet két operandusa. Az = műveletre küldjük vissza a kliensnek a végeredményt, ő pedig írja ki a képernyőre. A szerver párhuzamosan több klienst is tudjon kiszolgálni. Tegyük fel, hogy a felhasználó helyes inputot küld. Ellenőrizzük az input helyességét, és írjuk ki, hogy mi a hiba.(+) Az inputban az operandusok és a műveleti jelek között tetszőleges számú és mennyiségű whitespace (space,TAB,újsor) szerepelhet.(+)

    A baj hogy én c-t tanultam eddig és a java halozat szinten sok:S Egy multiecho szerverből gondoltam kiindulni mert hogy több clienset kell kezelni.

  • Lortech
    addikt

    Üdv.

    Az esemény kezeléssel kapcsolatban lenne egy kérdésem, azon belül pedig az aktivált elem alapján történő vizsgálat:

    e.getSource().equals(gomb1)

    nem egészen értem hogy itt hogy az e esemény getSource metódusának meghivásakor hogy hogy is müködik a .equals

    az action command alapján történő vizsgálatot még értem
    e.getActionCommand() == "egyes"
    mert itt a visszaadott érték egy string, és ezt hasonlitja össze egy másikkal :)

    ( itt találtam egy jó tutorialt, csak ebben pont az nincs részletezve)

    e.getSource().equals(gomb1)

    Az eseményt kiváltó, ill azon komponens referenciáját adja vissza a getSource, amelyen az esemény történik, ezt hasonlítja a paraméterként adott objektum-referenciával.

    Pl. ha több komponensnek is ugyanazt az eseménykezelőt adod meg, akkor így tudod meghatározni, hogy melyik komponensedről van szó éppen a konkrét esemény feldolgozása közben.

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

Hirdetés