好吧,这是我的困境。我正在尝试使用JavaFX和其他元素创建一个TextFields表单。但是现在,我需要知道如何实现一个实时填充的表单。
例如,理论上,假设我有两个TextFields。
TextField textfield1 = new TextField();
TextField textfield2 = new TextField();第二个文本字段取决于在第一个文本字段中输入的值。一旦用户完成了第一个输入,第二个就会被填充一个值。
if(!textfield.getText().equals("")) {
textfield2.setText("blah, blah, blah");
}举个真实的例子,假设我正在制作一个工资系统。用户输入员工的基本薪资(在第一个文本字段中),一旦完成,将输入员工月工资的值:基本薪资* 2 (在第二个textfield中)。
第二个是不可编辑的,只有第一个是不可编辑的。非常肯定,在第一个字段中我需要某种事件处理程序,但我真的很困惑如何编写或编写什么样的代码。顺便说一句,我是JavaFX的新手。任何帮助都将不胜感激。
UPDATE:我正在使用Scenebuilder (对不起,我忘了包括它)。因此,每个元素的侦听器都被分组到控制器中定义的函数中。自从我放弃了Swing (和Windowbuilder),顺便说一句,使用Eclipse之后,我就觉得使用内部类很奇怪。我想保持代码惯例的统一性。
发布于 2017-03-14 07:10:55
我相信你是在问如何实现焦点丢失的听众。这演示了如何将更改侦听器添加到第一个文本字段的focusProperty()中,并使用它触发第二个文本字段的更新。
这可以通过在@FXML注释的initialize()方法中放置逻辑来实现。在注入了所有@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("");
}
}
});
}
}https://stackoverflow.com/questions/42778832
复制相似问题