Hirdetés

Keresés

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

  • 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.

    ez az, kösz a tippet :R
    ilyesmire gondoltam én is csak nemtudtam hogy lehetne megoldani (nem dolgoztam még ilyen módon obj. referenciákkal)

    az első ötlet az volt hogy lenne egy folyamatosan futó ciklus a táblában ami figyeli pl a bábúk selected adattagjának változását, de ez talán felesleges erőforrás-pazarlás lett volna

    remélem így jo lesz mostmár, de a lényeg hogy egyelőre működik :)

    ((Babu)e.getSource()).getOwner().mezoModosit((Babu)e.getSource());
    így tulajdonképp vissza lesz küldve módosításra az adott mező (ami az eredeti célt meg is valósítja)

  • 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.

    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]; )

  • "ú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.

    "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 :)

  • 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

  • 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 mégegyszer , az első megoldás már hatással van rá, és közben a html tageket is lehet használni

    egy Ablak classban lévő label beállításának átvételével , sikerült megoldani azt is hogy ne kelljen külön beállítgatni
    statusz.setFont(valami.getFont());

  • 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..

    kösz, holnap ha lesz időm kipróbálom (ezt a fajta módszert nem ismertem, html kódokkal szoktam előreformázni a szöveget)

  • Ü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);
    }
    }

  • 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] :)

  • 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.

    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 )

  • Sziasztok

    Nekem egy olyan kérdésem lenne hogy egyszerű számoológéphez valaki segítséget tuna e?Előre is köszi.

    üdv bolvar

    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

  • Üdv újra
    ha valaki tapasztalt a paintComponent() használatában, le tudná irni hogy lehet az alább is látható "felület"-et többféle alakzat kirajzolására használni, anélkül hogy újabb rajzfelületeket kelljen létrehozni minden alakzatnak

    class Felulet extends JPanel {
    Felulet() {
    setPreferredSize(new Dimension(600,290));
    setOpaque(true);
    }
    protected void paintComponent(Graphics g) {
    g.setColor(Color.RED);
    g.fillRect(x0, y0, x1, y1);
    }
    }

  • 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.

    Kösz,
    közben rá is jöttem hogy müködik pontosan

    Igazából azt nem értettem hogy a getSource metódust hogyhogy lehetséges ponttal elválasztva összekötni az equals metódussal
    Aztán leesett hogy mikor a getSource visszaadja obj. referenciáját -> annak hívja meg az equals metódusát (mivelhogy minden objektumnak megvan ez a metódus)

  • Ü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)

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

Hirdetés