【问题标题】:Java 8 U40 TextFormatter (JavaFX) to restrict user input only for decimal numberJava 8 U40 TextFormatter (JavaFX) 仅限制用户输入十进制数
【发布时间】:2015-09-11 09:59:58
【问题描述】:

我正在寻找一个示例,以使用 Java8 u40 的新类 TextFormatter 将用户输入限制为仅数字和小数点。 http://download.java.net/jdk9/jfxdocs/javafx/scene/control/TextFormatter.Change.html

【问题讨论】:

    标签: javafx java-8 javafx-8


    【解决方案1】:

    请看这个例子:

    DecimalFormat format = new DecimalFormat( "#.0" );
    
    TextField field = new TextField();
    field.setTextFormatter( new TextFormatter<>(c ->
    {
        if ( c.getControlNewText().isEmpty() )
        {
            return c;
        }
    
        ParsePosition parsePosition = new ParsePosition( 0 );
        Object object = format.parse( c.getControlNewText(), parsePosition );
    
        if ( object == null || parsePosition.getIndex() < c.getControlNewText().length() )
        {
            return null;
        }
        else
        {
            return c;
        }
    }));
    

    【讨论】:

    • 有什么推荐的书吗?我还是 Java 新手,需要更多解释。我查看了“Java The Complete Reference Ninth Edition”,但没有发现与此相关的内容。我什至找不到replaceText 和replaceSelection 的用法。我不确定我是不是找错地方了,我在哪里可以找到一些关于 replaceText/Selection 的读物?
    • 只有关于 JavaFX 的单独书籍。所以先读一本关于 Java 的书,然后再读一本关于 JavaFX 的书。如果您了解其他编程语言,如 C/C++ 或 C#,那么您也可以轻松学习 Java。顺便说一句,我没有在答案中使用 replaceText/Selection ,但您正在询问它。这有点断章取义。尽管如此,请参阅this searches。这是我的帖子回答你的问题吗?
    • 是的,确实如此。再次感谢您对我的 cmets 的跟进。
    • java 自带的格式化程序不太适合这种事情。例如,我不能以负号开头输入,但可以稍后返回并添加。因此,stackoverflow.com/a/40472822/2331302 是一个更好的答案
    • 接受负十进制数的模式是什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-15
    • 1970-01-01
    • 1970-01-01
    • 2020-03-28
    • 1970-01-01
    相关资源
    最近更新 更多