如何限制 TextField 使其只能包含一个“.”特点? JavaFX

2023-12-08

在互联网上,我发现非常有用的类,使用它我可以限制 TextField。我遇到一个问题,我的 TextField 只能包含一个“.”特点。我怀疑我可以通过编写适当的正则表达式并将其设置为对该类实例的限制来处理此问题。我使用以下正则表达式:“[0-9.-]”,但它允许用户输入尽可能多的点。我可以请你帮我配置一下我的 TextField 以便不超过一个“.”被允许。

import javafx.beans.property.IntegerProperty;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.scene.control.TextField;

/**
 * Created by Anton on 7/14/2015.
 */
public class RestrictiveTextField extends TextField {
private IntegerProperty maxLength = new SimpleIntegerProperty(this, "maxLength", -1);
private StringProperty restrict = new SimpleStringProperty(this, "restrict");

public RestrictiveTextField() {
    super("0");
    textProperty().addListener(new ChangeListener<String>() {

        private boolean ignore;

        @Override
        public void changed(ObservableValue<? extends String> observableValue, String s, String s1) {

            if (ignore || s1 == null)
                return;
            if (maxLength.get() > -1 && s1.length() > maxLength.get()) {
                ignore = true;
                setText(s1.substring(0, maxLength.get()));
                ignore = false;
            }

            if (restrict.get() != null && !restrict.get().equals("") && !s1.matches(restrict.get() + "*")) {
                ignore = true;
                setText(s);
                ignore = false;
            }
        }
    });
}

/**
 * The max length property.
 *
 * @return The max length property.
 */
public IntegerProperty maxLengthProperty() {
    return maxLength;
}

/**
 * Gets the max length of the text field.
 *
 * @return The max length.
 */
public int getMaxLength() {
    return maxLength.get();
}

/**
 * Sets the max length of the text field.
 *
 * @param maxLength The max length.
 */
public void setMaxLength(int maxLength) {
    this.maxLength.set(maxLength);
}

/**
 * The restrict property.
 *
 * @return The restrict property.
 */
public StringProperty restrictProperty() {
    return restrict;
}

/**
 * Gets a regular expression character class which restricts the user input.

 *
 * @return The regular expression.
 * @see #getRestrict()
 */
public String getRestrict() {
    return restrict.get();
}

/**
 * Sets a regular expression character class which restricts the user input.

 * E.g. [0-9] only allows numeric values.
 *
 * @param restrict The regular expression.
 */
public void setRestrict(String restrict) {
    this.restrict.set(restrict);
}

}


正则表达式有各种版本,具体取决于您想要支持的内容。请注意,您不仅要匹配有效数字,还要匹配部分条目,因为用户必须能够对其进行编辑。因此,例如,空字符串不是有效的数字,但您当然希望用户能够在编辑时删除其中的所有内容;同样你想允许"0.", etc.

所以你可能想要类似的东西

可选的减号,后跟either任意数量的数字,or至少一位数字,一个句点(.) 和任意数量的数字。

正则表达式可以是-?((\\d*)|(\\d+\.\\d*))。可能还有其他方法可以做到这一点,其中一些可能更有效。如果你想支持指数形式("1.3e12")它变得更加复杂。

要将其与TextField,推荐的方法是使用TextFormatter. The TextFormatter由两部分组成:一个转换器,用于在文本与其表示的值之间进行转换(Double在你的情况下:你可以只使用内置的DoubleStringConverter),反之亦然,然后是过滤器。该过滤器是作为一个函数实现的,该函数接受TextFormatter.Change对象并返回相同类型的对象。通常您要么离开Change对象原样并返回它(接受Change“按原样”),或以某种方式修改它。退货也是合法的null代表“没有变化”。因此,在这里的简单情况下,只需检查新建议的文本,看看它是否与正则表达式匹配,如果匹配则“按原样”返回更改,然后返回null否则。

Example:

import java.util.regex.Pattern;

import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.TextField;
import javafx.scene.control.TextFormatter;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
import javafx.util.converter.DoubleStringConverter;

public class NumericTextFieldExample extends Application {

