提问者:小点点

事件处理程序作用于事件源


所以我试图从数组中得到一个按钮网格

Button[][] btn=new Button[10][10];  

我有显示它们正常工作的代码。现在我正在尝试添加一个事件侦听器,如果用户单击一个按钮,它会将其文本更改为“已点击”。我查看了其他问题和Oracle文档,并且在单击时使用getSource()来获取按钮的来源,因此它给出了类似于Button@280448f1[styleClass=button]'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());
               }
            });

        }


    }

共1个答案

匿名用户

您错误地将事件源类型转换为Button。现在您正在尝试转换setText方法的结果

只需替换这一行:

(Button)(event.getSource()).setText("Cliked");

对这个:

((Button) event.getSource()).setText("Cliked");