1 Příloh-a(y)
[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áč!
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říš.
Re: [Java] jak udelat jednoduchou existencni podminku?
Citace:
Původně odeslal
frelichl
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
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?
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...
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?
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.
1 Příloh-a(y)
Re: [Java] jak udelat jednoduchou existencni podminku?
Citace:
Původně odeslal
frelichl
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.
1 Příloh-a(y)
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).
V konstruktoru třídy ještě nezapomeň na tohle:
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.
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.