JTable does not save information when there is focus on cell [closed]

4

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));
            }
       }
   }
}
    
asked by anonymous 22.09.2014 / 21:06

1 answer

1

Try using repaint ()

jtable.repaint(); 
    
06.11.2014 / 04:50