小编典典

通过setName()比较组件。

java

我正在编写一个图像益智游戏,代码的一部分是将用户选择的片段与正确图像的片段进行比较。

每个图像块已经作为ImageIcon添加到JButton。

需要一个标识符来区分每个图像并进行比较。

我为每个创建为标识符的JButton设置一个setName()。

当用户在将拼图块从原始的3x3网格拖曳到另一个3x网格以进行匹配之后,将其拖动到拼图上时,比较开始。

我在从比较if语句中删除错误时遇到问题。

我从这个SO线程获得了比较思路- 链接

    private JButton[] button = new JButton[9];
    private JButton[] waa = new JButton[9];

    private String id;
    private int cc;
    private String id2;
    private int cc2;

    // setName for each of the 9 buttons in the original 3x3 grid being created 
    // which stores the shuffled puzzle pieces
    for(int a=0; a<9; a++){
        button[a] = new JButton(new ImageIcon());
        id += Integer.toString(++cc);
        button[a].setName(id); 
    }

    // setName for each of the 9 buttons in the other 3x3 grid  
    // where the images will be dragged to by the user
        for(int b=0; b<9; b++){
        waa[b] = new JButton();
        id2 += Integer.toString(++cc2);
        waa[b].setName(id2); 
    }

    // check if puzzle pieces are matched in the correct place
    // compare name of original 'button' array button with the name of 'waa' array buttons 
        button[a].addMouseListener(new MouseAdapter(){

            public void mouseReleased(MouseEvent m){
                if(m.getbutton().getName().equals (waa.getName())){

                    }
                    else{
                         JOptionPane.showMessageDialog(null,"Wrong! Try Again.");
                    }
            }
        }

阅读 275

收藏
2020-11-30

共1个答案

小编典典

在您的情况mouseReleased下,m.getButton()将返回被单击的鼠标按钮。您将需要做更多这样的事情,以使您更接近:

if (m.getComponent().getName().equals(waa.getName())) {

m.getComponent()返回触发事件的Component对象(您的JButton)。在这里,您可以与getName所使用的方法进行比较。

还有一个问题是您的waa变量是数组。我不确定如何比较它们,是否遍历数组并确保索引和名称匹配,但这是您需要研究的另一个问题。

2020-11-30