2012-11-24 19 views
6

Ho una domanda. Ho creato un modulo GUI Swing. Questo modulo contiene componenti JTextFields, JComboBox.Convalida tutti i campi nella GUI Swing

Ora cosa voglio fare, quando l'utente preme il tasto completato voglio convalidare JTextFields e il componente JComboBox. Voglio scrivere un metodo comune per tutti i JTextFields e un altro metodo comune per JComboBoxes. Qualcuno sa sull'API di convalida?

Non ho bisogno di convalidare tutti i campi uno per uno.

+0

che cosa significa, che cosa è convalide (. In contenitore, valore da, E.I. ???) – mKorbel

+0

Hai provato Commons strumenti? –

+0

Si potrebbe dare un'occhiata a [JGoodes bindings] (http://www.jgoodies.com/freeware/libraries/binding/) – MadProgrammer

risposta

0

Questo non è possibile. Dovrai invece creare una nuova classe che erediti il ​​JTextField e quindi avere una funzione validate() come private o protected e chiamarla ogni volta che lo fai getText() (il che significa che dovrai farlo @Override).

Un supplente è utilizzare Container.getComponent() e verificare instanceof e quindi convalidare ciascun campo separatamente. Questo però è contro ciò che stai chiedendo.

1

ci sono alcune terze parti disponibili api. È possibile sviluppare il proprio per

  1. Campo obbligatorio,
  2. Email di convalida,
  3. lunghezza
  4. Max & Min, ecc,

Ecco un tutorial di esempio per Building a Swing Validation Package with InputVerifier

+1

Vedere anche questo 'JTable' relativo [esempio] (http://stackoverflow.com/a/13510756/230513). – trashgod

6

One l'opzione qui sarebbe quella di utilizzare Swing InputVerifier per convalidare l'input per ogni JComboBox & JTextField usato. Si potrebbe condividere verificatori comuni tra i componenti:

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 È possibile fornire un feedback in 'shouldYieldFocus()', per [esempio] (http://stackoverflow.com/a/13510756/230513). – trashgod

Problemi correlati