JavaFX:如何使用不同的侦听器主体创建应用程序实例

时间:2019-01-13 19:22:52

标签: java javafx

我是JavaFX的新手。我创建了一个包含三个元素的应用程序:一个用于输入数字的TextField,一个“计算”按钮和一个用于显示结果的标签。侦听器将添加到“计算”按钮,该按钮的主体由公式计算。

问题:我如何在带有侦听器主体中其他公式的许多应用程序中使用此接口?当然,您可以简单地复制和粘贴代码,仅重写侦听器的主体,但是我正在寻找一种面向对象的方法。谢谢。

我该怎么做?

1 个答案:

答案 0 :(得分:0)

您始终可以访问控制器并插入所需的任何对象。

例如:

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

在此代码中,将计算器(在本例中为Fibonnaci)注入到控制器中。 您可以将CalculatorController类及其对应的fxml重用,并可以根据要计算的公式设置任何计算器对象。 请注意,如果未调用setCalculator,此代码将导致空指针异常。

我不太确定这是否回答了您的问题。如果您下次包含代码,那就太好了。