JavaFX: как создавать экземпляры приложения с разными телами слушателей - PullRequest
0 голосов
/ 13 января 2019

Я новичок в JavaFX. Я создал приложение с тремя элементами: TextField для ввода числа, кнопка «Рассчитать» и метка для отображения результата. Слушатель добавляется к кнопке «Рассчитать», в теле которой результат рассчитывается по формуле.

Вопрос: Как я могу использовать этот интерфейс для многих приложений с другими формулами в теле этого слушателя? Конечно, вы можете просто скопировать и вставить код, переписав только тело слушателя, но я ищу объектно-ориентированный метод. Спасибо.

Как я могу сделать это правильно?

1 Ответ

0 голосов
/ 14 января 2019

Вы всегда можете получить доступ к контроллеру и подключить любой объект, который хотите.

Например:

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 не вызывается.

Я не слишком уверен, ответил ли он на ваш вопрос. Было бы хорошо, если бы вы включили код в следующий раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...