gpt4 book ai didi

java - 实时 JavaFX-8 表单管理

转载 作者:行者123 更新时间:2023-12-02 13:40:09 27 4
gpt4 key购买 nike

好吧,这就是我的困境。我正在尝试使用 TextFields 和其他元素创建一个 JavaFX 表单。但现在,我需要知道如何实现实时填写的表单。

理论上,例如,假设我有两个 TextField。

TextField textfield1 = new TextField();
TextField textfield2 = new TextField();

第二个文本字段取决于第一个文本字段中输入的值。一旦用户完成第一个输入,第二个就会填充一个值。

if(!textfield.getText().equals("")) {
textfield2.setText("blah, blah, blah");
}

举一个真实的案例,假设我正在制作一个工资系统。用户输入员工的基本工资(在第一个文本字段中),完成后立即输入员工的月工资值:基本工资 * 2(在第二个文本字段中)。

第二个是不可编辑的,只有第一个可以。很确定我需要在第一个字段上使用某种事件处理程序,但我真的很困惑如何编写或编写什么代码。顺便说一下,我是 JavaFX 新手。任何帮助将不胜感激。

更新:我正在使用 Scenebuilder(抱歉我忘了包含它)。因此,每个元素的监听器都被分组到 Controller 中定义的函数中。自从我放弃 Swing(和 Windowbuilder)并使用 Eclipse 以来,使用内部类对我来说感觉很奇怪。我希望保持代码约定全面一致。

最佳答案

我相信您是在问如何实现焦点丢失监听器。这演示了如何将更改监听器添加到第一个文本字段的 focusProperty() 并使用它来触发第二个文本字段的更新。

这可以在 Controller 中通过将逻辑放置在带注释的 @FXML 方法中来完成。在注入(inject)所有 @FXML 注释字段后,JavaFX 会自动调用此方法。

public class Controller {
@FXML
private TextField textfield1;
@FXML
private TextField textfield2;

@FXML
public void initialize() {
textfield1.focusedProperty().addListener((obs, oldValue, newValue) -> {
if (!newValue) { // focus lost
if (!"".equals(textfield1.getText())) {
textfield2.setText("blah, blah, blah");
} else {
textfield2.setText("");
}
}
});
}
}

关于java - 实时 JavaFX-8 表单管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42778832/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com