Bom, eu até consegui que, ao entrar com algo que não fosse Double o campo ficasse vermelho e tal… só que quando eu digito números e dou enter, o número não fica na célula. Seguem as classes:
////////////////////////////////////////////////////////// CELLEDITOR
public class MyTableDoubleCellEditor extends AbstractCellEditor implements TableCellEditor{
// This is the component that will handle the editing of the cell value
private JComponent component = new MyTextFieldDouble(3,3);
// This method is called when editing is completed.
// It must return the new value to be stored in the cell.
@Override
public Object getCellEditorValue() {
return ((JTextField)component).getText();
}
@Override
public Component getTableCellEditorComponent(JTable table, Object value,
boolean isSelected, int row, int column) {
// 'value' is value contained in the cell located at (rowIndex, vColIndex)
if (isSelected) {
// cell (and perhaps other cells) are selected
}
// Configure the component with the specified value
((MyTextFieldDouble)component).setText((String)value);
// Return the configured component
return component;
}
}
////////////////////////////////////////////////////////// TABLE MODEL
public class MyValRefTableModel extends AbstractTableModel {
private static final long serialVersionUID = 1L;
/* Lista de Vetores de Strings que representam as linhas. */
private List<String[]> linhas;
/* Array de Strings com o nome das colunas. */
private String[] colunas = new String[] {
"Idade/Sexo", "CE (M\u00EDn.)", "CE (Máx.)", "Hb (M\u00EDn.)", "Hb (Máx.)", "Htc (M\u00EDn.)",
"Htc (Máx.)", "VCM (M\u00EDn.)", "VCM (Máx.)", "HCM (M\u00EDn.)", "HCM (Máx.)",
"CHCM (M\u00EDn.)", "CHCM (Máx.)"
};
/* CONSTRUTOR */
public MyValRefTableModel() {
linhas = new ArrayList<String[]>();
}
/* Retorna a quantidade de colunas. */
@Override
public int getColumnCount() {
// Está retornando o tamanho do array "colunas".
return colunas.length;
}
/* Retorna a quantidade de linhas. */
@Override
public int getRowCount() {
// Retorna o tamanho da lista de Vetores de Strings.
return linhas.size();
}
@Override
public String getColumnName(int columnIndex) {
// Retorna o conteúdo do Array que possui o nome das colunas
return colunas[columnIndex];
}
;
@Override
public Class<?> getColumnClass(int columnIndex) {
if(columnIndex > 0)
return Double.class;
else
return String.class;
};
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
String[] dados = linhas.get(rowIndex);
// Retorna o campo referente a coluna especificada.
// Aqui é feito um switch para verificar qual é a coluna
// e retornar o campo adequado. As colunas sãoas mesmas
// que foram especificadas no array "colunas".
switch (columnIndex) {
// Seguindo o exemplo: "Tipo","Data de Cadastro", "Nome", "Idade"};
case 0:
return dados[0];
case 1:
return dados[1];
case 2:
return dados[2];
case 3:
return dados[3];
case 4:
return dados[4];
case 5:
return dados[5];
case 6:
return dados[6];
case 7:
return dados[7];
case 8:
return dados[8];
case 9:
return dados[9];
case 10:
return dados[10];
case 11:
return dados[11];
case 12:
return dados[12];
default:
// Isto não deveria acontecer...
throw new IndexOutOfBoundsException("columnIndex out of bounds");
}
}
//modifica na linha especificada
public void setValueAt(String[] aValue, int rowIndex) {
String[] dados = linhas.get(rowIndex); // Carrega o item da linha que deve ser modificado
dados[0] = aValue[0];
dados[1] = aValue[1];
dados[2] = aValue[2];
dados[3] = aValue[3];
dados[4] = aValue[4];
dados[5] = aValue[5];
dados[6] = aValue[6];
dados[7] = aValue[7];
dados[8] = aValue[8];
dados[9] = aValue[9];
dados[10] = aValue[10];
dados[11] = aValue[11];
dados[12] = aValue[12];
fireTableCellUpdated(rowIndex, 0);
fireTableCellUpdated(rowIndex, 1);
fireTableCellUpdated(rowIndex, 2);
fireTableCellUpdated(rowIndex, 3);
fireTableCellUpdated(rowIndex, 4);
fireTableCellUpdated(rowIndex, 5);
fireTableCellUpdated(rowIndex, 6);
fireTableCellUpdated(rowIndex, 7);
fireTableCellUpdated(rowIndex, 8);
fireTableCellUpdated(rowIndex, 9);
fireTableCellUpdated(rowIndex, 10);
fireTableCellUpdated(rowIndex, 11);
fireTableCellUpdated(rowIndex, 12);
};
@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
return false;
}
public String[] getDados(int indiceLinha) {
return linhas.get(indiceLinha);
}
/* Adiciona um registro. */
public void addDados(String[] m) {
// Adiciona o registro.
linhas.add(m);
int ultimoIndice = getRowCount() - 1;
fireTableRowsInserted(ultimoIndice, ultimoIndice);
}
/* Remove a linha especificada. */
public void removeDados(int indiceLinha) {
linhas.remove(indiceLinha);
fireTableRowsDeleted(indiceLinha, indiceLinha);
}
/* Adiciona uma lista de Vetores de Strings ao final dos registros. */
public void addListaDeDados(List<String[]> dados) {
// Pega o tamanho antigo da tabela.
int tamanhoAntigo = getRowCount();
// Adiciona os registros.
linhas.addAll(dados);
fireTableRowsInserted(tamanhoAntigo, getRowCount() - 1);
}
/* Remove todos os registros. */
public void limpar() {
linhas.clear();
fireTableDataChanged();
}
/* Verifica se este table model esta vazio. */
public boolean isEmpty() {
return linhas.isEmpty();
}
}
////////////////////////////////////////////////////////// COMO ESTOU COLOCANDO NA TABELA
MyValRefTableModel modelo = new MyValRefTableModel();
modelo.addDados(new String[]{"Nascimento (cordão)", "","","","","","","","","","","",""});
modelo.addDados(new String[]{"1 a 3 dias", "","","","","","","","","","","",""});
modelo.addDados(new String[]{"1 semana", "","","","","","","","","","","",""});
modelo.addDados(new String[]{"2 semanas", "","","","","","","","","","","",""});
modelo.addDados(new String[]{"1 mês", "","","","","","","","","","","",""});
modelo.addDados(new String[]{"3 a 6 meses", "","","","","","","","","","","",""});
modelo.addDados(new String[]{"6 meses a 2 anos", "","","","","","","","","","","",""});
modelo.addDados(new String[]{"2 a 6 anos", "","","","","","","","","","","",""});
modelo.addDados(new String[]{"6 a 12 anos", "","","","","","","","","","","",""});
modelo.addDados(new String[]{"(F) entre 12 e 18 anos", "","","","","","","","","","","",""});
modelo.addDados(new String[]{"(M) entre 12 e 18 anos", "","","","","","","","","","","",""});
modelo.addDados(new String[]{"(F) entre 18 e 49 anos", "","","","","","","","","","","",""});
modelo.addDados(new String[]{"(M) entre 18 e 49 anos", "","","","","","","","","","","",""});
tabela.setCellEditor(new MyTableDoubleCellEditor());
tabela.setModel(modelo);