javafx中有没有一种方法可以让文本字段根据过去的输入显示在单独的文本字段中?

hjqgdpho  于 2021-08-25  发布在  Java
关注(0)|答案(2)|浏览(376)

关闭。这个问题需要更加关注。它目前不接受答案。
**想改进这个问题吗?**编辑这篇文章,更新这个问题,使它只关注一个问题。

三天前关门。
改进这个问题
我对使用javafx有点陌生,我想知道是否有一种内置的方式可以根据用户输入的整数值显示文本字段。例如,一个文本字段将询问有多少员工仍在值班,然后根据输入的整数值,将显示适当数量的文本字段以输入员工姓名。

8cdiaqws

8cdiaqws1#

下面呢?
还没有准备好生产,但我希望足够让你开始。
代码后面的注解。

import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.collections.ObservableList;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.ScrollPane;
import javafx.scene.control.Spinner;
import javafx.scene.control.TextField;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class TextFlds extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception {
        BorderPane root = new BorderPane();

        Spinner<Integer> spinner = new Spinner<>(0, 100, 0);
        Label label = new Label("How many");
        HBox hBox = new HBox(10, label, spinner);
        root.setTop(hBox);

        VBox vBox = new VBox();
        ScrollPane scrollPane = new ScrollPane(vBox);
        spinner.valueProperty().addListener(new ChangeListener<Number>() {

            @Override
            public void changed(ObservableValue<? extends Number> observable,
                                Number oldValue,
                                Number newValue) {
                if (newValue.intValue() > oldValue.intValue()) {
                    vBox.getChildren().add(new TextField());
                }
                else if (newValue.intValue() < oldValue.intValue()) {
                    ObservableList<Node> children = vBox.getChildren();
                    int size = children.size();
                    children.remove(size - 1);
                }
            }
        });
        root.setCenter(scrollPane);

        Scene scene = new Scene(root);
        primaryStage.setScene(scene);
        primaryStage.show();
    }

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

这个 Spinner 值决定了有多少个 TextField 这是要展示的。
所有的 TextField 将s放置在一个容器中 VBoxVBox 放置在一个 ScrollPane .
每当 Spinner 价值增加,另一个 TextField 已添加到 VBox 无论何时 Spinner 值减小,最后 TextField 已从中删除 VBox . 请注意 Spinner 只能增加或减少一个。

flvlnr44

flvlnr442#

不确定是否有内置方式,但听起来这可以通过使用一个简单的循环来实现。
我将创建一个接受整数作为参数(n)的函数,然后在函数中根据需要验证n的值,并在for循环中生成n个文本字段。
sudo代码:

public void generate_N_fields(int N){
   //Do some validation first to ensure N is a valid value

    for(int i = 0; i < N; i++){
       // generate a textfield here
    }
}

因此,函数的输入参数n将是从初始文本字段(客户数)读取的数值

相关问题