Java 我有一个圆形对象数组,如果单击,我需要填充一个圆形。如何为此编写事件处理? //使圆圈可点击 圈出[i].setOnMouseClicked(新建EventHandler(){ @凌驾 公共无效句柄(MouseEvent e){ 圆圈[i].setFill(颜色.蓝色); } });

Java 我有一个圆形对象数组,如果单击,我需要填充一个圆形。如何为此编写事件处理? //使圆圈可点击 圈出[i].setOnMouseClicked(新建EventHandler(){ @凌驾 公共无效句柄(MouseEvent e){ 圆圈[i].setFill(颜色.蓝色); } });,java,javafx,Java,Javafx,是否有任何方法可以在不获取“在封闭范围内定义的局部变量i必须是最终的或有效的最终”错误的情况下更改i处的元素?复制变量i就足够了: //使圆圈可点击 最终int copyOfI=i; 圈出[i].setOnMouseClicked(新建EventHandler(){ @凌驾 公共无效句柄(MouseEvent e){ 圈出[copyOfI].setFill(Color.BLUE); } }); 但是,由于阵列可以稍后更改,我将复制圆: 最终圆c=圆[i]; c、 setOnMouseCli

是否有任何方法可以在不获取“在封闭范围内定义的局部变量i必须是最终的或有效的最终”错误的情况下更改i处的元素?

复制变量i就足够了:

//使圆圈可点击
最终int copyOfI=i;
圈出[i].setOnMouseClicked(新建EventHandler(){
@凌驾
公共无效句柄(MouseEvent e){
圈出[copyOfI].setFill(Color.BLUE);
} 
}); 
但是,由于阵列可以稍后更改,我将复制圆:

最终圆c=圆[i];
c、 setOnMouseClicked(新建EventHandler(){
@凌驾
公共无效句柄(MouseEvent e){
c、 设置填充(颜色:蓝色);
} 
}); 
如果查看,您将看到它有一个继承自的字段:

事件最初发生在其上的对象

因此,您可以像这样直接使用它:

//making the circles clickable
   circle[i].setOnMouseClicked(new EventHandler<MouseEvent>() { 
       @Override 
       public void handle(MouseEvent e) { 
          
           
         circle[i].setFill(Color.BLUE);
          
       } 
    });  
circle[i].setOnMouseClicked(新建EventHandler(){
@凌驾
公共无效句柄(MouseEvent e){
((按钮)e.source).setFill(颜色.蓝色);
} 
});  
有一点建议:
setOnMouseClicked()
是一个非常低级的事件。Java提供了其他更高级别的事件,如
ActionListener
。使用它非常相似。您可以将其与
circle[i].setActionListener()
一起使用,并重写
actionPerformed()
方法。我建议你多读一些关于不同听众的资料,这样你就知道在某个特定的事件中应该选择哪一个


注意:所有链接都是针对Java7文档的。请务必检查您正在使用的Java版本的文档。

@Code peedient,我不确定这里的按钮是否正确。您还链接了一个
awt
JavaDoc。
   circle[i].setOnMouseClicked(new EventHandler<MouseEvent>() { 
       @Override 
       public void handle(MouseEvent e) { 
         ((Button)e.source).setFill(Color.BLUE);
       } 
    });