Вызов метода с параметрами в построителе сцен javafx - PullRequest
0 голосов
/ 15 июня 2019

Я начал программировать две недели назад, и я пробую java Higgledy-piggledy.

Я написал программу последовательности Фибоначчи на Java, которая позволяет вам выбирать начало последовательности и ее длину.

Я создаю свой первый JavaFx Gui с кодом, но затем изменил на SceneBuilder.

С тех пор я пытаюсь внедрить свой код в sample.fxml и Controller.java. Я понял, как вызывать методы и связывать их с моим графическим интерфейсом с помощью построителя сцен, но я не могу понять, как вызывать метод с параметрами, например, мой метод Фибоначчи.

Извините, это мой первый вопрос. Не ненавидь меня за ошибки. Спасибо за совет.

Это прекрасно работало с моим ручным кодированным графическим интерфейсом, потому что я мог просто использовать мой метод на объекте и вызывать вызывающее событие с методом.

Google - мой друг, но я пока не могу найти решения по этой теме.

Я думал об использовании объявленной переменной в моем коде вместо параметров и затем вызывал их с помощью установщика, но я не представляю, как реализовать это в Scene Builder.

я могу связывать только методы без параметров (события работают) (

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);      }

Это мой рабочий код, и я хотел бы просто вызвать метод с параметром start и length.

Я ожидаю, что смогу вызвать метод с параметрами start и length в SceneBuilder и связать их с ActionEvcent.

1 Ответ

1 голос
/ 15 июня 2019

Я предполагаю, что у вас есть два TextField для разных входов и что-то вроде Button для начала вычислений.Метод, который вы связываете с вашим Button, должен анализировать текст каждого TextField в int s и затем вызывать ваш метод Фибоначчи.Вы можете получить доступ к своим TextField s, внедрив их в экземпляр контроллера.Это делается путем предоставления им атрибута fx:id в файле FXML, где значение соответствует имени поля в классе контроллера.

Пример 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, внедрение его в контроллер таким же образом, как и TextField s, и установка его свойства text по завершении вычислений.

Примечание. Вы можете ограничить ввод символов в TextField, установив TextFormatter.См. этот вопрос .

...