在 javafx 的 scenebuilder 中调用带参数的方法

Calling a method with parameters in javafx´s scenebuilder

我两周前开始编码,我正在尝试 java 杂乱无章。

我写了一个 Java 斐波那契数列程序,它让你 select 数列的开始和长度。

我用代码构建了我的第一个 JavaFx Gui,但后来改为 SceneBuilder。

从那时起,我就尝试在 sample.fxml 和 Controller.java 中实现我的代码。我弄清楚了如何调用方法并 link 使用带有场景生成器的图形用户界面调用它们,但我不太清楚如何调用带有参数的方法,例如我的斐波那契方法。

抱歉,这是我的第一个问题。不要因为我犯错误而恨我。 感谢您的建议。

这在我手写的 gui 上工作得很好,因为我可以只在一个对象上使用我的方法并用该方法调用触发事件。

Google 是我的朋友,但我找不到关于这个话题的任何解决方案。

我正在考虑在我的代码中使用声明的变量而不是参数,然后用 setter 调用它们,但我不知道如何在 Scene Builder 中实现它。

i only can link methods without parameters (events work) (

void fibonacci(int start, int length) { 

            while (i <= start) {  (not everything due to understainding)
       //the syntax of my method in "original" javafx getting called by


        if (actionEvent.getSource() == sub_button) {
            FibMain fibMain = new FibMain();
            while (true) {


                try {
                    length = Integer.parseInt(fib_length.getText());    

                    start = Integer.parseInt(fib_start.getText());
                    break;
                } catch (NumberFormatException e) {
                    System.out.println("ERROR!");
                    fib_out.setText("ERROR! ONLY NUMBERS ARE ALLOWED!");
                    throw e; fibMain.fibonacci(start, length);      }

这是我的工作代码,我很乐意使用开始和长度参数简单地调用该方法。

我希望能够在 SceneBuilder 中使用参数开始和长度调用方法,并将它们 link 到 ActionEvcent。

我假设你有两个 TextFields 用于不同的输入和类似 Button 的东西来开始计算。您 link 到 Button 的方法应该将每个 TextField 的文本解析为 int,然后调用您的斐波那契方法。您可以通过将 TextField 注入控制器实例来访问它们。这是通过在 FXML 文件中给它们一个 fx:id 属性来完成的,其中的值与控制器中的字段名称相匹配 class.

FXML 示例:

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.layout.VBox?>

<VBox xmlns="http://javafx.com/javafx" xmlns:fx="http://javafx.com/fxml" 
      fx:controller="com.example.Controller" alignment="CENTER" spacing="10">

    <padding>
        <Insets topRightBottomLeft="15"/>
    </padding>

    <TextField fx:id="startField" promptText="Start"/>

    <TextField fx:id="lengthField" promptText = "Length"/>

    <Button text="Compute" onAction="#handleCompute"/>

</VBox>

示例控制器:

package com.example;

import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.TextField;

public class Controller {

    // Will be injected by FXMLLoader
    @FXML private TextField startField;
    @FXML private TextField lengthField;

    @FXML
    private void handleCompute(ActionEvent event) {
        event.consume();

        // Omitted error handling. If there was an exception one option is to
        // show a javafx.scene.control.Alert to the user.
        int start = Integer.parseInt(startField.getText());
        int length = Integer.parseInt(lengthField.getText());

        // Needs to be defined. Do something with result?
        fibonacci(start, length);
    }

}

注意:我没有提供向用户显示结果的方法。然而,一个简单的选择是包含一个 Label,以与 TextFields 相同的方式将其注入控制器,并在计算完成时设置其 text 属性 .

注意:您可以通过设置 TextFormatter 来限制可以输入 TextField 的字符。见 .