1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Atualizar alguns campos do JTable utlizando o proprio TabelModel

Olá pessoal pesquisei muito aqui no forum e não consegui entender como atualizar algumas células do Jtable, segui as recomendações do forum e fiz o meu próprio tabelModel poram não estou conseguindo entender como vou fazer para atualizar 2 colunas do JTable. O processo é o seguinte, eu recupero as informações do banco de dados e quero atualizar 2 colunas que vem em branco como default, eu digito o valor no campo do jtable e quando saio do campo ele ja apaga. Abaixo o código do meu tabelModel

package sistemaGerencial.tabelModel;

import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.swing.table.AbstractTableModel;
import sistemaGerencial.model.OrdemServicoDTO;

/**
 *
 * @author shodaime
 */
public class TabelModelColaboradorOrdemServ extends AbstractTableModel {

    private List<OrdemServicoDTO> dataset;
    // Constante que defini o nome das colunas  

    private static final String[] col = {"Codigo", "Colaborador", "Data Inicial", "Hora inicial", "Data Final", "Hora Final"};

    // Construtor da classe recebe os dados a ser populado  
    public TabelModelColaboradorOrdemServ(List<OrdemServicoDTO> bean) {
        dataset = new ArrayList<OrdemServicoDTO>(bean);
        fireTableStructureChanged();
    }

    public TabelModelColaboradorOrdemServ() {
        dataset = new ArrayList<OrdemServicoDTO>();
        fireTableStructureChanged();
    }

    // Método sobrescrito que retorna o número de linhas do JTable, após populado  
    @Override
    public int getRowCount() {
        return dataset.size();
    }

    // Método sobrescrito que retorna o número de colunas do JTable após populado  
    @Override
    public int getColumnCount() {
        return col.length;
    }

    // Método sobrescrito que vai popular e retornar cada célula do JTable  
    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        OrdemServicoDTO cbean = dataset.get(rowIndex);
        Object row = null;
        switch (columnIndex) {

            case 0:
                row = cbean.getIdColaborador();
                break;
            case 1:
                row = cbean.getNomeColaborador();
                break;
            case 2:
                SimpleDateFormat formata = new SimpleDateFormat("dd/MM/yyyy");
                row = formata.format(cbean.getDataInicioExe());

                break;
            case 3:

                row = cbean.getHoraInicial();
                break;
            case 4:
                SimpleDateFormat formata2 = new SimpleDateFormat("dd/MM/yyyy");
                row = formata2.format(cbean.getDataFinalExe());
                break;
            case 5:
                row = cbean.getHoraFinal();
                break;
            case 6:
                row = cbean.getIdOrdemServExec();
                break;

        }
        return row;
    }

    /* Este método sobrescrito, defini se o JTable será editável ou não. 
     Voce pode definir qual coluna de qual linha será editável. Caso voce 
     defina que o seu JTable seja editável, então é necessário definir também 
     o método "setValueAt" que vem logo a seguir,  caso contrário, é só retornar 
     false para todas as linhas e colunas, como definido abaixo. */
    @Override
    public boolean isCellEditable(int rowIndex, int columnIndex) {

        if (columnIndex == 4) {
            return true;
        }
        if (columnIndex == 5) {
            return true;
        } else {
            return false;
        }
        //return true; 
        //return false;
    }

    /* Este método sobrescrito, permite voce editar o JTable, caso o método anterior 
     tenha algumas colunas de algumas ou todas linhas editáveis setadas para true, 
     ou que tenha como retorno o valor true para todas as linhas e colunas. */
    @Override
    public void setValueAt(Object value, int row, int col) {
        OrdemServicoDTO dado = dataset.get(row);

        switch (col) {

            case 0:
                dado.setDataFinalExe((Date) value);
                break;

            case 1:
                dado.setHoraFinal((String) value);
                break;

        }
        fireTableCellUpdated(row, col);
    }

    // Este método sobrescrito defini que tipo de dado será retornado para cada coluna 
    @Override
    public Class getColumnClass(int column) {
        if (column == 0) {
            return long.class;
        }
        if (column == 6) {
            return long.class;
        } else {
            return String.class;
        }
    }

    /* Este método criado por nós, vai retornar o conjunto 
     de dados inteiro do JTable, através de um List contendo 
     Objetos ClienteBean populados. */
    public List<OrdemServicoDTO> getDataSet() {
        return dataset;
    }

    /* Este método sobrescrito vai definir o nome das colunas 
     que foi atribuído na constante "col" logo no início da classe */
    @Override
    public String getColumnName(int column) {
        return col[column];
    }

    /* Este método foi criado por nós para retornar um objeto ClienteBean 
     populado, de acordo com o número de linha do JTable fornecido pelo 
     parâmetro "int row" */
    public OrdemServicoDTO getRow(int row) {
        return dataset.get(row);
    }

    /* Este método criado por nós, serve para voce criar um 
     ClienteBean e populá-lo fora do JTable e passar para este 
     método que vai acrescentar os dados na última linha do JTable 
     sem que haja a necessidade de se usar o método "setValueAt(...)" */
    public void addRow(OrdemServicoDTO bean) {
        dataset.add(bean);
        fireTableDataChanged();
    }

    /* Este método foi criado por nós para remover uma linha 
     específica do JTable, de acordo com linha fornecida pelo 
     parâmetro "int row" */
    public void removeRow(int row) {
        dataset.remove(row);
        fireTableDataChanged();
    }

    /* Este método criado por nós, acrescenta uma linha em branco 
     no JTable, caso voce queira inserir dados diretamente no JTable 
     tem que chamar este método antes. */
    public void addEmptyRow() {
        dataset.add(new OrdemServicoDTO());
        fireTableDataChanged();
    }

    // metodo criado para limpar todos os dados da tabela.
    public void clearRow() {
        dataset.clear();
        fireTableDataChanged();
    }


}

Os campos que gostaria de atualizar são DataFinal e HoraFinal, deixei eles como editável no Jtabel, mas não entendi qual seria o código para guardar estes valores para logo após salva-los no banco.

Desde ja muito obrigado

  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

1 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags java sql swing ou faça a sua própria pergunta.