Защо моята JLabel мрежа не функционира правилно?

Опитвам се да направя JLabel решетка, която се актуализира при всяко натискане на бутон. Всеки бутон (север, юг, изток, запад) премества изображение от един JLabel на друга позиция в мрежата. Написах и пренаписах кода отново и отново, но все още не мога да го накарам да се актуализира правилно. Защо ImageIcon се появява понякога, а други не? Къде е грешката на моята логика?

Освен това разгледах куп други въпроси и такива за този проблем, но никой от тях не ми помогна...

Всяка помощ ще бъде високо оценена.

ImageIcon man;
ImageIcon grass;
public int xPosition=0;
public int yPosition=0;

    class ButtonListener implements ActionListener{
        @Override
        public void actionPerformed(ActionEvent evt) {

        if(evt.getActionCommand() == Actions.east.name()){
            System.out.println("east!");
            if(yPosition<4){
                xPosition++;
            }
        }
        if(evt.getActionCommand() == Actions.west.name()){
            System.out.println("west!");
            if(yPosition>0){
                xPosition--;
            }
        }
        if(evt.getActionCommand() == Actions.north.name()){
            System.out.println("north!");
            if(xPosition>0){
                yPosition--;
            }
        }
        if(evt.getActionCommand() == Actions.south.name()){
            System.out.println("south!");
            if(xPosition<4){
                yPosition++;
            }
        }
        URL imageMan = getClass().getResource("man.png");
        man= new ImageIcon(imageMan);

        URL imageGrass = getClass().getResource("grass.jpg");
        grass= new ImageIcon(imageGrass);

        int row=0;            
        if(row==0){
            while(row<=5){
                if(yPosition == row){
                    for(int i=0;i<=5;i++){
                        if(i==xPosition){
                            points[i][row].setIcon(man);
                        }
                        else{
                            points[i][row].setIcon(grass); 
                        }
                    }
                }
                else{
                    for(int i=0;i<=5;i++){
                        points[i][row].setIcon(grass);
                    }
                    row++;
                }
            }
        }
        row=0;
        System.out.println("codinates: ("+xPosition+","+yPosition+")");
    }
}

Ето екранна снимка на това, което искам да бъде резултатът, като човекът може да се движи по екрана с помощта на бутоните.

екранна снимка


person MooseMan55    schedule 03.07.2015    source източник
comment
можете ли да качите екранна снимка на това, което искате да постигнете   -  person Madhan    schedule 03.07.2015
comment
Дадено! Просто го добавих към въпроса си. @Мадхан   -  person MooseMan55    schedule 04.07.2015


Отговори (1)


Разбрах проблема и успях значително да опростя кода.

Ето новия актуализиран код, който работи:

ImageIcon man;
ImageIcon grass;
public int xPosition=0;
public int yPosition=0;
public int oldX =0;
public int oldY = 0;

    class ButtonListener implements ActionListener{
        @Override
        public void actionPerformed(ActionEvent evt) {
        oldX = xPosition;
        oldY = yPosition;    
        if(evt.getActionCommand() == Actions.east.name()){
            System.out.println("east!");
            if(xPosition<4){
                xPosition++;
            }
            else{
                System.out.println("can't go east!");
            }
        }
        if(evt.getActionCommand() == Actions.west.name()){
            System.out.println("west!");
            if(xPosition>0){
                xPosition--;
            }
            else{
                System.out.println("can't go west!");
            }
        }
        if(evt.getActionCommand() == Actions.north.name()){
            System.out.println("north!");
            if(yPosition>0){
                yPosition--;
            }
            else{
                System.out.println("can't go north!");
            }
        }
        if(evt.getActionCommand() == Actions.south.name()){
            System.out.println("south!");
            if(yPosition<4){
                yPosition++;
            }
            else{
                System.out.println("can't go south!");
            }
        }
        URL imageMan = getClass().getResource("man.png");
        man= new ImageIcon(imageMan);

        URL imageGrass = getClass().getResource("grass.jpg");
        grass= new ImageIcon(imageGrass);

        points[oldX][oldY].setIcon(grass);
        points[xPosition][yPosition].setIcon(man);

        System.out.println("codinates: ("+xPosition+","+yPosition+")");
    }
}
person MooseMan55    schedule 04.07.2015