2013-09-25 3 views
1

Я установил вход верификатор в мое текстовом поле:JTextField InputVerifier

public class MyInputVerifier extends InputVerifier { 
@Override 
public boolean verify(JComponent input) { 
    String text = ((JTextField) input).getText(); 
    try { 
     BigDecimal value = new BigDecimal(text); 
     return (value.scale() <= Math.abs(4)); 
    } catch (NumberFormatException nfe) { 
     return false; 
    } 
} 

public static class Tester extends JFrame implements ActionListener { 
    JTextField tf1; 
    JButton okBtn; 

    public Tester() { 
     add(panel(), BorderLayout.CENTER); 

     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setSize(400, 500); 
     setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       new Tester(); 
      } 
     }); 
    } 

    public JPanel panel() { 
     JPanel panel = new JPanel(); 
     okBtn = new JButton("Ok"); 
     okBtn.addActionListener(this); 
     tf1 = new JTextField(10); 
     tf1.setInputVerifier(new MyInputVerifier()); 
     panel.add(tf1); 
     panel.add(okBtn); 
     return panel; 
    } 

    @Override 
    public void actionPerformed(ActionEvent e) { 
     MyInputVerifier inputVerifier = new MyInputVerifier(); 
     if (e.getSource() == okBtn) { 
      if (inputVerifier.verify(tf1)) JOptionPane.showMessageDialog(null, "True"); 
      else JOptionPane.showMessageDialog(null,"False"); 
     } 
    } 
} 
} 

входит 55555 на текстовом поле и показать true, почему?

+0

Вы действительно хотите, чтобы сравнить масштаб значения или самого значения? –

ответ

6

Из javadoc

Если ноль или положительное, масштаб количество цифр справа от десятичной точки.

55555 могут быть представлены без масштабирования, чтобы его масштаб равен нулю ->0 < 4 который true

Я подозреваю, что вы хотите сравнить с числовым значением

return (value.compareTo(BigDecimal.valueOf(4)) <= 0); 
Смежные вопросы