Bloquear coluna para digitação de texto

alguém sabe me dizer pq não consigo colocar coluna acima de 3? sempre q coloco da o seguinte erro
"Exception in thread “AWT-EventQueue-0” java.lang.ArrayIndexOutOfBoundsException: 30 >= 4"

TableColumn col = tabela.getColumnModel().getColumn(1);
col.setCellEditor(new MyTableCellEditor());
class MyTableCellEditor extends AbstractCellEditor
  implements TableCellEditor{
  JComponent component = new JTextField();
  public boolean stopCellEditing(){
    String s = (String)getCellEditorValue();
    boolean valido = true;
    for(int i = 0; i < s.length(); i++){
      Character caractere = s.charAt(i);
      if(!Character.isDigit(caractere)){
        valido = false;
        break;
      }
    }    
    if(!valido){
      JOptionPane.showMessageDialog(null, 
         "Valor inválido");
      return false; 
    }
    return super.stopCellEditing();
  }
  public Component getTableCellEditorComponent(
    JTable table, Object value,
    boolean isSelected, int rowIndex, int vColIndex){
    if(isSelected){
      //
    }
    ((JTextField)component).setText((String)value);
    return component;
  }
  public Object getCellEditorValue() {
    return ((JTextField)component).getText();
  }
}

Você está tentando acessar um index que não existe.
Ex array com cinco posições e você tenta acessar a sexta.
Resultado: ArrayIndexOutOfBoundsException.
Na saída do erro, veja a linha com problema, marque um nível acima e um abaixo e use o debug para ver quais elementos estão sendo manipulados.

Addller, fiz como você disse e resolvi o problema. eu peguei esse código na net e ele só aceita numeros inteiro… preciso tipo float, será q vc poderia me ajudar?

mais alguém poderia me ajudar?

Eu não sou desenvolvedor, por isso, não tenho conhecimento sobre a implementação deste método além de outras coisas, mas pelo que percebi, ele precisa retornar apenas verdadeiro, ou falso, assim, um try chatch resolve.
O ideal seria utilizar regex, mais tem o problema da PatternSyntaxException.

    @Override
    public boolean stopCellEditing() {        
        try {
            Float.parseFloat(getCellEditorValue().toString());//tem o Double.parseDouble(string), use de acordo com sua necessidade
            return true;
        } catch (NumberFormatException e) {
            return false;
        }
    }

Té+

resolvido com

> if (!caractere.equals('.')) {