JavaFx wykorzystanie pobranych wartości z kontrolek

0

Witam mam pewien problem i nie mam pomysłu. Jak widać niżej mam dwie klasy *controllera i *logic. Po kliknięciu w button uruchamia się funkcja actionAfterClick() i wykonuje się kod który jest zapisany w klasie AddContractLogic w funkcji setValueControls(). I to wszystko działa w porządku. W funkcji setValueControls() pobieram wartości z kontrolek itp. Chodzi mi o to że pobrane wartości chciałbym wykorzystać w innej metodzie w tej samej klasie. Jednak nie mam dostępu do tych wartości (zmiennych) ponieważ są lokalne w danej funkcji. Nie mam pojęcia jak je zainicjować globalnie w tej klasie. Bo jak zrobię jako pole np private boolean isAgreement ; to nie mogę na nich działać ponieważ jeszcze nie mają pobranych wartości z kontrolek. Chyba że powinienem zwrócić wszystkie te wartości z tej metody setValueControls() ale jest tutaj kilka różnych obiektów a z tego co wiem to nie można zwrócić więcej niż jednej.

package com.controller;

import com.logic.AddContractLogic;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.*;

import java.net.URL;
import java.util.ResourceBundle;

public class AddContractController implements Initializable {

    @FXML
    private DatePicker contractDatePicker;

    @FXML
    private RadioButton contractRadioButton;

    @FXML
    private RadioButton agreementRadioButton;

    @FXML
    private Spinner<Double> provisionSpinner;

    @FXML
    private TextField nameContractField;

    @FXML
    private Label statusLabel;

    @FXML
    private ToggleGroup toggleGroup1;

    SpinnerValueFactory.DoubleSpinnerValueFactory spinner = new SpinnerValueFactory.DoubleSpinnerValueFactory(1,400,12.5);


    public DatePicker getContractDatePicker() {
        return contractDatePicker;
    }

    public RadioButton getContractRadioButton() {
        return contractRadioButton;
    }

    public RadioButton getAgreementRadioButton() {
        return agreementRadioButton;
    }

    public Spinner<Double> getProvisionSpinner() {
        return provisionSpinner;
    }

    public TextField getNameContractField() {
        return nameContractField;
    }

    public Label getStatusLabel() {
        return statusLabel;
    }

    public ToggleGroup getToggleGroup1() {
        return toggleGroup1;
    }

    @Override
    public void initialize(URL url, ResourceBundle resourceBundle) {
        provisionSpinner.setValueFactory(spinner);
        provisionSpinner.setEditable(true);

        toggleGroup1 = new ToggleGroup();
        contractRadioButton.setToggleGroup(toggleGroup1);
        agreementRadioButton.setToggleGroup(toggleGroup1);
        contractRadioButton.setSelected(true);
    }

    @FXML
    public void actionAfterClick(){
        AddContractLogic logic = new AddContractLogic();
        logic.setValueControls(this);
    }
}
package com.logic;

import com.controller.AddContractController;

import java.time.LocalDate;

public class AddContractLogic {




    public void setValueControls(AddContractController add){
        LocalDate date = add.getContractDatePicker().getValue();
        System.out.println(date);

        double provisionValue = add.getProvisionSpinner().getValue();
        System.out.println(provisionValue);

        String textContract = add.getNameContractField().getText();
        System.out.println(textContract);

        boolean isAgreement = add.getAgreementRadioButton().isSelected();
        System.out.println(isAgreement);

        boolean isContract = add.getContractRadioButton().isSelected();
        System.out.println(isContract);
    }

}
0

Podeślij link do githuba żeby dało się skompilować projekt to może uda się coś wymyślić

0

Jak robisz formatki w FX'ie to najlepiej by było jakbyś miał MVC tzn. klasa z kontrolkami (kontroler) oraz jakąś klasę modelową z fxowymi propertisami i zrobił między nimi binding czyli spiął model z kontrolkami tak abyś nie potrzebował kontrolki do pobrania wartości. Wtedy jakbyś chciał sobie współdzielić dane to wystarczy że miałbyś w swoich obu klasach referencje do instancji klasy modelowej.

0

Dawno nie pisałem w JavieFX, miałem z tym krótką przygodę ale hmm.
Co ty potrzebujesz mieć w klasie AddContactLogic? Wartości z przycisków, całe przyciski?
Jeśli to jest logika, no to chyba same dane potrzebujesz, więc czemu by ich nie przekazać w konstruktorze bądź jako argumenty do funkcji?

Dodanie użytkownika do bazy i zwrócenie statusu? Najlepiej jakbyś określił dokładnie co chcesz osiągnąć.

1 użytkowników online, w tym zalogowanych: 0, gości: 1