Java 8 U40 TextFormatter (JavaFX)用于限制用户输入仅为十进制数。

13
1个回答

23
请参考以下示例:
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完全参考第九版》,但是没找到相关内容。我甚至在里面找不到replaceText和replaceSelection的用法。我不确定我是不是在错误的地方寻找,那么在哪里可以找到关于replaceText/Selection的阅读材料呢? - Moe
2
有关JavaFX的书籍是单独存在的。因此,先阅读一本关于Java的书籍,然后再学习JavaFX。如果您了解其他编程语言,如C/C++或C#,那么您也可以轻松学习Java。顺便说一句,我在答案中没有使用replaceText/Selection,但您正在询问它。这有点脱离上下文。尽管如此,请参见这些搜索结果。这篇文章是否回答了您的问题? - Uluk Biy
是的,确实如此。再次感谢您对我的评论的跟进。 - Moe
2
Java自带的格式化工具对于这种情况并不是很好。例如,我无法在开始时输入负号,但稍后可以回去添加它。因此,https://dev59.com/J1kS5IYBdhLWcg3wCCbf#40472822 是一个更好的答案。 - David Fisher
接受负小数的模式是什么? - golimar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接