Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JavaFX动态表单域UI

JavaFX动态表单域UI
EN

Stack Overflow用户
提问于 2018-06-07 18:08:59
回答 2查看 816关注 0票数 0

有人知道如何从如下所示的UI组件中模拟功能吗?我想在TextField框中输入文本时重复添加表单域。我不需要下拉按钮,只需要动态添加表单。

EN

回答 2

Stack Overflow用户

发布于 2018-06-08 18:36:53

您可以修改GridPane的子项,在每次激活其中一个按钮时添加一个新的TextField & Button。监听text属性以启用/禁用Button并保存结果。

代码语言:javascript
运行
AI代码解释
复制
private static void insertRow(GridPane grid, List<String> values, int index) {
    // increment index of children with rowIndex >= index
    for (Node n : grid.getChildren()) {
        int row = GridPane.getRowIndex(n);
        if (row >= index) {
            GridPane.setRowIndex(n, row + 1);
        }
    }

    TextField text = new TextField();

    Button add = new Button("+");
    add.setDisable(true);
    add.setOnAction(evt -> {
        insertRow(grid, values, GridPane.getRowIndex(add) + 1);
    });

    values.add(index, "");

    text.textProperty().addListener((a, oldValue, newValue) -> {
        add.setDisable(newValue.isEmpty());
        values.set(GridPane.getRowIndex(add), newValue);
    });

    grid.addRow(index, text, add);
}

@Override
public void start(Stage primaryStage) throws Exception {
    GridPane grid = new GridPane();
    List<String> list = new ArrayList<>();
    insertRow(grid, list, 0);
    Button print = new Button("print");
    print.setOnAction(evt -> {
        System.out.println(list);
    });
    grid.add(print, 0, 1);
    Scene scene = new Scene(grid, 300, 500);

    primaryStage.setScene(scene);
    primaryStage.show();
}
票数 0
EN

Stack Overflow用户

发布于 2018-06-08 18:33:32

这可能不是你想要的,也可能不是最好的方法,但应该很容易适应你的需求。

基本上,您需要一个要添加到应用程序中的VBoxHBox对象列表。您可以自己创建列表并将其绑定到VBox的子项,或者只需使用getChildren().add()getChildren().remove()方法在VBox中添加/删除HBoxes。

下面是一个完整的小应用程序来演示这个概念。我创建了一个内部类来处理包含所需字段的HBox。这可以被改编成更有价值的:

代码语言:javascript
运行
AI代码解释
复制
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TextField;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class Main extends Application {

    private static VBox mainPane;

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

    @Override
    public void start(Stage primaryStage) {

        mainPane = new VBox(5);
        mainPane.setPadding(new Insets(10));
        mainPane.setAlignment(Pos.TOP_CENTER);

        mainPane.getChildren().add(new UIForms());

        primaryStage.setScene(new Scene(mainPane));
        primaryStage.show();

    }

    static void addField() {
        mainPane.getChildren().add(new UIForms());
    }

    static void removeField(UIForms field) {
        if (mainPane.getChildren().size() > 1) {
            mainPane.getChildren().remove(field);
        }
    }
}

class UIForms extends HBox {

    private TextField textField1;
    private TextField textField2;

    private Button btnAddField;
    private Button btnRemoveField;

    public UIForms() {

        // Setup the HBox layout
        setAlignment(Pos.CENTER_LEFT);
        setSpacing(5);

        // Create the UI controls
        textField1 = new TextField();
        textField2 = new TextField();
        btnAddField = new Button("+");
        btnRemoveField = new Button("-");

        // Setup button actions
        btnAddField.setOnAction(e -> Main.addField());
        btnRemoveField.setOnAction(e -> Main.removeField(this));

        // Add the UI controls
        getChildren().addAll(
                textField1, textField2, btnAddField, btnRemoveField
        );
    }
}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50747634

