2012-11-24 13 views
6

Mam pytanie. Stworzyłem formularz GUI Swing. Ten formularz zawiera składniki JTextFields, JComboBox.Sprawdzanie poprawności wszystkich pól w GUI Swing

Teraz, co chcę zrobić, gdy użytkownik naciskając ukończył przycisk chcę sprawdzić poprawność składni JTextFields i JComboBox. Chcę napisać wspólną metodę dla wszystkich JTextFields i innej wspólnej metody dla JComboBoxes. Czy ktoś wie o sprawdzeniu poprawności interfejsu API?

Nie muszę sprawdzać wszystkich pól jeden po drugim.

+0

co ty co oznacza, Siema (walidacji. w pojemniku, wartość z, E.I. ???) – mKorbel

+0

Próbowałaś fotografia narzędzi? –

+0

Możesz zajrzeć do [powiązania JGoodes] (http://www.jgoodies.com/freeware/libraries/binding/) – MadProgrammer

Odpowiedz

5

Jeśli „zatwierdzenie” oznacza „sprawdzić wszystkie pola” ... wtedy, tak - twój „zatwierdź” rutyna sprawdzi wszystkie pola jeden po drugim :)

Można również „zatwierdź-as -ty idź". Istnieje wiele sposobów, aby to osiągnąć, w tym:

+0

Myślę, że API sprawdzania poprawności Kenai jest przydatne. Dziękuję wszystkim. – mtchinthaka

0

To niemożliwe. Zamiast tego będziesz musiał utworzyć nową klasę, która dziedziczy JTextField, a następnie będzie mieć funkcję validate() jako private lub protected i wywoływać za każdym razem, gdy będziesz getText() (co oznacza, że ​​będziesz musiał) z niego.

Alternatywnym rozwiązaniem jest użycie Container.getComponent() i sprawdzenie pod kątem instanceof, a następnie sprawdzenie każdego pola osobno. Jest to jednak sprzeczne z tym, o co prosisz.

6

One Opcją tutaj byłoby użycie Swinga InputVerifier do sprawdzenia poprawności danych wejściowych dla każdego JComboBox & JTextField używane. Można dzielić wspólne weryfikatorów między elementami:

public class MyNumericVerifier extends InputVerifier { 
     @Override 
     public boolean verify(JComponent input) { 
      String text = null; 

      if (input instanceof JTextField) { 
      text = ((JTextField) input).getText(); 
      } else if (input instanceof JComboBox) { 
      text = ((JComboBox) input).getSelectedItem().toString(); 
      } 

      try { 
       Integer.parseInt(text); 
      } catch (NumberFormatException e) { 
       return false; 
      } 

      return true; 
     } 

     @Override 
     public boolean shouldYieldFocus(JComponent input) { 
      boolean valid = verify(input); 
      if (!valid) { 
       JOptionPane.showMessageDialog(null, "Invalid data"); 
      } 

      return valid; 
     } 
    } 

InputVerifier verifier = new MyNumericVerifier() 
comboBox.setInputVerifier(verifier); 
+0

+1 Możesz przekazać informację zwrotną w 'shouldYieldFocus()', na [przykład] (http://stackoverflow.com/a/13510756/230513). – trashgod

Powiązane problemy