Výsledky 1 až 10 z 10

Téma: [Java] jak udelat jednoduchou existencni podminku?

  1. #1
    Promovaný inženýr mince Avatar uživatele Doktor-Prase
    Založen
    14.05.2003
    Bydliště
    Strakonice/Praha 7
    Věk
    42
    Příspěvky
    1 129
    Vliv
    298

    Standardní [Java] jak udelat jednoduchou existencni podminku?

    Mam problem v projektu do skoly,
    mam tridy AppWindow a TreeWindow, AppWindow vytvari na zaklade vybrane polozky v JListu instance tridy AppWindow.

    Problem je takovej, ze nevim jak osetrit aby pokud uz existuje instance tree (tridy TreeWindow) tak aby se nevytvarela nova ale pouzila se jiz existujici.

    neco jako:
    Kód:
    Part value = (Part)productList.getSelectedValue();  //value je vybrana hodnota na listu
    if(tree neexistuje){                                //pokud neexistuje tree
         tree = new AppWindow(value)                    //vytvor tree
    }                                                   //jinak nedelej nic
    tree.show();                                        //ukaz tree - show je metoda tridy TreeWindow
    Tak a ted se musim omluvit za moje popsani mojeho problemu (beztak mam v tech pojmech bordel), ale v Jave jsem samouk-zacatnik (sice tu mam hodiny programovani v Jave, ale jsou -bohuzel- v indonezstine, takze tomu samosebou nerozumim a pokud uz necemu rozumim, tak je to v anglictine, coz taky neni uplne idealni). Pokud mi nekdo prosim poradite, karma je jista vec
    pro jistotu prikladam kod...problem resim na 109 radku AppWindow.java

    Diky moc vsem, preju pekne Vanoce a Hepáč!
    Přiložené soubory Přiložené soubory
    Naposledy upravil Doktor-Prase; 22.12.2006 v 10:56.
    1) BigPiG System mk2 Phenom II x4 955; 4x2048MB DDR3; MSI FX890-GD70; CF 5830; VelociRaptor 300GB + 2xSeagate SV35.5 2TB RAID1 + Samsung F1 750GB + Samsung F2 1,5TB;Lian Li PC-8FIB; 2408WFP
    2) PigPics E-500 + ZD 1445 + ZD 4015 + SanDisk ExtremeIII 4GB + Lexar Premium 1GB - IndoCertified
    3) Pig@Work CATIA V5 r14-r18 @ Precision T5500: Intel W5590, Quadro FX3800 & Dell Ultrasharp U2410 & SpacePilot guaranteeing a minimum of 120 clicks per minute
    4) PigFun Ubuntu 9.10 @ Corsair Flash Voyager 16GB @ Mobile PiG - HP nw8240 M770; FireGL v5000; 15.4" @ 1920x1200; 1+1GB RAM
    5) MiniPig Lenovo X201i: i3 370M; 12" 1280x800 matte; 2GB DDR3 RAM; 6+ hours battery lifetime

  2. #2

    Standardní Re: [Java] jak udelat jednoduchou existencni podminku?

    Mohl bys to ošetřit výjimkou. Když dojde k výjimce, objekt neexistuje a ty ho vytvoříš.
    Naposledy upravil frelichl; 22.12.2006 v 12:16.
    Lenovo X200 | Lenovo Ultrabase | Sennheiser HD 595 | Fujitsu Siemens P19-2 Black | Logitech Internet Navigation Keyboard | Logitech VX Revolution

  3. #3
    Promovaný inženýr mince Avatar uživatele Doktor-Prase
    Založen
    14.05.2003
    Bydliště
    Strakonice/Praha 7
    Věk
    42
    Příspěvky
    1 129
    Vliv
    298

    Standardní Re: [Java] jak udelat jednoduchou existencni podminku?

    Citace Původně odeslal frelichl Zobrazit příspěvek
    Mohl bys to ošetřit výjimkou. Když dojde k výjimce, objekt neexistuje a ty ho vytvoříš.
    Ou, diky za snahu, ale bohuzel nevim co tim myslis... Nejlepsi by byl kousek kodu, kterej by to poresil... prosim...
    K+ posilam
    1) BigPiG System mk2 Phenom II x4 955; 4x2048MB DDR3; MSI FX890-GD70; CF 5830; VelociRaptor 300GB + 2xSeagate SV35.5 2TB RAID1 + Samsung F1 750GB + Samsung F2 1,5TB;Lian Li PC-8FIB; 2408WFP
    2) PigPics E-500 + ZD 1445 + ZD 4015 + SanDisk ExtremeIII 4GB + Lexar Premium 1GB - IndoCertified
    3) Pig@Work CATIA V5 r14-r18 @ Precision T5500: Intel W5590, Quadro FX3800 & Dell Ultrasharp U2410 & SpacePilot guaranteeing a minimum of 120 clicks per minute
    4) PigFun Ubuntu 9.10 @ Corsair Flash Voyager 16GB @ Mobile PiG - HP nw8240 M770; FireGL v5000; 15.4" @ 1920x1200; 1+1GB RAM
    5) MiniPig Lenovo X201i: i3 370M; 12" 1280x800 matte; 2GB DDR3 RAM; 6+ hours battery lifetime

  4. #4

    Standardní Re: [Java] jak udelat jednoduchou existencni podminku?

    myslel jsem něco ve stylu:
    Kód:
    try {
      tree.show();
    } catch (Exception e) {
      tree = new AppWindow(value);
      tree.show();
    }
    Ale to je blbost, nešlo by to ani zkompilovat. Teď jsem si to hodil do Netbeans a ať se dívám, jak se dívám, zdá se mi, že tvoje řešení, co tam teď máš funguje tak jak chceš, obejkt vzniká jenom jednou, v čem je teda problém?
    Lenovo X200 | Lenovo Ultrabase | Sennheiser HD 595 | Fujitsu Siemens P19-2 Black | Logitech Internet Navigation Keyboard | Logitech VX Revolution

  5. #5
    Promovaný inženýr mince Avatar uživatele Doktor-Prase
    Založen
    14.05.2003
    Bydliště
    Strakonice/Praha 7
    Věk
    42
    Příspěvky
    1 129
    Vliv
    298

    Standardní Re: [Java] jak udelat jednoduchou existencni podminku?

    Problem je ze pokad zapisu do stromu nejaky hodnoty a zkusim zobrazit strom jinyho produktu, zobrazi se strom ten jeden a puvodni... ach jo...
    1) BigPiG System mk2 Phenom II x4 955; 4x2048MB DDR3; MSI FX890-GD70; CF 5830; VelociRaptor 300GB + 2xSeagate SV35.5 2TB RAID1 + Samsung F1 750GB + Samsung F2 1,5TB;Lian Li PC-8FIB; 2408WFP
    2) PigPics E-500 + ZD 1445 + ZD 4015 + SanDisk ExtremeIII 4GB + Lexar Premium 1GB - IndoCertified
    3) Pig@Work CATIA V5 r14-r18 @ Precision T5500: Intel W5590, Quadro FX3800 & Dell Ultrasharp U2410 & SpacePilot guaranteeing a minimum of 120 clicks per minute
    4) PigFun Ubuntu 9.10 @ Corsair Flash Voyager 16GB @ Mobile PiG - HP nw8240 M770; FireGL v5000; 15.4" @ 1920x1200; 1+1GB RAM
    5) MiniPig Lenovo X201i: i3 370M; 12" 1280x800 matte; 2GB DDR3 RAM; 6+ hours battery lifetime

  6. #6

    Standardní Re: [Java] jak udelat jednoduchou existencni podminku?

    Už si rozumíme. No důvod proč se to děje je vcelku jasnej. Jak se ten program má chovat? Mám otevřený nějaké okno PartTree a když znovu kliknu na tlačítko PartTree u jiného kola, tak se má otevřít nové okno "PartTree" anebo se má nahradit původní nově otevřeným?
    Lenovo X200 | Lenovo Ultrabase | Sennheiser HD 595 | Fujitsu Siemens P19-2 Black | Logitech Internet Navigation Keyboard | Logitech VX Revolution

  7. #7

    Standardní Re: [Java] jak udelat jednoduchou existencni podminku?

    Jestli te dobre chapu tak to presne co chce je Singleton. S nim budes mit pouze jedinou instanci dane tridy, pokud s nim budes zachazet dle jeho pravidel(tedy volat pres getInstance()). Jinak pokud chce pracovat se stromy, i pro ne ma Java ve standardnich knihovnach oporu.
    Naposledy upravil jedik; 22.12.2006 v 16:11.

  8. #8
    Promovaný inženýr mince Avatar uživatele Doktor-Prase
    Založen
    14.05.2003
    Bydliště
    Strakonice/Praha 7
    Věk
    42
    Příspěvky
    1 129
    Vliv
    298

    Standardní Re: [Java] jak udelat jednoduchou existencni podminku?

    Citace Původně odeslal frelichl Zobrazit příspěvek
    Už si rozumíme. No důvod proč se to děje je vcelku jasnej. Jak se ten program má chovat? Mám otevřený nějaké okno PartTree a když znovu kliknu na tlačítko PartTree u jiného kola, tak se má otevřít nové okno "PartTree" anebo se má nahradit původní nově otevřeným?
    to je právě vcelku jedno, jestli se bude nahrazovat nebo jich bude otevřeno víc. Radši bych aby se otvíralo vždycky jenom jedno (tj aby se nahradilo).
    Hlavní je, aby pokuď do Part tree produktu A vložím řekněme Motor, aby to v tom PartTree zůstalo (znova otevřu to samy PartTree produktu A, původně vložený Motor tam bude).
    Moje úvaha (sice blbá, ale moje) - mám řekněme 5 produktů, tak si udělám 5 různejch instancí třídy PartTree a pak do oněch různejch instancí můžu vkládat díly.
    Teď jsem v situaci, že se mi při každém zmáčknutí tlačítka Part Tree vytvoří NOVÁ instance Part Tree (je to vidět v konzoli, že adresa na treeModely je různá pokuď si dvakrát po sobě vyvolám Part Tree pro stejnej jeden prodkut), proto potřebuju tu existenční podmínku (už existuje Part tree pro produkt A? tak ho nevytvářej znovu a jenom ukaž. Pokud neexistuje, tak vytvoř Part Tree pro produkt A a ukaž ho).

    @jedik - tohle asi nebude ono, moc sem to nepochopil. ale díky, K+ bohužel nemůžu poslat...

    přikládám aktuální kód.
    Přiložené soubory Přiložené soubory
    Naposledy upravil Doktor-Prase; 23.12.2006 v 11:07. Důvod: zmatky
    1) BigPiG System mk2 Phenom II x4 955; 4x2048MB DDR3; MSI FX890-GD70; CF 5830; VelociRaptor 300GB + 2xSeagate SV35.5 2TB RAID1 + Samsung F1 750GB + Samsung F2 1,5TB;Lian Li PC-8FIB; 2408WFP
    2) PigPics E-500 + ZD 1445 + ZD 4015 + SanDisk ExtremeIII 4GB + Lexar Premium 1GB - IndoCertified
    3) Pig@Work CATIA V5 r14-r18 @ Precision T5500: Intel W5590, Quadro FX3800 & Dell Ultrasharp U2410 & SpacePilot guaranteeing a minimum of 120 clicks per minute
    4) PigFun Ubuntu 9.10 @ Corsair Flash Voyager 16GB @ Mobile PiG - HP nw8240 M770; FireGL v5000; 15.4" @ 1920x1200; 1+1GB RAM
    5) MiniPig Lenovo X201i: i3 370M; 12" 1280x800 matte; 2GB DDR3 RAM; 6+ hours battery lifetime

  9. #9

    Standardní Re: [Java] jak udelat jednoduchou existencni podminku?

    Tak jsem to snad vyřešil, jak moc prasácky jsem to udělal, to nevím, ale funguje to :).

    Pricip je, že jednotlivé instance třídy TreeWindow si ukládáš do arraylistu, a díky tomu jsi potom schopnen zjistit, jestli daná instance už existuje nebo ne.

    Proměnnou tree nebudeš potřebovat.
    Na začátek třídy dej ten arraylist:
    Kód:
        ArrayList<TreeWindow> trees = new ArrayList<TreeWindow>();
    Metoda partTreeButton_actionPerformed vypadá nyní takto:
    Kód:
        private void partTreeButton_actionPerformed(ActionEvent e){
            int index = productList.getSelectedIndex();
            Part value = (Part)productList.getSelectedValue();
            
            int nalezeno = -1;
            for (int i = 0; i < trees.size(); i++) {
                if (trees.get(i).id.equals(value)) nalezeno = i;
            }
            
            if (nalezeno != -1) {
                trees.get(nalezeno).show();
            } else {
                trees.add(new TreeWindow(value));
                trees.get(trees.size() - 1).show();
            }
        }
    A dál ještě upravíš třídu TreeWindow.
    Přidáš tam veřejnou proměnnou id, ve které se bude uchovávat, k jakému prvku seznamu daná instance patří (tohle by asi šlo udělat jinak, ale nerozumím tvému kódu zrovna dopodrobna).
    Kód:
    public Part id;
    V konstruktoru třídy ještě nezapomeň na tohle:
    Kód:
    id = obj;
    Edit: při řešení jsem nevycházel z poslední verze, ale z té původní, doufám, žes to moc nezměnil. A přikládám projekt netbeans, ve kterém jsem to zkoušel.
    Přiložené soubory Přiložené soubory
    Lenovo X200 | Lenovo Ultrabase | Sennheiser HD 595 | Fujitsu Siemens P19-2 Black | Logitech Internet Navigation Keyboard | Logitech VX Revolution

  10. #10
    Senior Member mince Avatar uživatele mraky
    Založen
    16.10.2002
    Bydliště
    Praha
    Příspěvky
    1 166
    Vliv
    297

    Standardní Re: [Java] jak udelat jednoduchou existencni podminku?

    Jenom maly detail na zlepseni rozsiritelnosti a skalovatelnosti kodu.

    Program to interface not to implementation.

    List<TreeWindow> trees = new ArrayList<TreeWindow>();

    Tim nejsi fixovan pouze na danou implementaci rozhrani list.
    Pište česky: hold × holt

    hold – projev pocty nebo úcty (další význam je výkupné, vynucený poplatek ve válce)
    holt – povzdech; ve významu „inu, zkrátka a dobře“

