首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实时JavaFX-8表单管理

实时JavaFX-8表单管理
EN

Stack Overflow用户
提问于 2017-03-14 06:07:38
回答 1查看 385关注 0票数 0

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

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

代码语言:javascript
复制
TextField textfield1 = new TextField();
TextField textfield2 = new TextField();

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

代码语言:javascript
复制
if(!textfield.getText().equals("")) {
    textfield2.setText("blah, blah, blah");
}

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

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

UPDATE:我正在使用Scenebuilder (对不起,我忘了包括它)。因此,每个元素的侦听器都被分组到控制器中定义的函数中。自从我放弃了Swing (和Windowbuilder),顺便说一句,使用Eclipse之后,我就觉得使用内部类很奇怪。我想保持代码惯例的统一性。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-14 07:10:55

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

这可以通过在@FXML注释的initialize()方法中放置逻辑来实现。在注入了所有@FXML注释字段之后,JavaFX自动调用了它。

代码语言:javascript
复制
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("");
                }
            }
        });
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42778832

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档