java - 为什么我的 JLabel 网格不能正常工作?

标签 java swing jlabel grid-layout imageicon

我正在尝试制作一个每次按下按钮时都会更新的 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+")");
    }
}

这是我想要的结果的屏幕截图,这个人可以使用按钮在屏幕上移动。

screen shot

最佳答案

我弄清楚了问题并能够显着简化代码。

这是新更新的有效代码:

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+")");
    }
}

关于java - 为什么我的 JLabel 网格不能正常工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31213420/

相关文章:

java - 返回 NULL 的替代方法

java - 在 Hadoop 中使用 context.write() 或 outputCollector.collect() 写入输出的成本?

java - 在适当的时候更新线程

java - swing 中的图标字体 : font icons not appear in JLabel

java - 如何更新 JLabel 文本?

java - 在使用 paintComponent 绘制的图形上显示 JLabel

java - 从另一个类编辑 JLabel 文本

java - 从 url 字符串中删除获取参数的最佳方法是什么?

java - 对NX3矩阵进行排序(最有效的方法)

java - 如何在 java 中使用 .readLine() 跟踪文件的读取?