我正在编写一个图像拼图游戏,代码的一部分是将用户选择的部分与正确图像的部分进行比较。
每个图像片段已作为ImageIcon添加到JButton中。
需要使用标识符来区分每个图像块并进行比较。
我为每个创建为标识符的JButton设置了一个setName()。
当用户将拼图块从原始的3x3网格拖动到其他3x网格以进行匹配后,用户释放鼠标后开始比较。
我在比较if
语句中删除错误时遇到问题。
我从这个SO线程得到了比较的想法 - link
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.");
}
}
}
答案 0 :(得分:3)
在mouseReleased
事件中m.getButton()
返回单击的鼠标按钮。你会想做更像这样的事情,让你更接近:
if (m.getComponent().getName().equals(waa.getName())) {
m.getComponent()
会返回触发事件的Component
对象(您的JButton
)。从那里,您可以与您正在使用的getName
方法进行比较。
还有一个问题,即您的waa
变量是一个数组。我不确定你想如何比较它们,无论是通过数组运行还是确保索引和名称匹配,但这是你需要研究的另一个问题。
答案 1 :(得分:3)
JButton
使用ActionListener
触发通知回您的程序,以指示它何时被触发。这允许按钮响应不同类型的事件,包括鼠标,键盘和程序触发器。
作为动作API的一部分,您可以为每个按钮提供动作命令。见JButton#setActionCommand
基本上你会以类似的方式将它集成到你的鼠标听众......
public void actio Performed(ActionEvent evt) {
if (command.equals(evt.getActionCommand()) {...}
}
根据您的要求,使用Action API
可能更容易您实际遇到的问题是waa
是一个数组,因此,它没有getName
方法。我还不清楚为什么你有两个按钮阵列?