这是我上一个问题的后续问题。我试图解决上一个问题中的问题。 link
我正在编写一个图像拼图游戏,代码的一部分是将用户选择的部分与正确图像的部分进行比较。
每个图像片段已作为ImageIcon添加到JButton中。
需要使用标识符来区分每个图像块并进行比较。
我为每个创建为标识符的JButton设置了一个setName()。
当用户将鼠标光标移动到另一个3x3网格上的特定按钮坐标时,当用户从原始3x3网格中拖动棋子时,比较开始。
已编辑:已编辑的代码已标记。 Flex似乎有一个方法可以检测光标下的对象,java有吗? Link ^ getSource()解决了上述问题。
但是,当我尝试system.out.println
查看按钮何时运行getName()
时,当我将这些部分拖到按钮时,它似乎没有运行;要激活getName()
,我必须在将图像片段拖动到按钮= /后进一步将鼠标悬停在按钮上。
private int mouseX,mouseY;
private JButton[] button = new JButton[9];
private JButton[] userarea = new JButton[9];
// 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);
}
// create 9 buttons for the user to place the puzzle pieces to
for(int b=0; b<9; b++){
userarea[b] = new JButton();
id2 += Integer.toString(++cc2);
// setName for each button (as unique id)
userarea[b].setName(id2);
TransferHandler transfer1 = new TransferHandler("icon");
userarea[b].setTransferHandler(transfer1);
//<--- EDITED CODE ------>
ChangeListener clistener = new ChangeListener(){
public void stateChanged(ChangeEvent ce) {
JButton source = (JButton)ce.getSource();
ButtonModel mod = source.getModel();
if (mod.isRollover()){
System.out.println(source.getName());
}
else{
}
}
};
//<--- EDITED CODE ------>
}
public void nameOfDestButton() {
// not sure how to do this
if(mouseCoordinate == getBounds of one of the buttons){
userarea[appropriate button number].getName();
}
}
public void mouseMoved(MouseEvent m){
mouseX=m.getX();
mouseY=m.getY();
nameOfDestButton();
// not sure how to do this. Obtaining a return value of getName
// in the nameOfDestButton() method ?
if (m.getComponent().getName().equals(nameOfDestButton) {
}
else{
JOptionPane.showMessageDialog(null,"Wrong! Try Again.");
}
}