首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在JavaFX中制作数字TextField的推荐方法是什么?

在JavaFX中制作数字TextField的推荐方法是什么?
EN

Stack Overflow用户
提问于 2011-09-26 21:10:03
回答 19查看 162.5K关注 0票数 91

我需要将TextField中的输入限制为整数。有什么建议吗?

EN

回答 19

Stack Overflow用户

回答已采纳

发布于 2015-06-12 14:43:49

非常旧的线程,但这似乎更整洁,并剥离了非数字字符,如果粘贴。

代码语言:javascript
复制
// force the field to be numeric only
textField.textProperty().addListener(new ChangeListener<String>() {
    @Override
    public void changed(ObservableValue<? extends String> observable, String oldValue, 
        String newValue) {
        if (!newValue.matches("\\d*")) {
            textField.setText(newValue.replaceAll("[^\\d]", ""));
        }
    }
});
票数 135
EN

Stack Overflow用户

发布于 2013-09-23 20:36:20

我知道这是一个相当古老的主题,但对于未来的读者来说,这是另一个我发现非常直观的解决方案:

代码语言:javascript
复制
public class NumberTextField extends TextField
{

    @Override
    public void replaceText(int start, int end, String text)
    {
        if (validate(text))
        {
            super.replaceText(start, end, text);
        }
    }

    @Override
    public void replaceSelection(String text)
    {
        if (validate(text))
        {
            super.replaceSelection(text);
        }
    }

    private boolean validate(String text)
    {
        return text.matches("[0-9]*");
    }
}

编辑:感谢none_SCBoy提出的改进建议。

票数 43
EN

Stack Overflow用户

发布于 2016-04-06 04:18:52

从JavaFX 8u40开始,您可以在文本字段上设置TextFormatter对象:

代码语言:javascript
复制
UnaryOperator<Change> filter = change -> {
    String text = change.getText();

    if (text.matches("[0-9]*")) {
        return change;
    }

    return null;
};
TextFormatter<String> textFormatter = new TextFormatter<>(filter);
fieldNport = new TextField();
fieldNport.setTextFormatter(textFormatter);

这避免了子类化和重复的更改事件,当您将更改侦听器添加到text属性并修改该侦听器中的文本时,您将获得这些事件。

票数 40
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7555564

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档