Informace o tématu

Users Browsing this Thread

Toto téma si právě prohlíží 1 uživatelů. (0 registrovaných a 1 anonymních)

Podobná témata

  1. Jak udelat bootovaci cd z diskety + pridani dat
    Založil blekota v sekci fóra Programy a problémy s nimi
    Odpovědí: 3
    Poslední příspěvek: 27.01.2005, 20:04
  2. CDMA -udělat sít- jak na to?
    Založil kaka28 v sekci fóra Sítě
    Odpovědí: 3
    Poslední příspěvek: 09.01.2005, 20:40
  3. Jak udelat kopii disku na kterym jsou win XP?
    Založil Paja v sekci fóra Programy a problémy s nimi
    Odpovědí: 6
    Poslední příspěvek: 09.02.2003, 18:30
  4. Jak udelat regulaci vetraku?
    Založil Martin v sekci fóra Case modding
    Odpovědí: 5
    Poslední příspěvek: 16.01.2003, 08:37
  5. Jak udelat bootcd pro winXP???
    Založil Erda v sekci fóra Ostatní operační systémy
    Odpovědí: 3
    Poslední příspěvek: 12.01.2003, 19:23

Pravidla přispívání

  • Nemůžete zakládat nová témata
  • Nemůžete zasílat odpovědi
  • Nemůžete přikládat přílohy
  • Nemůžete upravovat své příspěvky
  •