关闭。这个问题需要更加关注。它目前不接受答案。**想改进这个问题吗?**编辑这篇文章,更新这个问题,使它只关注一个问题。
三天前关门。改进这个问题我对使用javafx有点陌生,我想知道是否有一种内置的方式可以根据用户输入的整数值显示文本字段。例如,一个文本字段将询问有多少员工仍在值班,然后根据输入的整数值,将显示适当数量的文本字段以输入员工姓名。
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放置在一个容器中 VBox 和 VBox 放置在一个 ScrollPane .每当 Spinner 价值增加,另一个 TextField 已添加到 VBox 无论何时 Spinner 值减小,最后 TextField 已从中删除 VBox . 请注意 Spinner 只能增加或减少一个。
Spinner
TextField
VBox
ScrollPane
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将是从初始文本字段(客户数)读取的数值
2条答案
按热度按时间8cdiaqws1#
下面呢?
还没有准备好生产,但我希望足够让你开始。
代码后面的注解。
这个
Spinner
值决定了有多少个TextField
这是要展示的。所有的
TextField
将s放置在一个容器中VBox
和VBox
放置在一个ScrollPane
.每当
Spinner
价值增加,另一个TextField
已添加到VBox
无论何时Spinner
值减小,最后TextField
已从中删除VBox
. 请注意Spinner
只能增加或减少一个。flvlnr442#
不确定是否有内置方式,但听起来这可以通过使用一个简单的循环来实现。
我将创建一个接受整数作为参数(n)的函数,然后在函数中根据需要验证n的值,并在for循环中生成n个文本字段。
sudo代码:
因此,函数的输入参数n将是从初始文本字段(客户数)读取的数值