Java 事件处理程序对事件源执行操作
所以我试图从一个数组中得到一个按钮网格Java 事件处理程序对事件源执行操作,java,javafx,javafx-8,Java,Javafx,Javafx 8,所以我试图从一个数组中得到一个按钮网格 Button[][] btn=new Button[10][10]; 我有代码显示它们正常工作。现在我尝试添加一个事件侦听器,如果用户单击按钮,它会将其文本更改为clicked。我查看了其他问题和Oracle文档,我使用getSource在单击按钮时获取按钮的源代码,因此它给出了如下内容Button@280448f1[styleClass=按钮]'1,5'。是否有一种有效的方法来使用此按钮并按此特定按钮操作?我这样做是对的还是我应该做些别的事情?这是
Button[][] btn=new Button[10][10];
我有代码显示它们正常工作。现在我尝试添加一个事件侦听器,如果用户单击按钮,它会将其文本更改为clicked。我查看了其他问题和Oracle文档,我使用getSource在单击按钮时获取按钮的源代码,因此它给出了如下内容Button@280448f1[styleClass=按钮]'1,5'。是否有一种有效的方法来使用此按钮并按此特定按钮操作?我这样做是对的还是我应该做些别的事情?这是我代码的一部分。现在在第一个事件处理程序中有一个错误,IDE说它不是一个语句
for(int i=0;i<btn.length;i++){
for(int j=0;j<btn[i].length;j++){
btn[i][j] = new Button(); //Create new button
btn[i][j].setMinSize(60,60); //Set size
btn[i][j].setText(i+", "+j); //Set coordinates as text
btn[i][j].setBackground(background); //Set image
GridPane.setColumnIndex(btn[i][j],i); //Set x
GridPane.setRowIndex(btn[i][j],j); //Set y
root.getChildren().addAll(btn[i][j]); //Add to gridpane
btn[i][j].setOnAction(new EventHandler<ActionEvent>() {
//Click Handler
@Override
public void handle(ActionEvent event) {
(Button)(event.getSource()).setText("Cliked");
}
});
btn[i][j].setOnMouseEntered(new EventHandler<MouseEvent>() {
//Mouse enter area Handler
@Override
public void handle(MouseEvent t) {
System.out.println(t.getSource());
}
});
}
}
您错误地将事件源类型强制转换为按钮。现在,您正试图强制转换setText方法的结果 只需更换这一行:
(Button)(event.getSource()).setText("Cliked");
为此:
((Button) event.getSource()).setText("Cliked");