gpt4 book ai didi

java - 在 Java/JavaFX 中处理这些事件的最佳方法

转载 作者:行者123 更新时间:2023-12-01 09:31:15 25 4
gpt4 key购买 nike

我不确定这是否正确,但我想保持代码干净,并决定创建不同的类来处理不同的事件。到目前为止,我只处理静态变量。现在我尝试以相同的方式处理实例变量,但不确定是否可以做到这一点。

有没有办法将 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 Class

import static MainClass.acTxt;

public class ClickAction implements EventHandler<Event>{

@Override
public void handle(Event event) {
if(event.getSource().equals(acTxt)){
acTxt.clear();
}
}

最佳答案

永远不要仅仅为了提供对它们的访问而将其静态化。通过使字段静态,您可以完全改变其范围。除了常量字段之外,静态字段几乎总是一个糟糕的设计选择,如果您刚刚开始使用 Java,我的建议是避免对除 main 方法和真正常量之外的任何内容使用 static。

should I simply use [a] Lambda [expression]

你为什么不呢?就这么做

acTxt.setOnMouseReleased(e -> acTxt.clear());

这不太冗长,更容易阅读和理解(假设您熟悉 lambda 表达式,这不需要太多练习)。实际行为是在定义控件的地方定义的,因此您不必深入研究不同的类来发现释放鼠标时会发生什么。

Is there a way to pass the Rectangle object to my 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));

关于java - 在 Java/JavaFX 中处理这些事件的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39382153/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com