Results 1 to 5 of 5
  1. #1
    Legaly is offline Member
    Join Date
    Nov 2012
    Posts
    5
    Rep Power
    0

    Default Map and ArrayList problem

    Hello, I have got this class called Batoh(bag) and I made a little modifications( adding observer for changes in bag), following my study materials preciesly, but I cant make it work. The problem is, that some of my class mates made class Bag(Inventory) like this: private ArrayList<Vec> batoh; and it's working for them. I've chosen Map instead. But now I cant get those two together. Basically I need to make sure to get those seznamVeci (things) from Batoh(bag) to that list somehow. I hope someone will get this... Thanks in advance

    Java Code:
    package logika;
    /* Soubor je ulozen v kodovani UTF-8.
     * Kontrola kódování: Příliš žluťoučký kůň úpěl ďábelské ódy. */
    import java.io.FileNotFoundException;
    import java.io.PrintStream;
    import java.util.*;
    import logika.Vec;
    import util.ObserverZmenyBatohu;
    /*******************************************************************************
     * Třída batoh pracuje s věcmi v batohu
     *
     * @author    xxxx
     * @version   1.00.000
     */
    public class Batoh
    {
        //== Datové atributy (statické i instancí)======================================
        private Map<String, Vec> seznamVeci;
        private static final int MAX_VECI = 5;
        private List<ObserverZmenyBatohu> seznamPozorovatelu;
    
        /**
         * Konstruktor třídy
         */
        public Batoh() 
        {   
            
            seznamVeci = new HashMap<>();
            seznamPozorovatelu = new ArrayList<ObserverZmenyBatohu>();
             
            
            
            
        }
    
        /**
         * Metoda přidá věc do batohu pokud je tam ještě místo
         *
         * @param neco - věc, který se má přidat do batohu
         * @return true pokud se podaří věc přidat
         */
        public boolean vlozVec(Vec neco) 
            if (isMisto()){
                seznamVeci.put(neco.getNazev(),neco);
                
                this.upozorniPozorovatele();
                
            
                return true;
            }
            else {
                return false;
            }
        }
    
        /**
         * Metoda odstraní věc z batohu pokud tam je
         *
         * @param neco - věc kterou chceme odstanit
         * @return true pokud se odstraní
         */
        public boolean odlozVec(String neco) {
            boolean vyhozena = false;
            if (seznamVeci.containsKey(neco)) {
                vyhozena = true;
                seznamVeci.remove(neco);
    
            }
            this.upozorniPozorovatele();
            return vyhozena;
        }

  2. #2
    Legaly is offline Member
    Join Date
    Nov 2012
    Posts
    5
    Rep Power
    0

    Default Re: Map and ArrayList problem

    I just really dont want to change all my class Batoh to Arraylist like, cause that will affect the other classes and I'm not sure I'd be able to fix all that, because I'm not used to work with arraylist

  3. #3
    Tolls is offline Moderator
    Join Date
    Apr 2009
    Posts
    11,802
    Rep Power
    19

    Default Re: Map and ArrayList problem

    What doesn't work?
    Please do not ask for code as refusal often offends.

    ** This space for rent **

  4. #4
    Legaly is offline Member
    Join Date
    Nov 2012
    Posts
    5
    Rep Power
    0

    Default Re: Map and ArrayList problem

    It's a little more complex than this:/ Is there a way to maybe send the whole project? My task is to Things in Batoh(bag) must project by images on panel in game UI and when the things in the batoh changes, images should update and I have to do this by using Observer.
    Images of things in Batoh(bag) are just not showing, when I run this game.

    This is ObserverOfChangesIsBatoh
    Java Code:
    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
    package util;
    
    import logika.Batoh;
    
    /**
     *
     * @author xxx
     */
    public interface ObserverZmenyBatohu {
        
        /**
         * Metoda, ve které proběhne aktualizace pozorovatele, je volána
         * prostřednictvím metody upozorniPozorovatele z rozhraní
         * SubjektZmenyBatohu
         *
         * @param aktualniProstor
         */
        public void aktualizuj(Batoh aktualniVeci);
    }
    This is SubjectOfChangeInBatoh(bag)

    Java Code:
    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
    package util;
    
    /**
     *
     * @author xxx
     */
    public interface SubjektZmenyBatohu {
    
        /**
         * Metoda slouží k zaregistrování pozorovatele, musí to být instance třídy,
         * která implementuje rozhraní ObserverZmenyBatohu.
         *
         * @param pozorovatel registrovaný objekt
         */
        public void zaregistrujPozorovatele(ObserverZmenyBatohu pozorovatel);
    
        /**
         * Metoda slouží k zrušení registrace pozorovatele, musí to být instance
         * třídy, která implementuje rozhraní ObserverZmenyBatohu.
         *
         * @param pozorovatel objekt, který již nechce být informován o změnách
         */
        public void odregistrujPozorovatele(ObserverZmenyBatohu pozorovatel);
    
        /**
         * Metoda, která se volá vždy, když dojde ke změně této instance. Upozorní
         * všechny pozorovatele, že došlo ke změně tak, že zavolá jejich metodu
         * aktualizuj.
         */
        public void upozorniPozorovatele();
    }
    This is PanelBatohu(BagPanel) in UI
    Java Code:
    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
    package ui;
    
    import java.awt.GridLayout;
    import java.net.URL;
    import javax.swing.*;
    import logika.HerniPlan;
    import logika.Batoh;
    import logika.Prostor;
    import util.ObserverZmenyBatohu;
    
    /**
     * Instance třídy PanelBatohu představují panel batohu.
     *
     * @author xxxx
     */
    public class PanelBatohu extends JPanel implements ObserverZmenyBatohu {
    
        private Batoh batoh;
        private Icon logoIcon;
        private String[] oddeleneVeci;
    
        /**
         * Konstruktor panelu batohu.
         *
         * @param inventar logika
         */
        public PanelBatohu(Batoh batoh) {
            super();
            this.batoh = batoh;
            batoh.zaregistrujPozorovatele(this);
            this.aktualizuj(batoh);
            
    
            this.setBorder(BorderFactory.createTitledBorder("Věci v batohu:"));
            this.setVisible(true);
        }
    
        /**
         * Metoda zaregistruje pozorovatele.
         *
         * @param inventar logika
         */
        public void nastaveniBatohu(Batoh batoh) {
            this.batoh = batoh;
            batoh.zaregistrujPozorovatele(this);
            this.aktualizuj(batoh);
        }
    
        /**
         * Metoda, ve které proběhne aktualizace pozorovatele.
         *
         * @param aktualniVeci logika
         */
        public void aktualizuj(Batoh aktualniVeci) {
            this.removeAll();
            String veci = aktualniVeci.getVeci();
            oddeleneVeci = veci.split("  ");
    
            URL umisteniObrazku;
            for (int i = 1; i < oddeleneVeci.length; i++) {
                umisteniObrazku = this.getClass().getResource("/zdroje/" + oddeleneVeci[i] + ".jpg");
                if (umisteniObrazku == null) {
                    JOptionPane.showMessageDialog(null,
                            "Soubor s obrázkem nebyl nalezen.",
                            "Chyba při načítání obrázku", JOptionPane.ERROR_MESSAGE);
                } else {
                    logoIcon = new ImageIcon(umisteniObrazku);
                    JLabel obrazek = new JLabel(logoIcon);
                    this.add(obrazek);
                }
            }
        }
    }
    and this is my whole Batoh class
    Java Code:
    package logika;
    /* Soubor je ulozen v kodovani UTF-8.
     * Kontrola kódování: Příliš žluťoučký kůň úpěl ďábelské ódy. */
    import java.io.FileNotFoundException;
    import java.io.PrintStream;
    import java.util.*;
    import logika.Vec;
    import util.ObserverZmenyBatohu;
    /*******************************************************************************
     * Třída batoh pracuje s věcmi v batohu
     *
     * @author    xxx
     * @version   1.00.000
     */
    public class Batoh
    {
        //== Datové atributy (statické i instancí)======================================
        private Map<String, Vec> seznamVeci;
        private static final int MAX_VECI = 5;
        private List<ObserverZmenyBatohu> seznamPozorovatelu;
    
        /**
         * Konstruktor třídy
         */
        public Batoh() throws FileNotFoundException
        {   
            
            seznamVeci = new HashMap<>();
            seznamPozorovatelu = new ArrayList<ObserverZmenyBatohu>();
             
            
            
            
        }
    
        /**
         * Metoda přidá věc do batohu pokud je tam ještě místo
         *
         * @param neco - věc, který se má přidat do batohu
         * @return true pokud se podaří věc přidat
         */
        public boolean vlozVec(Vec neco) throws FileNotFoundException{
            if (isMisto()){
                seznamVeci.put(neco.getNazev(),neco);
                
                this.upozorniPozorovatele();
                
            
                return true;
            }
            else {
                return false;
            }
        }
    
        /**
         * Metoda odstraní věc z batohu pokud tam je
         *
         * @param neco - věc kterou chceme odstanit
         * @return true pokud se odstraní
         */
        public boolean odlozVec(String neco) {
            boolean vyhozena = false;
            if (seznamVeci.containsKey(neco)) {
                vyhozena = true;
                seznamVeci.remove(neco);
    
            }
            this.upozorniPozorovatele();
            return vyhozena;
        }
    
        /**
         * Metoda zjistí zda je věc v batohu či není
         *
         * @param nazev - nazev hledané věci
         * @return true pokud je v batohu
         */
        public boolean obsahujeVec (String nazev) {
            return (seznamVeci.containsKey(nazev));
        }
    
        /**
         * Metoda najde věc, kterou chceme získat
         * @return věc
         */
        public Vec getVec(String nazev) {
            return seznamVeci.get(nazev);
        }
    
        /**
         * Metoda vrací počet skrytých věcí v batohu
         *
         * @return počet skrytých věcí
         */
        public int pocetSkrytych() {
            int cislo = 0;
            for(String nazev : seznamVeci.keySet()) {
                if (seznamVeci.get(nazev).isViditelnost()==false) {
                    cislo += 1;
                }
            }
            return cislo;
        }
    
        /**
         * Metoda zjišťujě kolik věcí je v batohu
         *
         * @return true pokud se může přidat ještě další věc
         */
        public boolean isMisto() {
            return (seznamVeci.size() < MAX_VECI);
        }
    
        /**
         * Metoda pro zjištění obsahu batohu
         *
         * @return seznam věcí v batohu
         */
        public String getVeci() {
            String text = "";
            for (String nazev : seznamVeci.keySet()) {
                text +=  nazev + " ";
            }
            return text;
        }
        
          public void zaregistrujPozorovatele(ObserverZmenyBatohu pozorovatel) {
            seznamPozorovatelu.add(pozorovatel);
        }
    
        public void odregistrujPozorovatele(ObserverZmenyBatohu pozorovatel) {
            seznamPozorovatelu.remove(pozorovatel);
        }
    
        public void upozorniPozorovatele() {
            for (ObserverZmenyBatohu pozorovatel : seznamPozorovatelu) {
                pozorovatel.aktualizuj(this);
            }
        }
    
     
    
    }

  5. #5
    Tolls is offline Moderator
    Join Date
    Apr 2009
    Posts
    11,802
    Rep Power
    19

    Default Re: Map and ArrayList problem

    You need to figure out what is or isn't being called.
    Language is a bit of a problem here...:)

    Is the Bag calling the observer method?
    Is the Observer reacting the way you think it should?
    Is there a redraw() being called for the panel so it displays?
    That's what you need to debug to see.
    Please do not ask for code as refusal often offends.

    ** This space for rent **

Similar Threads

  1. ArrayList problem
    By sharingan90 in forum New To Java
    Replies: 5
    Last Post: 12-17-2011, 01:10 PM
  2. Replies: 12
    Last Post: 07-07-2011, 08:49 PM
  3. Problem- arraylist
    By whizzz in forum New To Java
    Replies: 3
    Last Post: 12-05-2010, 01:13 AM
  4. Hey! ArrayList problem here
    By Samgetsmoney in forum New To Java
    Replies: 31
    Last Post: 02-20-2009, 12:39 AM
  5. ArrayList problem
    By khamuruddeen in forum New To Java
    Replies: 7
    Last Post: 12-22-2007, 05:46 AM

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •