我不确定这是否正确但我想保持我的代码干净,并决定创建不同的类来处理不同的事件。到目前为止,我只处理静态变量。现在我试图以相同的方式处理实例变量,但不确定我是否可以这样做。
有没有办法将Rectangle对象传递给我的EventHandler,还是我应该简单地使用Lambda?
MainClass.java
//Static example
static TextField acTxt = new TextField();
...
acTxt.setText("Aircraft Number");
acTxt.setOnMouseReleased(new ClickAction());
...
//Instance Variable Example
public void printRec(){
for(int i = 0; i < acArray.get(j).flight_array.size(); i++){
Rectangle leg_rec = new Rectangle(i*10,i*10,10,15);
leg_rec.setOnMouseClicked(new ClickAction());
}
}
...
ClickAction.java类
import static MainClass.acTxt;
public class ClickAction implements EventHandler<Event>{
@Override
public void handle(Event event) {
if(event.getSource().equals(acTxt)){
acTxt.clear();
}
}
答案 0 :(得分:1)
不要仅仅为了提供对它们的访问而使事情变得静止。通过使字段静态,您可以完全更改其范围。除了常量字段之外,静态字段几乎总是一个糟糕的设计选择,如果你刚刚开始使用Java,我的建议是避免使用静态除了main
方法和真正的常量之外的任何东西。
我应该简单地使用[a] Lambda [表达式]
为什么不是你?只是做
acTxt.setOnMouseReleased(e -> acTxt.clear());
这不那么冗长,易于阅读和理解(假设您熟悉lambda表达式,并不需要太多练习)。实际行为是在定义控件的地方定义的,因此您不必在另一个类中挖掘以发现鼠标释放时会发生什么。
有没有办法将
Rectangle
对象传递给我的EventHandler
我认为你的意思是TextField
......?是的,当然:如果你真的想要将事件处理程序定义为一个独立的类,只需按照你的建议并将文本字段传递给它....
public class ClickAction implements EventHandler<Event>{
private final TextField textField ;
public ClickAction(TextField textField) {
this.textField = textField ;
}
@Override
public void handle(Event event) {
textField.clear();
}
}
然后
acTxt.setText("Aircraft Number");
Rectangle leg_rect = ... ;
leg_rect.setOnMouseReleased(new ClickAction(acTxt));