[Java] Dynamicky volane nazvy objektu
Ahojda, zacinam psat semestralku v Jave (NetBeans BlueJ IDE) a vybral jsem si za cil hru Logika [MasterMind] (barevne kloboucky). Mam vytvoren formular, kde mam 36 (4x9) JPanelu reprezentujici jednotlive pozice pro kloboucky. Jejich volaci nazvy jsou X11-X94, kde za pismenem X prvni pozice znamena cislo radku a druha cislo sloupce. Chtel bych jednotliva policka vybirat dynamicky, tj. kdyz se na nejakem policku vyvola MouseClicked, aby policko zavolalo proceduru s parametrem prave sveho cisla. To by nebyl problem. Moji otazkou ale je, jak ji v te procedure zpracovat. Uvedu kratky priklad:
Kód:
private void X11MouseClicked(java.awt.event.MouseEvent evt) {
RegisterAction(11);
}
public void RegisterAction(int ObjectNumber)
{
X+ObjectNumber.setBackground(new java.awt.Color(0, 0, 255));
}
V procedure RegisterAction potrebuji zase zpatky "sestavit" nazev objektu, aby z X+ObjectNumber vzniklo X11.
Je tohle nejak mozne? Jinak psat pro jednotlive objekty vlastni akce by bylo na >1MB zdrojaku. Diky!
Re: [Java] Dynamicky volane nazvy objektu
A co kdybys mel proste pole - resp. nejakou hash tabulku, kde klic by bylo to tvoje cislo XY a hodnota by byla reference na ten urcity panel? :) Tabulku bys pri spusteni naplnil a pak by ses na ty panely dostaval pres klic a tu tabulku. jen takovy navrh..
Re: [Java] Dynamicky volane nazvy objektu
Citace:
Původně odeslal
Anduril
A co kdybys mel proste pole - resp. nejakou hash tabulku, kde klic by bylo to tvoje cislo XY a hodnota by byla reference na ten urcity panel? :) Tabulku bys pri spusteni naplnil a pak by ses na ty panely dostaval pres klic a tu tabulku. jen takovy navrh..
Urcite by to bylo idealni reseni, ale netusim jak na to :-( Mohl bys poradit jak tu tabulku definovat/naplnit?
Re: [Java] Dynamicky volane nazvy objektu
Map map = new HashMap();
//opakovat v cyklu
JPanel panel = new JPanel();
map.put("X11", panel);
Re: [Java] Dynamicky volane nazvy objektu
Citace:
Původně odeslal
mraky
Map map = new HashMap();
//opakovat v cyklu
JPanel panel = new JPanel();
map.put("X11", panel);
Diky, z toho chapu, ze do hash tabulky s nazvem "map" nasypu vsechny nazvy panelu, cili od X11 po X94. Jak se ale potom zpatky ten objekt pres tu tabulku zavola / resp. jak se s nim potom pracuje?
Re: [Java] Dynamicky volane nazvy objektu
Citace:
Původně odeslal
IntEx
Jak se ale potom zpatky ten objekt pres tu tabulku zavola / resp. jak se s nim potom pracuje?
JPanel jp = (JPanel) map.get("X11");
Re: [Java] Dynamicky volane nazvy objektu
Ano, presne tak jsem to myslel, ze se to pouzije.
Re: [Java] Dynamicky volane nazvy objektu
Zkusil jsem to tedy pouzit nasledovne:
Kód:
Map ObjectMap = new HashMap();
javax.swing.JPanel panel = new javax.swing.JPanel();
public void handleObjects(){
// 1. radek
ObjectMap.put("X11", panel);
ObjectMap.put("X12", panel);
ObjectMap.put("X13", panel);
ObjectMap.put("X14", panel);
}
public Main() {
initComponents();
handleObjects();
javax.swing.JPanel jp = (javax.swing.JPanel) ObjectMap.get("X11");
jp.setBackground(new java.awt.Color(0, 0, 255));
}
Pri tomhle pouziti se vubec nic nestane a pozadovany objekt "neobdrzi" prikaz na zmenu barvy. Delam neco spatne? Jeste mne napadlo, jak vubec urcim, o jaky objekt se na formulari jedna? "X11" v hash tabulce je preci jenom identifikator jeji polozky...
Re: [Java] Dynamicky volane nazvy objektu
Tak jsem uplne blbej, neporozumel jsem presne definici pro "panel", ze je to vlastne obsah polozky v hash tabulce (pozadovany JPanel). Tato definice ani nebyla potreba, protoze designer uz jednotlive panely podobne definuje v inicializaci komponent. Staci tedy pouzit ObjectMap.put("11", X11); a nasledne si tento objekt zavolat definici pomocne promenne urcujici "univerzalni" JPanel odkazujici na polozku v hash tabulce: JPanel jp = (JPanel) ObjectMap.get("11"); .... jp.setBackground(new java.awt.Color(0, 0, 255)); :-) Diky za pomoc!
Re: [Java] Dynamicky volane nazvy objektu
Od doby co mame karmu dekovat nemusime ;-)