我是JavaFX的新手。我创建了一个包含三个元素的应用程序:一个用于输入数字的TextField,一个“计算”按钮和一个用于显示结果的标签。侦听器将添加到“计算”按钮,该按钮的主体由公式计算。
问题:我如何在带有侦听器主体中其他公式的许多应用程序中使用此接口?当然,您可以简单地复制和粘贴代码,仅重写侦听器的主体,但是我正在寻找一种面向对象的方法。谢谢。
我该怎么做?
答案 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,此代码将导致空指针异常。
我不太确定这是否回答了您的问题。如果您下次包含代码,那就太好了。