0

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

每个图像片段都已作为 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.");
                    }
            }
        }
4

2 回答 2

3

在您的mouseReleased事件m.getButton()中返回被单击的鼠标按钮。你会想做更多这样的事情来让你更接近:

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

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

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

于 2013-01-22T07:29:48.110 回答
3

JButton使用ActionListener触发通知返回到您的程序,以指示它何时被触发。这允许按钮响应不同类型的事件,包括鼠标、键盘和程序触发器。

作为动作 API 的一部分,您可以为每个按钮提供一个动作命令。看JButton#setActionCommand

基本上你会以一种类似的方式将它集成到你的鼠标监听器中......

public void actio Performed(ActionEvent evt) {
    if (command.equals(evt.getActionCommand()) {...}
}

根据您的要求,使用Action API可能会更容易

您实际遇到的问题waa是数组,因此它没有getName方法。我也不清楚为什么你有两个按钮阵列?

于 2013-01-22T07:59:36.333 回答