首页 > 解决方案 > 在 Javafx 中触发事件后获取值

问题描述

我对 JavaFX 比较陌生,我已经在论坛上搜索了几天,但我还没有找到一个明确的解决方案来解决我的问题。请考虑以下代码:

    public class MeasureController implements Initializable {

    double retdx;

    public void dxCalc() {
    double dx = 5;
    retdx = dx;
    }

    @FXML
    void fireMeasure(ActionEvent event) {
    dxCalc();   
    }
}

正如您在上面看到的,我有一个名为MeasureController的类,并且我有一个场景节点(按钮),当用户按下它时,它将调用fireMeasure事件中的方法。我的问题是我无法获得值double retdxdouble dx并将其传递给另一个类控制器。我已经尝试使用以下代码,但似乎没有一个工作:

public class DataController extends Thread implements Initializable {

FXMLLoader fxmlLoader = new 
FXMLLoader(getClass().getResource("Measure.fxml"));
Parent offsetScene = (Parent) fxmlLoader.load();
Stage offsetStage = new Stage();
offsetStage.initStyle(StageStyle.UTILITY);
offsetStage.setScene(new Scene(offsetScene));
offsetStage.show();

MeasureController ofX = new MeasureController();        
double setX = ofX.retdx;    
}

或者:

public class DataController extends Thread implements Initializable {

FXMLLoader fxmlLoader = new 
FXMLLoader(getClass().getResource("Measure.fxml"));
Parent offsetScene = (Parent) fxmlLoader.load();
Stage offsetStage = new Stage();
offsetStage.initStyle(StageStyle.UTILITY);
offsetStage.setScene(new Scene(offsetScene));
offsetStage.show();

MeasureController ofX = new MeasureController();        
double setX = ofX.dxCalc();
}

标签: javajavafx

解决方案


你看到你如何用关键字定义你的dxCalc()方法了吗?void关键字告诉 Java 您希望该void方法执行某些操作,但您不需要从它返回任何内容。

void就是所谓的“返回类型”或方法返回的值的类型。 void本质上是“无”的意思。

现在,举个例子:

String getName() {
    return "Rob";
}

这也是一种方法,但是你看怎么void改成String? 这意味着无论何时调用此方法,您都会得到 aString作为回报。方法中的return关键字实际上是告诉 Java 要返回什么值。

所以,给定上面的例子,如果我们使用下面的代码:

System.out.println(getName());

输出将是:

robert

在您的情况下,您正在调用该dxCalc()方法,但由于该方法不返回值,因此您无法对计算结果执行任何操作。

如果您要将方法更改为以下内容:

double dxCalc() {
  double dx = 5.0;
  return dx;
}

您是在告诉 Java,当dxCalc()调用该方法时,返回一个double值。因此,在您fireMeasure()的 FXML 按钮的方法中,您可以使用这样的值,例如:

@FXML
void fireMeasure() {
  System.out.println(dxCalc());
}

方法调用被dxCalc()方法的返回值替换,因此5.0被打印出来。


推荐阅读