【问题标题】:JTextField Validation with integers使用整数进行 JTextField 验证
【发布时间】:2015-06-29 11:32:42
【问题描述】:

我正在尝试验证来自JTextField 的整数值。我想确保用户只输入设定范围之间的整数值。我尝试使用JFormattedTextField,但到目前为止还没有运气。

【问题讨论】:

  • 1) 考虑改用JSpinnerSpinnerNumberModel。 2) “.. 到目前为止没有运气” 编程不是关于“运气”。为了尽快获得更好的帮助,请发布您尝试的MCVE(最小完整可验证示例)或SSCCE(简短、自包含、正确示例)。
  • 1)感谢您的回复..2)到目前为止,没有运气是一种表达方式,意味着我一直在尝试的东西没有奏效,因此是我提出问题的原因。
  • “没有运气是一种表达” 我知道这一点。 IMO 它永远不应该用于计算问题,当你在狗轨道上时保存它。但要超越这一点,继续讨论该评论的重要部分 - 发布 MCVE!
  • 争论你的观点是没有意义的,因为它就是这样。我仍在处理我的代码,所以目前没有任何有意义的东西可供人们审查和提供意见。

标签: java swing int jtextfield jformattedtextfield


【解决方案1】:

一个不错的选择是使用InputVerifier - 除非满足输入条件,否则您的文本字段不会产生焦点。 JFormattedTextField 在这里不行,因为您的限制不仅是格式,还有数学。

public class NumRange extends JFrame {

    public static void main(String[] args) {

        new NumRange();
    }

    NumRange() {

        final int MIN = 0;
        final int MAX = 100;

        JTextField textField = new JTextField();
        textField.setInputVerifier(new InputVerifier() {

            @Override
            public boolean verify(JComponent input) {
                String text = ((JTextField) input).getText();
                int num;
                try {
                    num = Integer.parseInt(text);
                } catch (NumberFormatException e) {
                    return false;
                }
                if (num <= MAX && num >= MIN)
                    return true;
                return false;
            }
        });

        getContentPane().add(textField);
        getContentPane().add(new JTextField(), BorderLayout.PAGE_END);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        pack();
        setVisible(true);
    }
}

在顶部输入各种输入后,尝试将焦点切换到底部文本字段。

【讨论】:

  • 太棒了,谢谢我最终找到了另一种方法,但这也是一个好主意。感谢您的回复。
  • @JustyneTesterman 然后你应该发布你的解决方案并接受它(之后)。
猜你喜欢
  • 1970-01-01
  • 2017-07-20
  • 2012-01-25
  • 2013-02-20
  • 1970-01-01
  • 2012-12-31
  • 1970-01-01
  • 2012-12-28
  • 2020-11-19
相关资源
最近更新 更多