所以我试图制作一个15-puzzle的javafx版本,在那里你滑动小方块并尝试将它们整理好。我有一系列标签,我的代码的目标是,当您单击标签时,如果该标签为空,则将其文本与相邻标签交换。所以我有:
void moveTile(MouseEvent event){
Label clicked = (Label)event.getTarget();
int position = Arrays.asList(labels).indexOf(clicked);
if(position > 0 && labels[position-1].getText().equals("")){
String temp = clicked.getText();
clicked.setText(labels[position-1].getText());
labels[position-1].setText(temp);
}else if(position < 15 && labels[position+1].getText().equals("")){
String temp = clicked.getText();
clicked.setText(labels[position+1].getText());
labels[position+1].setText(temp);
}else if(position>3 && labels[position-4].getText().equals("")){
String temp = clicked.getText();
clicked.setText(labels[position-4].getText());
labels[position-4].setText(temp);
}else if(position < 12 && labels[position+4].getText().equals("")){
String temp = clicked.getText();
clicked.setText(labels[position+4].getText());
labels[position+4].setText(temp);
}
}//
它工作正常,但前提是你没有点击文字。如果直接单击标签的文本部分,则会抛出:javafx.controls@9.0.4/com.sun.javafx.scene.control.LabeledText无法转换为javafx.controls@9.0.4/javafx.scene.control .Label
我认为发生的事情是,当它查找事件目标时,它会获取文本而不是标签本身。 有办法解决这个问题吗?问题指出你必须使用标签,所以我不能只使用按钮。