Issue
//making the circles clickable
circle[i].setOnMouseClicked(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent e) {
circle[i].setFill(Color.BLUE);
}
});
Is there any way to change the element at i without getting a "Local variable i defined in an enclosing scope must be final or effectively final" error?
Solution
If you look at the docs for MouseEvent
, you will see that it has a source
field that it inherits from EventObject
:
The object on which the Event initially occurred.
So you can use this directly like so:
circle[i].setOnMouseClicked(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent e) {
((Button)e.source).setFill(Color.BLUE);
}
});
One point of advice: setOnMouseClicked()
is a very low level event. Java provides other higher level events such as ActionListener
. Using it is very similar. You can use this with circle[i].setActionListener()
and override the actionPerformed()
method. I suggest you read more about different listeners that are available so that you know which one to choose for a particular event.
Note: all links are for Java 7 documentation. Be sure to check the documentation for the version of Java which you are using.
Answered By - Code-Apprentice
Answer Checked By - Cary Denson (JavaFixing Admin)