My JTable
does not save the information when there is focus on the cell.
In order to effectively save the information I need to manually focus and then click the "Register" button.
How can I make this process automatic, every time I click the "Register" button, it already removes the focus from the table and saves information?
Remembering I've tried:
jtable.setFocusable(false);
jtable.putClientProperty("terminateEditOnFocusLost", Boolean.TRUE);
I'm working with a Model that I've remodeled from a AbstractJTableModel
, I'll be dropping below:
public class JTreeTableModelMembro extends AbstractTreeTableModel {
static protected String[] cNames;
static protected Class[] cTypes = { TreeTableModel.class, String.class,
String.class };
private ArrayList<Membro> linhas = new ArrayList<Membro>();
public JTreeTableModelMembro(Membro root, String[] cNames) {
super(root);
this.cNames = cNames;
this.setMembro(root);
}
private void setMembro(Membro root) {
for (Object grupoObjeto : root.getChildren()) {
Membro cl = (Membro) grupoObjeto;
this.linhas.add(null);
for (Object objeto : cl.getChildren()) {
this.linhas.add((Membro) objeto);
}
}
}
public ArrayList<Membro> getListaDeMembro() {
ArrayList<Membro> lista = new ArrayList<Membro>();
for(Membro objeto : this.linhas) {
if(objeto != null) {
lista.add(objeto);
}
}
return lista;
}
public Membro getMembro(int indiceLinha) {
return linhas.get(indiceLinha);
}
protected Membro getMembro(Object node) {
Membro objeto = ((Membro) node);
return objeto;
}
protected Object[] getChildren(Object node) {
Membro fileNode = ((Membro) node);
return fileNode.getChildren();
}
public void setRoot(Membro root) {
if (this.root != root) {
this.root = root;
this.setMembro(root);
fireTreeStructureChanged(this, new Object[] { root }, null, null);
}
}
public void limpar() {
this.root = new Membro();
}
@Override
public Class getColumnClass(int column) {
return cTypes[column];
}
@Override
public Object getChild(Object node, int i) {
return getChildren(node)[i];
}
@Override
public int getChildCount(Object node) {
Object[] children = getChildren(node);
return (children == null) ? 0 : children.length;
}
@Override
public int getColumnCount() {
return cNames.length;
}
@Override
public String getColumnName(int column) {
return cNames[column];
}
@Override
public Object getValueAt(Object node, int column) {
Membro objeto = getMembro(node);
switch (getColumnName(column)) {
case "Descrição":
return objeto.getTituloMembro();
case "Medida":
return objeto.getMembroMedida();
case "Tipo Medida":
return objeto.getTipoMedida();
default:
throw new IndexOutOfBoundsException("columnIndex out of bounds");
}
}
@Override
public boolean isCellEditable(int rowIndex, int column) {
Membro objeto = getMembro(rowIndex);
switch (getColumnName(column)) {
case "Descrição":
return true;
case "Medida":
return objeto == null ? false : true;
case "Tipo Medida":
return false;
default:
return false;
}
}
@Override
public void setValueAt(Object aValue, Object node, int column) {
Membro objeto = this.getMembro(node);
switch(getColumnName(column)) {
case "Medida":
if(aValue != null && !aValue.toString().isEmpty()) {
objeto.setMembroMedida(new BigDecimal(aValue.toString()));
} else {
objeto.setMembroMedida(new BigDecimal(0));
}
}
}
}