2015-04-22 75 views
-1

我想验证JTextField的整数值。我想确保用户只能在设定范围之间输入整数值。我试着用JFormattedTextField工作,但到目前为止没有运气。JTextField整数验证

+2

1)考虑使用'JSpinner'和['SpinnerNumberModel']](https://docs.oracle.com/javase/8/docs/api/javax/swing/SpinnerNumberModel.html)。 2)*“迄今为止没有运气”*编程不是关于'运气'。为了更快地获得更好的帮助,请发布[MCVE](http://stackoverflow.com/help/mcve)(最小完整可验证示例)或[SSCCE](http://www.sscce.org/)(Short,Self Contained ,正确的例子)你的尝试。 –

+0

1)谢谢你的答复。2)迄今为止,没有运气是一个表达意思,我一直在尝试没有工作,因此我的问题的原因。 –

+1

*“没有运气是一种表达”*我意识到这一点。海事组织,它不应该用于计算问题,保存它,因为当你在狗的轨道。但超越这一点,并转到该评论的重要部分 - 发布MCVE! –

回答

0

一个不错的选择是使用InputVerifier - 除非满足输入条件,否则您的文本字段将不会产生焦点。 A 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); 
    } 
} 

尝试进入各种输入到最上面的一个后焦点切换到底部文本字段。

+0

真棒谢谢我终于找到了另一种方式,但这也是一个好主意。感谢您的回应。 –

+0

@JustyneTesterman然后你应该发布你的解决方案并接受它(之后)。 – user1803551

+0

我会当我得到足够高的大声笑 –