复制
相关文章
Roslyn 语法树中的各种语法节点及每个节点的含义
2018-07-18 12:24
walterlv
2018/09/18
1.8K0
RabbitMQ是如何确定消息是否投递到队列中的
在使用RabbitMQ消息中间件时,因为消息的投递是异步的,默认情况下,RabbitMQ会删除那些无法路由的消息。为了能够检出消息是否顺利投递到队列,我们需要相应的处理机制。今天就来验证一下相关的验证机制。
码农小胖哥
2020/10/10
2.9K0
RabbitMQ是如何确定消息是否投递到队列中的
js推断元素是否隐藏[通俗易懂]
if ( document.getElementById( "div" ).css( "display" )=== 'none' )
全栈程序员站长
2022/07/10
9.4K0
如何删除二叉搜索树中的节点?
题目链接:https://leetcode-cn.com/problems/delete-node-in-a-bst/
代码随想录
2021/09/08
1.5K0
如何删除二叉搜索树中的节点?
二叉树子节点的最近父节点
百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”
conanma
2021/06/08
1.9K0
LeetCode 450. 删除二叉搜索树中的节点
参考 二叉搜索树删除操作 要删除节点有2子节点,找到右子树中最小的节点,将其val值覆盖要删除的节点值,再删除这个最小节点 要删除的节点的子节点为1个或0个,直接将要删除的节点的父节点指向子的子节点 class Solution { public: TreeNode* deleteNode(TreeNode* root, int key) { TreeNode *parent = NULL, *cur = root; while(cur && cur->val != key
Michael阿明
2020/07/13
4450
LeetCode 450. 删除二叉搜索树中的节点
JS,如果改变span标签的是否隐藏属性
----------------------------------Hongten--------------------------------------------
Hongten
2018/09/13
11.1K0
求树中叶子节点的个数
这个题目作为一个小练习,让我们对树的概念进一步的掌握,其实思路非常简单,在遍历树的过程中,计算某个节点如果leftChile和rightChild都指向NULL,那么证明其就是一个叶子节点,我们对引用计数加一就可以了。具体代码如下:
我与梦想有个约会
2023/10/20
1560
MySQL 5.7 MGR单主确定主节点方法
MySQL 5.7 MGR单主确定主节点是哪个,我们可以通过成员ID来判断,然后结合read_only参数来确认。
星哥玩云
2022/08/18
6070
如何确定EasyCVR本地流媒体是否启动成功?
EasyCVR视频协议融合平台不仅支持常规协议的接入,我们还拓展了海康SDK、大华SDK、Ehome等私有协议。如果前端设备协议不同且数量较多,则可以通过EasyCVR平台来对所有视频通道做整合和统一管理。而且,EasyCVR提供了丰富的API接口,用户均可通过接口文档进行调用。
TSINGSEE青犀视频
2021/11/11
7120
671. 二叉树中第二小的节点
给定一个非空特殊的二叉树,每个节点都是正数,并且每个节点的子节点数量只能为 2 或 0。如果一个节点有两个子节点的话,那么该节点的值等于两个子节点中较小的一个。 class Solution {
编程张无忌
2021/06/22
3770
671. 二叉树中第二小的节点
漫谈 · 软件中的不确定
版权声明:本文为作者原创,如需转载请通知本人,并标明出处和作者。擅自转载的,保留追究其侵权的权利。golang群:570992072。qq 29185807 个人公众号:月牙寂道长 公众号微信号yueyajidaozhang https://blog.csdn.net/screscent/article/details/84998056
月牙寂道长
2019/07/02
6220
二叉树:在孩子兄弟链表表示的树中求叶子节点的个数
typedef struct CSNode { int val; CSNode *firstchild, *nextsibling; } CSNode, *CSTree; int dfs(CSTree root) { if (!root) return 0; else if (!root->firstchild) return 1; else { int left = dfs(root->firstchild); int right = dfs(root->next
lexingsen
2022/02/24
7930
Scenekit - 检测相机视野中有哪些节点对象,判断一个某个节点是否在视野中
本节学习目标 检测相机视野中有哪些节点 2.判断节点是否在相机视野中 比如ar导航项目中经常会检测某个节点是否在视野中,出现提示箭头?下面我们将实现的代码讲解一下 第一步 先将照相机节点设为场景的视
酷走天涯
2019/06/11
9430
【Java 进阶篇】深入理解 JavaScript DOM Node 对象
在前端开发中,与HTML文档进行交互是一项基本任务。文档对象模型(Document Object Model,简称DOM)为开发者提供了一种以编程方式访问和操作HTML文档的方式。DOM的核心是节点(Node)对象,它代表了文档中的各个部分。本博客将深入探讨JavaScript DOM Node对象,帮助您更好地理解它的作用和如何使用。
繁依Fanyi
2023/10/19
3600
2021-10-11:二叉树中的最大路径和。路径 被定义为一条从树中任意节点出发,沿父节点-子节点连接,达到任意节点的序列。同一
2021-10-11:二叉树中的最大路径和。路径 被定义为一条从树中任意节点出发,沿父节点-子节点连接,达到任意节点的序列。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点,且不一定经过根节点。路径和 是路径中各节点值的总和。给你一个二叉树的根节点 root ,返回其 最大路径和 。力扣124。
福大大架构师每日一题
2021/10/14
2K0
可折叠设备的桌面模式
可折叠设备向用户们提供了使用他们的手机做更多事情的可能性,包括*桌面模式**等创新,也就是当手机平放时,铰链处于水平位置,同时折叠屏幕处于部分打开的状态。
Android 开发者
2022/03/09
2.5K0
可折叠设备的桌面模式
Go语言获取Windows下文件是否隐藏
package main import(   "fmt"   "io/ioutil"   "os" ) var dirpath ="D:\\" func main(){ fmt.Println("---------------------------------------") fmt.Println("欢迎 来到 Go 语言社区,www.golangweb.com") fmt.Println() fmt.Println("社区微信公众号: Golan
李海彬
2018/03/19
1.1K0
LeetCode 671. 二叉树中第二小的节点
给定一个非空特殊的二叉树,每个节点都是正数,并且每个节点的子节点数量只能为 2 或 0。如果一个节点有两个子节点的话,那么这个节点的值不大于它的子节点的值。
Michael阿明
2021/02/20
5060
LeetCode 671. 二叉树中第二小的节点
​LeetCode刷题实战450:删除二叉搜索树中的节点
算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !
程序员小猿
2021/11/29
3500
​LeetCode刷题实战450:删除二叉搜索树中的节点

相似问题

确定树中的节点是否已满

11

Swift:确定树中的节点

15

确定树中的所有叶子节点

12

树-如何使用mysql确定节点的后代是否完整

10

D3可折叠树,节点合并问题

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档