2010-11-21 20 views
1

jTextField için bir InputVerifier sahibinin girişinin tam sayı olup olmadığını kontrol etmek ve görmek için var. Değilse, onu son iyi değere geri döndürmek istiyorum. Buna nasıl yaparım? İşte ben bugüne kadar kodudur:jTextField 'i son iyi değere dönüştürün

class IntegerVerifier extends InputVerifier { 

    public boolean verify(JComponent input) { 
      JTextField text = (JTextField)input; 
      String old = text.getText(); 
     try { 
      Integer.parseInt(text.getText().trim()); 
     } catch (NumberFormatException e) { 
      // this does not work b/c input is not a TextField 
      input.setText(old); 
     } 
     return true; 
    } 

} 

DÜZENLEME: Aşağıda Ben çözüm olarak kullanarak sona erdi budur. İlk başta bunu denedim, ama işe yaramadı. Hatanın testte olduğunu keşfettim. Gui'yi başlattıktan hemen sonra metin alanını geçersiz bir değere çevirmeyi denedim, ancak alanı boşaltıyordu. Ancak, metin alanı, gui başladığı anda odaklanmıştı, yani başlangıç ​​değeri boştu. Sonraki değişiklikler beklendiği gibi davranır.

class IntegerVerifier extends InputVerifier { 
    public boolean verify(JComponent input) { 
     JTextField text = (JTextField) input; 
     String old = text.getText(); 
     try { 
      Integer.parseInt(text.getText().trim()); 
     } catch (NumberFormatException e) { 
      text.setText(old); 
      //return false; // don't use this otherwise it won't revert the value 
     } 
     return true; 
    } 
} 

cevap

1

Sorunuz, kodunuzdaki yorumların farklı bir soruna işaret ediyor. Geçerli değeri geçersizse eski değeri, doğrulandıktan ve geri döndürmeniz gerekir. text.setText()'u ve input.setText()'u aramamalısınız. Böyle bir şey:

class IntegerVerifier extends InputVerifier { 
    String lastGood = ""; 
    public boolean verify(JComponent input) { 
     JTextField text = (JTextField)input; 
     String value = text.getText().trim(); 
     try { 
      Integer.parseInt(value); 
      lastGood = value; 
     } catch (NumberFormatException e) { 
      text.setText(lastGood); 
      // assumed it should return false 
      return false; 
     } 
     return true; 
    } 
} 
0

Aksine JComponent geçen daha sadece dize değeri geçirir.

İlgili konular