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?
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;
}
}