Ideia de como fazer CRUD direto na minha Jtable com TableModel

0 respostas
N

Pessoal

Li alguns posts sobre a Jtable e tableModel e ainda não conseguir arquitetar uma maneira de fazer cadastro(crud) na minha “jTFases”. Parece que meu problema é de interface. Li o artigo de Felipe mas não conseguir entender a parte inicial de como cadastrar um novo produto com a tabela vazia?(como fazer isso da minha jInternalframe). tb li o artigo de alteração de Vini sobre a resposta de Leoloco com o exemplo de um procedimento de alteração modal, mas, não entendi bem ou não mostra como cadastrar numa tabela vazia? Por favor preciso de exemplos e respostas se vcs puderem sobre:
1)Tou usando o processo TableModel que acho bem flexivel e quanto a isso já está tudo ok.(FaseExecucaotableModel). já pronto.
2)Só podemos cadastrar numa jTableModel no java com essa estrutura Modal(fora da tabela)?
3)Tenho 2 tabelas realacionadas na minha jTableModel uma é a tabela de fase e outra a tabela de funcionários?
Como fazer um estilo Popup das tabelas relacionadas e dentro da propria interface selecionar esses registros com o pattern Dao?.

Obrigado pela paciência de vcs.

Vou postar meu codigo dessa parte:

/*
 * To change this template, choFasee Tools | Templates
 * and open the template in the editor.
 */
package TableModels;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.swing.JScrollPane;
import javax.swing.table.AbstractTableModel;
import modelo.FaseExecucao;

/**
 *
 * @author Octacilio
 */
public class FaseExecucaoTableModel extends AbstractTableModel {

  
    private static final long serialVersionUID = 1L;

      
    /* Lista de FaseExecucao que representam as linhas. */  
    private List<FaseExecucao> linhas;  
  
    /* Array de Strings com o nome das colunas. */  
    private String[] colunas = new String[]{  
    "Id.", "Descrição da Fase                               ", "Funcionário                            ", "Recepção  ","  Emissão  ","Pessoa no Consultório         "};
    /* Cria um FaseExecucaoTableModel vazio. */  
    public FaseExecucaoTableModel() { 
//        System.out.println("passei na FaseTableModel - inicio!");

        linhas = new ArrayList<FaseExecucao>();  
    }  
  
    /* Cria um FaseTableModel carregado com 
     * a lista de FaseExecucao especificada. */  
    public FaseExecucaoTableModel(List<FaseExecucao> faseexecucao) {  
//System.out.println("passei na FaseTableModel!");
        this.linhas = new ArrayList<FaseExecucao>(faseexecucao); 
//System.out.println("linhas=" + linhas.size());     
        
       linhas = new ArrayList<FaseExecucao>(faseexecucao);
/*             for (Fase p: linhas){
                   System.out.println("  Id. Tipopreco=" + (p.getIdtipopreco()));     
                 System.out.println(" NomeTipopreco=" + (p.getNometipopreco()));     
                   System.out.println(" Id.Protese=" + (p.getIdprotese()));     
                   System.out.println("Nome Protese=" + (p.getNomeprotese()));     
                   System.out.println(" IdOs=" + (p.getIdos()));     
                   System.out.println("Fase=" + (p.getId()));  
                   System.out.println("Prova=" + (p.getProva()));  
             }*/
    }  
  
  
    /* Retorna a quantidade de colunas. */  
    @Override  
    public int getColumnCount() {  
        // Esta retornando o tamanho do array "colunas".  
//System.out.println("tamanho da coluna=" +colunas.length);        
        return colunas.length;  
    }  
  
    /* Retorna a quantidade de linhas. */  
    @Override  
    public int getRowCount() {  
        // Retorna o tamanho da lista de Fase.  
//System.out.println("linhas=" + linhas.size());     
        return linhas.size();  
    }  
  
    /* Retorna a quantidade de linhas. */  

    @Override  
    public String getColumnName(int columnIndex) {  
        // Retorna o conteudo do Array que pFasesui o nome das colunas 
//System.out.println("nome da coluna=" +colunas[columnIndex]);     
        return colunas[columnIndex];  
    }  
  
