在 javafx 的 scenebuilder 中调用带参数的方法
Calling a method with parameters in javafx´s scenebuilder
我两周前开始编码,我正在尝试 java 杂乱无章。
我写了一个 Java 斐波那契数列程序,它让你 select 数列的开始和长度。
我用代码构建了我的第一个 JavaFx Gui,但后来改为 SceneBuilder。
从那时起,我就尝试在 sample.fxml 和 Controller.java 中实现我的代码。我弄清楚了如何调用方法并 link 使用带有场景生成器的图形用户界面调用它们,但我不太清楚如何调用带有参数的方法,例如我的斐波那契方法。
抱歉,这是我的第一个问题。不要因为我犯错误而恨我。
感谢您的建议。
这在我手写的 gui 上工作得很好,因为我可以只在一个对象上使用我的方法并用该方法调用触发事件。
Google 是我的朋友,但我找不到关于这个话题的任何解决方案。
我正在考虑在我的代码中使用声明的变量而不是参数,然后用 setter 调用它们,但我不知道如何在 Scene Builder 中实现它。
i only can link methods without parameters (events work)
(
void fibonacci(int start, int length) {
while (i <= start) { (not everything due to understainding)
//the syntax of my method in "original" javafx getting called by
if (actionEvent.getSource() == sub_button) {
FibMain fibMain = new FibMain();
while (true) {
try {
length = Integer.parseInt(fib_length.getText());
start = Integer.parseInt(fib_start.getText());
break;
} catch (NumberFormatException e) {
System.out.println("ERROR!");
fib_out.setText("ERROR! ONLY NUMBERS ARE ALLOWED!");
throw e; fibMain.fibonacci(start, length); }
这是我的工作代码,我很乐意使用开始和长度参数简单地调用该方法。
我希望能够在 SceneBuilder 中使用参数开始和长度调用方法,并将它们 link 到 ActionEvcent。
我假设你有两个 TextField
s 用于不同的输入和类似 Button
的东西来开始计算。您 link 到 Button
的方法应该将每个 TextField
的文本解析为 int
,然后调用您的斐波那契方法。您可以通过将 TextField
注入控制器实例来访问它们。这是通过在 FXML 文件中给它们一个 fx:id
属性来完成的,其中的值与控制器中的字段名称相匹配 class.
FXML 示例:
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.layout.VBox?>
<VBox xmlns="http://javafx.com/javafx" xmlns:fx="http://javafx.com/fxml"
fx:controller="com.example.Controller" alignment="CENTER" spacing="10">
<padding>
<Insets topRightBottomLeft="15"/>
</padding>
<TextField fx:id="startField" promptText="Start"/>
<TextField fx:id="lengthField" promptText = "Length"/>
<Button text="Compute" onAction="#handleCompute"/>
</VBox>
示例控制器:
package com.example;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.TextField;
public class Controller {
// Will be injected by FXMLLoader
@FXML private TextField startField;
@FXML private TextField lengthField;
@FXML
private void handleCompute(ActionEvent event) {
event.consume();
// Omitted error handling. If there was an exception one option is to
// show a javafx.scene.control.Alert to the user.
int start = Integer.parseInt(startField.getText());
int length = Integer.parseInt(lengthField.getText());
// Needs to be defined. Do something with result?
fibonacci(start, length);
}
}
注意:我没有提供向用户显示结果的方法。然而,一个简单的选择是包含一个 Label
,以与 TextField
s 相同的方式将其注入控制器,并在计算完成时设置其 text
属性 .
注意:您可以通过设置 TextFormatter
来限制可以输入 TextField
的字符。见 .
我两周前开始编码,我正在尝试 java 杂乱无章。
我写了一个 Java 斐波那契数列程序,它让你 select 数列的开始和长度。
我用代码构建了我的第一个 JavaFx Gui,但后来改为 SceneBuilder。
从那时起,我就尝试在 sample.fxml 和 Controller.java 中实现我的代码。我弄清楚了如何调用方法并 link 使用带有场景生成器的图形用户界面调用它们,但我不太清楚如何调用带有参数的方法,例如我的斐波那契方法。
抱歉,这是我的第一个问题。不要因为我犯错误而恨我。 感谢您的建议。
这在我手写的 gui 上工作得很好,因为我可以只在一个对象上使用我的方法并用该方法调用触发事件。
Google 是我的朋友,但我找不到关于这个话题的任何解决方案。
我正在考虑在我的代码中使用声明的变量而不是参数,然后用 setter 调用它们,但我不知道如何在 Scene Builder 中实现它。
i only can link methods without parameters (events work) (
void fibonacci(int start, int length) {
while (i <= start) { (not everything due to understainding)
//the syntax of my method in "original" javafx getting called by
if (actionEvent.getSource() == sub_button) {
FibMain fibMain = new FibMain();
while (true) {
try {
length = Integer.parseInt(fib_length.getText());
start = Integer.parseInt(fib_start.getText());
break;
} catch (NumberFormatException e) {
System.out.println("ERROR!");
fib_out.setText("ERROR! ONLY NUMBERS ARE ALLOWED!");
throw e; fibMain.fibonacci(start, length); }
这是我的工作代码,我很乐意使用开始和长度参数简单地调用该方法。
我希望能够在 SceneBuilder 中使用参数开始和长度调用方法,并将它们 link 到 ActionEvcent。
我假设你有两个 TextField
s 用于不同的输入和类似 Button
的东西来开始计算。您 link 到 Button
的方法应该将每个 TextField
的文本解析为 int
,然后调用您的斐波那契方法。您可以通过将 TextField
注入控制器实例来访问它们。这是通过在 FXML 文件中给它们一个 fx:id
属性来完成的,其中的值与控制器中的字段名称相匹配 class.
FXML 示例:
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.layout.VBox?>
<VBox xmlns="http://javafx.com/javafx" xmlns:fx="http://javafx.com/fxml"
fx:controller="com.example.Controller" alignment="CENTER" spacing="10">
<padding>
<Insets topRightBottomLeft="15"/>
</padding>
<TextField fx:id="startField" promptText="Start"/>
<TextField fx:id="lengthField" promptText = "Length"/>
<Button text="Compute" onAction="#handleCompute"/>
</VBox>
示例控制器:
package com.example;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.TextField;
public class Controller {
// Will be injected by FXMLLoader
@FXML private TextField startField;
@FXML private TextField lengthField;
@FXML
private void handleCompute(ActionEvent event) {
event.consume();
// Omitted error handling. If there was an exception one option is to
// show a javafx.scene.control.Alert to the user.
int start = Integer.parseInt(startField.getText());
int length = Integer.parseInt(lengthField.getText());
// Needs to be defined. Do something with result?
fibonacci(start, length);
}
}
注意:我没有提供向用户显示结果的方法。然而,一个简单的选择是包含一个 Label
,以与 TextField
s 相同的方式将其注入控制器,并在计算完成时设置其 text
属性 .
注意:您可以通过设置 TextFormatter
来限制可以输入 TextField
的字符。见