我有一组 Circle 对象,如果单击它,我需要填充一个圆。如何为此编写事件处理?
I have an array of Circle objects and I need to fill a circle if it is clicked. How do I write the event handling for this?
//making the circles clickable
circle[i].setOnMouseClicked(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent e) {
circle[i].setFill(Color.BLUE);
}
});
有什么方法可以更改 i 处的元素而不会出现“在封闭范围中定义的局部变量 i 必须是最终的或实际上是最终的”错误?
复制变量i应该就够了:
// making the circles clickable
final int copyOfI = i;
circle[i].setOnMouseClicked(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent e) {
circle[copyOfI].setFill(Color.BLUE);
}
});
但是,由于以后数组可以改变,所以我会复制圆圈:
final Circle c = circle[i];
c.setOnMouseClicked(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent e) {
c.setFill(Color.BLUE);
}
});
如果您查看 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.
所以你可以像这样直接使用它:
circle[i].setOnMouseClicked(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent e) {
((Button)e.source).setFill(Color.BLUE);
}
});
一点建议:setOnMouseClicked()
是一个非常低级的事件。 Java 提供其他更高级别的事件,例如 ActionListener
。使用它非常相似。您可以将其与 circle[i].setActionListener()
一起使用并覆盖 actionPerformed()
方法。我建议您阅读更多有关可用的不同侦听器的信息,以便您知道为特定事件选择哪个侦听器。
注意:所有链接都是针对 Java 7 文档的。请务必查看您正在使用的 Java 版本的文档。
//making the circles clickable
circle[i].setOnMouseClicked(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent e) {
circle[i].setFill(Color.BLUE);
}
});
有什么方法可以更改 i 处的元素而不会出现“在封闭范围中定义的局部变量 i 必须是最终的或实际上是最终的”错误?
复制变量i应该就够了:
// making the circles clickable
final int copyOfI = i;
circle[i].setOnMouseClicked(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent e) {
circle[copyOfI].setFill(Color.BLUE);
}
});
但是,由于以后数组可以改变,所以我会复制圆圈:
final Circle c = circle[i];
c.setOnMouseClicked(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent e) {
c.setFill(Color.BLUE);
}
});
如果您查看 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.
所以你可以像这样直接使用它:
circle[i].setOnMouseClicked(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent e) {
((Button)e.source).setFill(Color.BLUE);
}
});
一点建议:setOnMouseClicked()
是一个非常低级的事件。 Java 提供其他更高级别的事件,例如 ActionListener
。使用它非常相似。您可以将其与 circle[i].setActionListener()
一起使用并覆盖 actionPerformed()
方法。我建议您阅读更多有关可用的不同侦听器的信息,以便您知道为特定事件选择哪个侦听器。
注意:所有链接都是针对 Java 7 文档的。请务必查看您正在使用的 Java 版本的文档。