Znalazłem na forum poniższą formę walidacji JTextFielda:
class NumberDocument extends PlainDocument{
private static final long serialVersionUID = 1L;
public void insertString(int position, String string, AttributeSet a) throws BadLocationException{
if(string == null) return;
if(isValid(string))
super.insertString(position, string, a);
}
public static boolean isValid(String string){
try{
Integer.parseInt(string);
return true;}
catch(NumberFormatException e){
return false;}
}
}
class NumberField extends JTextField{
private static final long serialVersionUID = 1L;
public NumberField(int defaultValue){
super(String.valueOf(defaultValue));}
protected Document createDefaultModel(){
return new NumberDocument();}
}
Działa ona na zasadzie widok -> sterownik -> model. Każdy komponent ma swój sterownik i zanim modyfikacje wykonane w modelu pojawią się w widoku można je wychwycić w sterowniku (tu PlainDocument). Jak to jednak zrobić w JComboBoxie ? Nie chce tego robić w tak naciągany sposób jak jest to proponowane przy użyciu InputVerifiera. Chciałbym w edytowalnym JComboBoxie zrobić taką walidację, która zwyczajnie uniemożliwia stworzenie błędnego łańcucha już w trakcie próby jego napisania.