    ;  
  
/* Retorna a classe dFaseExecucao elementFaseExecucao da coluna especificada.
	 * Este método é usado pela JTable na hora de definir o editor da célula. */
	@Override
	public Class<?> getColumnClass(int columnIndex) {
		// Retorna a classe referente a coluna especificada.
		// Aqui é feito um switch para verificar qual é a coluna
		// e retornar o tipo adequado. As colunas são as mesmas
		// que foram especificadas no array "colunas".
		switch (columnIndex) {
		case 0: // Primeira coluna é o nome, que é uma String.
			return Integer.class;
		case 1: // Segunda coluna é o telefone, que também é uma String..
			return String.class;
		case 2: // Terceira coluna é a data de cadastro,
				// apesar de ser do tipo Calendar,
				// estou retornando Degerate por causa da formatação.
			return String.class;
		case 3: // Quarta coluna é a mensalidade, um double.
			return Date.class;
		case 4: // Quarta coluna é a mensalidade, um double.
			return Date.class;
		case 5: // Quinta coluna date.
                        return String.class;
		default:
			// Se o índice da coluna não for válido, lança um
			// IndexOutOfBoundsException (Exceção de índice fora dFaseExecucao limites).
			// Não foi necessário verificar se o índice da linha é inválido,
			// pois o próprio ArrayList lança a exceção caso seja inválido.
			throw new IndexOutOfBoundsException("ERRO. Coluna fora do limite - ClassFaseExecucao!");
		}
	}
  
    ;  
  
    
  
    @Override  
    public Object getValueAt(int rowIndex, int columnIndex) {  
            FaseExecucao faseexecucao = 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ão as mesmas  
        // que foram especificadas no array "colunas".  
        switch (columnIndex) {  
  
            // Seguindo o exemplo: "Tipo","Data de Cadastro", "Nome", "Idade"};  
            case 0:  
                return faseexecucao.getId();  
            case 1:  
                return faseexecucao.getNomefase();  
            case 2:  
                return faseexecucao.getNomefuncionario();  
            case 3:  
                return faseexecucao.getRecepcao();  
            case 4:  
                return faseexecucao.getEmissao();  
            case 5:  
                return faseexecucao.getPessoaConsultorio();  
	    default:
                // Isto não deveria acontecer...  
                throw new IndexOutOfBoundsException("Erro - columnIndex fora de limite GetFaseExecucao!");  
        }  
    }  
  
@Override  
//modifica na linha e coluna especificada  
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {  
      FaseExecucao faseexecucao = linhas.get(rowIndex); // Carrega o item da linha que deve ser modificado  
  
     switch (columnIndex) { // Seta o valor do campo respectivo  
         case 0:  
             faseexecucao.setId(Integer.parseInt(aValue.toString()));  
          case 1:  
             faseexecucao.setNomefase(aValue.toString());
         case 2:  
             faseexecucao.setNomefuncionario(aValue.toString());
         case 3:  
             faseexecucao.setRecepcao((Date)(aValue));  
         case 4:  
             faseexecucao.setEmissao((Date)(aValue));  
         case 5:  
             faseexecucao.setPessoaConsultorio(aValue.toString());  
         default:  
             // Isto não deveria acontecer...               
     }  
     // notifica a mudança
        fireTableCellUpdated(rowIndex, columnIndex);  
     }  
  
    //modifica na linha especificada  
    public void setValueAt(FaseExecucao aValue, int rowIndex) {  
        FaseExecucao faseexecucao = linhas.get(rowIndex); // Carrega o item da linha que deve ser modificado  
  
          faseexecucao.setNomefase(aValue.getNomefase());  
          faseexecucao.setNomefuncionario(aValue.getNomefuncionario());  
          faseexecucao.setRecepcao(aValue.getRecepcao());  
          faseexecucao.setEmissao(aValue.getEmissao());  
          faseexecucao.setPessoaConsultorio(aValue.getPessoaConsultorio());  
  
          fireTableCellUpdated(rowIndex, 1);  
          fireTableCellUpdated(rowIndex, 2);  
          fireTableCellUpdated(rowIndex, 3);  
          fireTableCellUpdated(rowIndex, 4);  
          fireTableCellUpdated(rowIndex, 5);  
  
    }  
    ;  
  
  
    ;  
  
  
    @Override  
    public boolean isCellEditable(int rowIndex, int columnIndex) {  
        if (columnIndex < 1) {
            return false;
        } else {
            return true;
        }  
    }  
  
  
    public FaseExecucao getFaseExecucao(int indiceLinha) {  
        return linhas.get(indiceLinha);  
    }  
  
  
  
