Výsledky 1 až 10 z 10

Téma: [Java] Dynamicky volane nazvy objektu

  1. #1

    Standardní [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!
    Lenovo ThinkPad T400s (Intel Centrino 2 vPro 2.4GHz, 8GB RAM, Intel GMA 4500MHD, 250GB HDD 1.8" Toshiba)

  2. #2
    Senior Member Avatar uživatele Anduril
    Založen
    12.10.2002
    Bydliště
    OVA, OL
    Věk
    42
    Příspěvky
    3 474
    Vliv
    322

    Standardní 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..
    ntb: HP EliteBook 8460p i7-2640M | 8GB RAM | 120GB SSD + 500GB HDD | ATi HD6470 | 14" HD+ | W7 PRO
    home: HP Docking Station | HP L2045W | WD 500GB Scorpio Blue USB box
    work: HP Docking Station | HP L2445W
    audio: Epiphone G-400 SG + Sounder Telecaster | E-MU 0202 | Cambridge Audio Azur 340R | Wharfedale Diamond 9.2 | Magnat Betasub 20A | Sennheiser HD555

  3. #3

    Standardní Re: [Java] Dynamicky volane nazvy objektu

    Citace Původně odeslal Anduril Zobrazit příspěvek
    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?
    Lenovo ThinkPad T400s (Intel Centrino 2 vPro 2.4GHz, 8GB RAM, Intel GMA 4500MHD, 250GB HDD 1.8" Toshiba)

  4. #4
    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] Dynamicky volane nazvy objektu

    Map map = new HashMap();

    //opakovat v cyklu
    JPanel panel = new JPanel();
    map.put("X11", panel);
    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“

  5. #5

    Standardní Re: [Java] Dynamicky volane nazvy objektu

    Citace Původně odeslal mraky Zobrazit příspěvek
    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?
    Naposledy upravil IntEx; 07.12.2006 v 14:18.
    Lenovo ThinkPad T400s (Intel Centrino 2 vPro 2.4GHz, 8GB RAM, Intel GMA 4500MHD, 250GB HDD 1.8" Toshiba)

  6. #6

    Standardní Re: [Java] Dynamicky volane nazvy objektu

    Citace Původně odeslal IntEx Zobrazit příspěvek
    Jak se ale potom zpatky ten objekt pres tu tabulku zavola / resp. jak se s nim potom pracuje?
    JPanel jp = (JPanel) map.get("X11");

  7. #7
    Senior Member Avatar uživatele Anduril
    Založen
    12.10.2002
    Bydliště
    OVA, OL
    Věk
    42
    Příspěvky
    3 474
    Vliv
    322

    Standardní Re: [Java] Dynamicky volane nazvy objektu

    Ano, presne tak jsem to myslel, ze se to pouzije.
    ntb: HP EliteBook 8460p i7-2640M | 8GB RAM | 120GB SSD + 500GB HDD | ATi HD6470 | 14" HD+ | W7 PRO
    home: HP Docking Station | HP L2045W | WD 500GB Scorpio Blue USB box
    work: HP Docking Station | HP L2445W
    audio: Epiphone G-400 SG + Sounder Telecaster | E-MU 0202 | Cambridge Audio Azur 340R | Wharfedale Diamond 9.2 | Magnat Betasub 20A | Sennheiser HD555

  8. #8

    Standardní 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...
    Lenovo ThinkPad T400s (Intel Centrino 2 vPro 2.4GHz, 8GB RAM, Intel GMA 4500MHD, 250GB HDD 1.8" Toshiba)

  9. #9

    Standardní 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!
    Lenovo ThinkPad T400s (Intel Centrino 2 vPro 2.4GHz, 8GB RAM, Intel GMA 4500MHD, 250GB HDD 1.8" Toshiba)

  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] Dynamicky volane nazvy objektu

    Od doby co mame karmu dekovat nemusime
    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)

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
  •