Olá galera
Tou com um probleminha e preciso da ajuda de vcs.
Tou fazendo uma TableModelFase que são as fases de execução do meu sistema. E existe uma tabela relacionada de fases e os campos são:
Codigo e descrição. O que acontece é que quando trago os dados do banco para o Jcombobox do jtable do sistema, aparece um endereço de memória da classe. Aparece assim como abaixo no campo descrição da fase, alguem ja passou por isso alguma vez. Agradeço desde já.
cod. Descrição da Fase Setor dta recep. dta emissão Pessoa que recebeu o serviço
6 1 1 modelo.Fase@dd1152a OFICINA 2013-06-04 2013-07-04 BIANCA
parece um endereço de memória do modelo da classe Fase. Precisava da ajuda de vcs por favor para solucionar este problema. Alguem do forum já se deparou com algo assim.
Vou postar o código abaixo:
da Aplicação:
private void setaFaseExecucao() {
FaseExecucaoDao dao = null ;
try {
dao = new FaseExecucaoDao();
FaseExecucaoTableModel minhafase = new FaseExecucaoTableModel(dao.findbyfiltrochaves(Integer.parseInt(txtIdOs.getText()), Integer.parseInt(txtIdFicha.getText()), identificador));
jTFases.setModel(minhafase);
jTFases.setPreferredSize(new java.awt.Dimension(1340, 144));
defineRenderersFases();
// int h = ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS;
// int v = ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS;
JScrollPane scroller = new JScrollPane();
jScrollPane6.setViewportView(scroller);
scroller.setViewportView(jTFases);
} 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);
}
jTFases.setVisible(true);
}
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(70);
jTFases.getColumnModel().getColumn(2).setPreferredWidth(40);
jTFases.getColumnModel().getColumn(3).setPreferredWidth(400);
TableColumn colfase = jTFases.getColumnModel().getColumn(3);
// Associando o ComboBox para a coluna
jTFases.setDefaultEditor(Fase.class, new FaseComboEditor());
jTFases.getColumnModel().getColumn(4).setPreferredWidth(400);
jTFases.getColumnModel().getColumn(5).setPreferredWidth(150);
jTFases.getColumnModel().getColumn(6).setPreferredWidth(150);
jTFases.getColumnModel().getColumn(7).setPreferredWidth(300);
}
//CellEditor da Fase
package Classes;
import dao.FaseDao;
import fontes.Cadastros.jIFOs;
import java.awt.Component;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.AbstractCellEditor;
import javax.swing.JComboBox;
import javax.swing.JTable;
import javax.swing.table.TableCellEditor;
import modelo.Fase;
//Ao final da edição o valor retornado para o TableModel vem desta função.
/**
*
* @author OCTACILIO
*/
public class FaseComboEditor extends AbstractCellEditor implements TableCellEditor{
Fase f = new Fase();
private ArrayList<Fase> listaFase = new ArrayList<Fase>();
private JComboBox field;
private Fase[] values = {new Fase(), new Fase()};
//Ao editar a célula este método cria um jComboBox
@Override
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
System.out.println("passou FaseComboEditor ");
removeCellEditorListener(table);
//Defino os valores para o comboBox
field = new JComboBox(values);
field.addItem("");
listaFase.clear();
// popula o combo fase
FaseDao dao = null;
try {
dao = new FaseDao();
//Aqui usando Generics porque o metodo retorna um ArrayList de object's e preciso acessar os metodos do bean
listaFase = (ArrayList<Fase>) dao.listAll();
} 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);
}
/* if (listaFase == null){
msg= "ERRO: Listagem da fase vazia!!!)";
mensagemErro(msg);
}*/
//O método addItem adiciona objetos ao model do ComboBox
//Esse getNome do objeto c retorna uma String
// System.out.println(" passou em preenchercmbFase =" +listaFase.toString() );
for (Fase f : listaFase) {
field.addItem(f.getDescricao());
}
field.setSelectedItem(value); //Deixa o editor pré-selecionado com o valor da célula
return field;
}
@Override
public Object getCellEditorValue() {
return field.getSelectedItem().toString();
}
}
//TableModels da Fase de execução
package TableModels;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.swing.table.AbstractTableModel;
import modelo.Fase;
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[]{
"Os","Ficha ","Id.","Descrição da Fase ","Setor ", "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);
}
/* Retorna a quantidade de colunas. */
@Override
public int getColumnCount() {
// Esta retornando o tamanho do array "colunas".
return colunas.length;
}
/* Retorna a quantidade de linhas. */
@Override
public int getRowCount() {
// Retorna o tamanho da lista de Fase.
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
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: // Primeira coluna é o nome, que é uma String.
return Integer.class;
case 2: // Primeira coluna é o nome, que é uma String.
return Integer.class;
case 3: // Segunda coluna é a fase, que também é uma String..
return Fase.class;
case 4: // Terceira coluna é a data de cadastro,
// apesar de ser do tipo Calendar,
return String.class;
case 5: // Quarta coluna é a mensalidade, um double.
return Date.class;
case 6: // Quarta coluna é a mensalidade, um double.
return Date.class;
case 7: // 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.getIdos();
case 1:
return faseexecucao.getIdficha();
case 2:
return faseexecucao.getId();
case 3:
return new Fase();
case 4:
return faseexecucao.getNomesetor();
case 5:
return faseexecucao.getRecepcao();
case 6:
return faseexecucao.getEmissao();
case 7:
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:
// return faseexecucao.getIdos();
case 1:
// return faseexecucao.getIdficha();
case 2:
faseexecucao.setId(Integer.parseInt(aValue.toString()));
case 3:
faseexecucao.setFase(aValue.toString());
case 4:
faseexecucao.setNomesetor(aValue.toString());
case 5:
faseexecucao.setRecepcao((Date)(aValue));
case 6:
faseexecucao.setEmissao((Date)(aValue));
case 7:
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.setFase(aValue.getFase());
faseexecucao.setNomesetor(aValue.getNomesetor());
faseexecucao.setRecepcao(aValue.getRecepcao());
faseexecucao.setEmissao(aValue.getEmissao());
faseexecucao.setPessoaConsultorio(aValue.getPessoaConsultorio());
fireTableCellUpdated(rowIndex, 3);
fireTableCellUpdated(rowIndex, 4);
fireTableCellUpdated(rowIndex, 5);
fireTableCellUpdated(rowIndex, 6);
fireTableCellUpdated(rowIndex, 7);
}
;
;
@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
if (columnIndex < 3) {
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) {
}
}