Вы всегда можете получить доступ к контроллеру и подключить любой объект, который хотите.
Например:
public Class CalculatorController
{
private ICalculator calculator; //interface to a calculator object
// Add the other variables such as the textField, etc.
public void onCalculateClicked(ActionEvent event)
{
String expressionToCalculate = textField.getText();
String solution = calculator.calculate(expressionToCalculate); // this is the function in the ICalculator interface
solutionLabel.setText(solution);
}
public void setCalculator(ICalculator calculator)
{
this.calculator = calculator;
}
}
Когда вы создаете окно вашего калькулятора, оно должно выглядеть примерно так
@Override
public void start(Stage primaryStage) {
FXMLLoader loader = new FXMLLoader();
loader.setLocation(getClass().getResource("Calculator.fxml"));
Parent root;
try {
root = loader.load();
Scene scene = new Scene(root);
scene.getStylesheets().add(getClass().getResource("Calculator.css").toExternalForm());
CalculatorController controller = loader.<CalculatorController>getController(); //Gain a reference to the Controller
ICalculator myFibonnaciCalculator = new FibonnaciCalculator(); // FibonnaciCalculator implements ICalculator
controller.setCalculator(myFibonnaciCalculator); // set the type of calculator you want to use.
primaryStage.setScene(scene);
primaryStage.show();
}
catch(IOException e)
{
e.printStackTrace();
}
}
В этом коде калькулятор (в данном примере Фибоначчи) вводится в контроллер.
Вы можете повторно использовать класс CalculatorController с соответствующим ему fxml, и вы можете установить любой объект калькулятора в зависимости от формулы, которую вы хотите вычислить.
Обратите внимание, что этот код вызовет исключение нулевого указателя, если setCalculator не вызывается.
Я не слишком уверен, ответил ли он на ваш вопрос. Было бы хорошо, если бы вы включили код в следующий раз.