java - 使用监听器动态添加文本字段

标签 java javafx

我正在尝试使用 javafx 编写一个类似于 Android 手机上的联系人应用程序的程序。在 fxml 文件中,我有一个 VBox,其中包含三个文本字段,前两个字段用于名字和姓氏,第三个字段用于数字。

现在我希望程序做的是,当数字的文本字段填充单个字符时,另一个文本字段将自动添加到 VBox。 (对于另一个号码)。

我希望下一个字段也能发生同样的事情。以及后面的任何其他字段,因此它具有递归形式。

现在我知道可以实现此目的的唯一方法是使用监听器,但我不知道如何创建这样的递归监听器。一旦完成其工作,旧字段的监听器就必须被删除,因此在旧字段中输入内容时它不会不断创建新字段。但当您在监听器内部时,您无法删除监听器。

有办法做到这一点吗?

最佳答案

lambda 表达式不能引用自身,但匿名内部类可以,因此如果您将监听器实现为匿名内部类,则可以实现您想要执行的操作:

import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.scene.Scene;
import javafx.scene.control.ScrollPane;
import javafx.scene.control.TextField;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class DynamicTextFields extends Application {

    private TextField lastTextField ;

    @Override
    public void start(Stage primaryStage) {
        lastTextField = new TextField();
        VBox vbox = new VBox(5, lastTextField);
        ChangeListener<String> textFieldListener = new ChangeListener<String>() {

            @Override
            public void changed(ObservableValue<? extends String> obs, String oldValue, String newValue) {
                lastTextField.textProperty().removeListener(this);
                lastTextField = new TextField();
                lastTextField.textProperty().addListener(this);
                vbox.getChildren().add(lastTextField);
            }

        };
        lastTextField.textProperty().addListener(textFieldListener);

        Scene scene = new Scene(new ScrollPane(vbox), 400, 400);
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

关于java - 使用监听器动态添加文本字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50004392/

相关文章:

java - 忽略 Idea 11 中 Eclipse 中可能出现的某些警告

java - 如何从改造中的 json java android 中的对象中删除所有 null 和空字符串值?

java - 如何在 JavaFX 中设置 FXTable 的 TableMenuButton 上下文菜单的背景和文本颜色样式?

java - 从android中的Json String中删除反斜杠

java - JavaFX 中的 TableView 数据编码

java - 如何在 JavaFX 的每个网格单元格中获取鼠标输入的 GridPane 行和列 ID?

JavaFX ScrollPane PickOnBounds(部分鼠标透明度)

java - 如何定位我的按钮?

java - 如何在 javafx 浏览器中操作链接

java - Android 上的着色图像处理