    @Override
    public void start(Stage primaryStage) {
        TextField textField = new TextField();

        Pattern validDoubleText = Pattern.compile("-?((\\d*)|(\\d+\\.\\d*))");

        TextFormatter<Double> textFormatter = new TextFormatter<Double>(new DoubleStringConverter(), 0.0, 
            change -> {
                String newText = change.getControlNewText() ;
                if (validDoubleText.matcher(newText).matches()) {
                    return change ;
                } else return null ;
            });

        textField.setTextFormatter(textFormatter);

        textFormatter.valueProperty().addListener((obs, oldValue, newValue) -> {
            System.out.println("New double value "+newValue);
        });

        StackPane root = new StackPane(textField);
        root.setPadding(new Insets(24));
        primaryStage.setScene(new Scene(root));
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何限制 TextField 使其只能包含一个“.”特点? JavaFX 的相关文章

  • while循环内的递归,它是如何工作的?

    你能告诉我这段java代码是如何工作的吗 public class Main public static void main String args Strangemethod 5 public static void Strangemet
  • 继续使用 sketch.js 编辑草图图像 [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我正在使用 sketch js 中的示例 http intridea github io sketch js http intridea g
  • 是否有匹配单个字素簇的正则表达式?

    字素是用户感知的文本字符 在 unicode 中可能由多个代码点组成 From Unicode 标准附录 29 http unicode org reports tr29 Grapheme Cluster Boundaries 重要的是要认
  • Powermockito 可以在非最终具体类中模拟最终方法吗?

    假设我有一个非最终具体类 具有如下所示的最终方法 public class ABC public final String myMethod return test test 可以嘲笑吗myMethod 调用时返回其他内容junit usi
  • 使用 IntentService 使用 Camera2 拍照

    我正在尝试创建一个可以拍照但不显示预览的应用程序 使用本教程 https www youtube com watch v oPu42I0HSi4 https www youtube com watch v oPu42I0HSi4如果我使用和
  • 使用Keycloak保护Tomcat应用程序时出现HTTP 403禁止错误

    我为这个错误苦苦挣扎了一整天 我一遍又一遍地检查我在tomcat中Keycloak和APP的配置 没有发现错误 下图为测试场景 APP配置 1 Keycloak json是从Keycloak控制台复制的 2 context xml 也正确
  • 如何暂停程序直到按下按钮?

    我使用从 jframe 扩展的类 它有一个按钮 我在程序中使用它 我希望当在我的程序中运行 jframe 时我的整个程序暂停 直到我按下按钮 我该怎么做 in c getch 做这个 我想要一个这样的功能 通过睡眠暂停执行 http dow
  • 在 Java 中停止线程? [复制]

    这个问题在这里已经有答案了 我正在编写一段代码 该代码连接到服务器 使用该连接生成一堆线程并执行一堆 东西 在某些情况下 连接会失败 我需要停止一切并从头开始使用新对象 我想在对象之后进行清理 但在线程上调用 thread stop 但此方
  • Hazelcast Jet 变更数据捕获

    我在我的应用程序中使用 Hazelcast 更改数据捕获 CDC 我使用 CDC 的原因是 如果使用 jdbc 或其他替代功能将数据加载到缓存中 会花费大量时间 所以CDC将在数据库和 Hazelcast Jet 之间进行数据同步 Stre
  • Java GUI,根据actionListener更改面板

    我在两个不同的面板中添加了两个按钮 如果单击第一个按钮 则需要转到下一个面板 其中包含第二个按钮 但是当我单击第一个按钮时 该按钮没有被替换 Java GUI import java awt event ActionEvent import
  • Mac OSX 上使用 Java 7 的透明 JFrame/JWindow

    我们有一个屏幕共享小程序 它打开 Swing JFrame 并使用 Robot 类捕获空框架后面的屏幕 用户可以单击框架并与小程序后面的任何内容进行交互 这在 Windows 上运行良好 并且用于 Apple 的 Java 版本 但对于 M
  • 为什么ArrayList没有getSize()而不是size()?

    我在一些 JSP 页面中大量使用 ArrayList 我想像这样访问 ArrayList myArrayList size 但由于对象必须符合 JavaBean 标准 其中myArrayList getMyPropertyName is m
  • 查找前 N 个五边形数

    我必须找到第一个N pentagonal numbers 1 从 1 100 并每行显示 10 个 我必须使用getPentagonalNumber int n 方法也是如此 显然这就是它存在的原因 到目前为止 这是我的代码 package
  • 测试正确的时区处理

    我们正在处理大量数据 所有数据均以 UTC Java 语言 标记 在读取这些数据 将其存储在数据库中以及再次将其取出之间 发生了一些数据在夏令时期间关闭一小时的情况 由于 UTC 没有夏令时的概念 这显然是软件中的一个错误 一旦知道 就很容
  • 没有字符串参数构造函数/工厂方法可以从字符串值 ('') 反序列化

    我在使用时遇到了 json 解析问题ObjectMapper类来自com fasterxml jackson databind包 我得到的错误是 com fasterxml jackson databind JsonMappingExcep
  • Java 会话变量

    我听说有些人认为在会话中将信息存储在服务器上是一个坏主意 因为它不安全 因此 在多页面业务流程功能中 应用程序将数据写入数据库 然后在需要时检索信息 在会话中存储私人信息是否一定不安全 只要会话本身安全 在会话中存储属性就不存在安全风险劫持
  • Preg_split 用逗号,忽略括号,PHP

    我必须分割一个字符串 并且我想避免用括号内的逗号分割它 那么我该如何实现呢 Example string string1 sString1 sString2 ssString1 ssString2 string2 string3 resul
  • 使用 spring mvc 的多个域

    假设我有一个应用程序必须缩短 URL 但还要执行其他操作 喜欢google com and goo gl or facebook com and fb me 部署两个应用程序很容易 但 目前 仅部署一个应用程序更简单 使用 spring 和
  • 访问 JAR 资源

    我有一个jar包含我想要分发的资源 主要是缓存 日志记录等配置 的文件 我对这些资源的相对路径有问题 所以我做了我在另一个 stackoverflow 问题中发现的问题 该问题说这是一种有效的方法 ClassInTheSamePackage
  • 这种说法是否恰当。 if (0 != 表达式或变量) {} 在java中? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi

随机推荐

  • Google Maps API,InfoWindow domready 事件处理程序出错

    我正在信息信息窗口中设置一个表单 用于众包位置数据 我已经一切就绪并正在运行 但我试图在信息窗口弹出时将纬度和经度值复制到表单元素中 我在地图 div 上成功使用了其他事件侦听器 但是当我使用domready信息窗口的事件处理程序我收到错误
  • 是否可以使用 Java 格式化记忆棒、笔式驱动器或磁盘? [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我想创建一个多平台实用程序来格式化 擦除记忆棒 磁盘等 在Java中可以做到这一点吗 或者我是否需要为每个操作系统平台调用本机方法 这是非常特定于系统的 没有通用的方法来执行此操
  • 多个 if 语句的替代方案

    我的代码包含很多if声明 有没有其他方法可以摆脱这些陈述 例如假设我有以下条件 if t1 gt 1 t2 0 t3 0 div b class fadeIn if t1 0 t2 gt 1 t3 0 div c class fadeIn
  • 当选择选项时,Jquery 提交选择表单

    我有一个选择 有一个很长的列表 我可以在其中搜索它 使用 select2 jquery pluing 我的选择 using Html BeginForm ProjectList Client FormMethod Get new id cl
  • 在 JavaScript 中使异步事件同步

    我正在使用 WPF 3 5SP1 WebBrowser 控件来显示包含一些 javascript 函数的页面 然后我的程序需要调用一个 javascript 函数来进行异步调用 我需要一种方法将异步回调的结果返回到 C 以便我可以处理结果
  • 带有外键的 Django ModelForm

    我正在尝试创建一个ModelForm使用外键更新表 我所拥有的似乎有效 但我希望有人能告诉我是否有更好的方法来做到这一点 或者我在下面做的方式是否有问题 使用查询集是否正确Author and Genres桌子 感觉我应该在Book模型 并
  • R:当存在平局时,找到每行中具有最小值的列

    这是我的数据示例 gt dat lt matrix c 59 50 48 44 44 NA 78 59 42 67 51 NA 72 64 64 byrow TRUE ncol 3 gt k lt apply dat 1 function
  • 如何让 bash 脚本循环直到特定时间

    通常要运行无限 bash 循环 我会执行如下操作 while true do echo test sleep 1 done 相反 如果我想做一个只要早于 20 00 就无限循环的循环 该怎么办 有没有办法在 bash 中做到这一点 您可以使
  • 在 Android Gradle 构建之前执行任务?

    Gradle 是否可以在调用之前执行任务 gradle build 就像是precompile 请有人帮忙 这样的事情可能吗 如何实现 你可以这样做 task build lt lt println build task preBuild
  • SBT 0.13 中的任务定义不接受打印?

    我正在使用SBT0 13 1 项目 build properties如下 sbt version 0 13 1 执行中sbt about打印出以下内容 sbt info Loading global plugins from Users j
  • 访问子文件夹中的 m 文件,而不将其永久添加到路径中

    我已经下载了一个工具箱 其中有许多子文件夹中的许多文件 空间计量经济学工具箱 用于一个特定项目 我不想将其添加到路径中 因为我认为我不会养成使用它的习惯 而且我不知道它是否会隐藏函数统计工具箱 如何访问此工具箱中的功能 有没有办法以编程方式
  • 如何使用hibernate将图像存储到postgres数据库中

    我想使用 hibernate 和 Java 将图像存储到数据库中 我正在使用 postgres 数据库 I tried bytea存储图像的数据类型和byte hibernate pojo 中的数据类型 我使用了以下代码 CREATE TA
  • 寻找局部最大值和最小值

    我正在寻找一种计算有效的方法来查找 R 中大量数字的局部最大值 最小值 希望没有for循环 例如 如果我有一个像这样的数据文件1 2 3 2 1 1 2 1 我希望函数返回 3 和 7 它们是局部最大值的位置 diff diff x or
  • 在 VB.Net 中使用 LINQ 将集合拆分为 n 个部分

    Question 在 VB Net 中 如果我有一个像这样的集合 Dim collection As IEnumerable Of Integer Enumerable Range 0 99 我如何将它分成不确定数量的元素的组 可枚举的 状
  • Python Boto EC2 查找给定 IP 地址的实例

    在Python中使用boto 如何在给定IP地址的情况下找到boto ec2实例对象 boto3 ec2 boto3 client ec2 filters Name ip address Values 1 1 1 1 result list
  • 如何从SQL Server表中下载并查看图像?

    我有个问题 我想从 SQL Server 表下载并在浏览器中查看图像 我不知道该怎么办 My code public partial class IndexForm System Web UI Page protected void Pag
  • 如何从一个视图控制器访问另一个视图控制器的变量值?

    我有一个整数变量 time 在一个视图控制器中 我需要在另一个视图控制器中使用其值 这是代码 MediaMeterViewController TRP On Touch Down event start the timer IBAction
  • spring boot mvc:遵循示例后失败

    我正在关注链接https github com spring guides gs serving web content 签出文件后 将 gs serving web content complete 导入 IDEA 并运行 它运行成功 但
  • 从 UIImagePickerController 获取图像后,UIImageView 旋转 iPhone 5 的图像

    我正在使用 UIImagePickerController 使用相机捕获图像 我的应用程序支持的方向是纵向 我发现 iPhone 5 出现奇怪的行为 我使用的是 Xcode 7 和 swift 2 0 iPhone 5操作系统版本是8 4
  • 如何限制 TextField 使其只能包含一个“.”特点? JavaFX

    在互联网上 我发现非常有用的类 使用它我可以限制 TextField 我遇到一个问题 我的 TextField 只能包含一个 特点 我怀疑我可以通过编写适当的正则表达式并将其设置为对该类实例的限制来处理此问题 我使用以下正则表达式 0 9