    /* Adiciona um registro. */  
    public void addFaseExecucao(FaseExecucao m) {  
        // Adiciona o registro.  
        linhas.add(m);  
  
  
        int ultimoIndice = getRowCount() - 1;  
  
        fireTableRowsInserted(ultimoIndice, ultimoIndice);  
    }  
  
    /* Remove a linha especificada. */  
    public void removeFaseExecucao(int indiceLinha) {  
        linhas.remove(indiceLinha);  
  
        fireTableRowsDeleted(indiceLinha, indiceLinha);  
    }  
  
    /* Adiciona uma lista de FaseExecucao ao final dFaseExecucao registrFaseExecucao. */  
    public void addListaDeFaseExecucao(List<FaseExecucao> faseexecucao) {  
        // Pega o tamanho antigo da tabela.  
        int tamanhoAntigo = getRowCount();  
  
        // Adiciona FaseExecucao registrFaseExecucao.  
        linhas.addAll(faseexecucao);  
  
        fireTableRowsInserted(tamanhoAntigo, getRowCount() - 1);  
    }  
  
    /* Remove todFaseExecucao FaseExecucao registrFaseExecucao. */  
    public void limpar() {  
        linhas.clear();  
  
  
        fireTableDataChanged();  
    }  
  
    /* Verifica se este table model esta vazio. */  
    public boolean isEmpty() {  
        return linhas.isEmpty();  
    }

    public void setVisible(boolean b) {
        
    }

  
}
// A minha Interface que quando o usuario clicar na tabela ira aparecer uma linha vazia(outra cor) ou se tiver registro já aparece automaticamente.
    private void jTFasesMouseClicked(java.awt.event.MouseEvent evt) {                                     
        // TODO add your handling code here:
           System.out.println("passou mouceclick minhafase");
 //cria o modelo de Fase de execucao
        FaseExecucaoDao dao = null;
        try{
        dao = new FaseExecucaoDao();
// como instanciar a jtable para digitar os campos? Nesse caso a tabela está vazia e está dando um erro de nullpointer?        
        model = new FaseExecucaoTableModel(dao.listAll());
 
        //atribui o modelo à tabela
        jTFases.setModel(model);
        jTFases.setPreferredSize(new java.awt.Dimension(1340, 144));  
        defineRenderersFases();
         JScrollPane scroller = new JScrollPane(); 
         jScrollPane6.setViewportView(scroller);  
         scroller.setViewportView(jTFases);  
// acho que aqui preciso fazer algo para mostrar uma linha na tabela vazia para preenchimento.        
        } catch (SQLException ex) {
            Logger.getLogger(jIFOs.class.getName()).log(Level.SEVERE, null, ex);
        }
        try {
            dao.closeConnection();
        } catch (SQLException ex) {
            Logger.getLogger(jIFOs.class.getName()).log(Level.SEVERE, null, ex);
        }   
    }                                    
// definerenderes jtFases
    private void defineRenderersFases() {
        DefaultTableCellRenderer rendererCentro = new DefaultTableCellRenderer();  
        rendererCentro.setHorizontalAlignment(SwingConstants.CENTER);  
        DefaultTableCellRenderer rendererDireita = new DefaultTableCellRenderer();  
        rendererDireita.setHorizontalAlignment(SwingConstants.RIGHT);  
        DefaultTableCellRenderer rendererEsquerda = new DefaultTableCellRenderer();  
        rendererEsquerda.setHorizontalAlignment(SwingConstants.LEFT);  
      
            jTFases.getColumnModel().getColumn(0).setPreferredWidth(40);
            jTFases.getColumnModel().getColumn(1).setPreferredWidth(700);
            jTFases.getColumnModel().getColumn(2).setPreferredWidth(500);
            jTFases.getColumnModel().getColumn(3).setPreferredWidth(120);
            jTFases.getColumnModel().getColumn(4).setPreferredWidth(120);
            jTFases.getColumnModel().getColumn(5).setPreferredWidth(400);
        
    }
Criado 13 de fevereiro de 2013
Respostas 0
Participantes 1