Problemas com setValueAt

3 respostas
C

oi, pessoal

gostaria de saber pq o setValueAt não funciona quando o foco está na celula q quero preencher com os dados do banco… já tentei forçar o foco em outra celula q não será alimentada pelo banco, mas com o changeSelection naum deu certo…
Alguém pode me ajudar?
Obrigada

3 Respostas

ramilani12

Vc implementou a Interface de evento ItemListener ou ListSelectionListener?

C

eu implementei o evento keyReleased da minha tabela (uso netbeans 5.5).

ramilani12

Para vc alimentar uma JTable com dados provenientes do banco de dados vc precisa seguir esses passos:

A JTable trabalha com MVC então precisa de um Modelo que seria AbstractModel na qual vc define o modelo da sua JTable a View que irá apresentar a JTable e Controller responsavel em buscar os dados e controlar JTable para View

:arrow: Crie uma Classe que herde AbstractTableModel
essa classe vc irá implementar metodos do tipo pegar o conteudo da JTable , o tamanho da JTable

Segue um exemplo:

import java.util.List;
import javax.swing.table.AbstractTableModel;

public class MyTableModel extends AbstractTableModel 
{
	private String [] colunas;
	private List linhas;
	
	
	public MyTableModel  (String[] colunas , List linhas)
	{
		this.colunas = colunas;
		this.linhas = linhas;
	}
	
	public int getRowCount() 
	{
		return linhas.size();
	}

	public int getColumnCount() 
	{
		return colunas.length;
	}

	public String getColumnName(int col)
	{
		return colunas[col];
	}
	
	
	public Object getValueAt(int lin, int col) 
	{
		try
		{
			Object dadosM[] = (Object[])linhas.get(lin);
			return dadosM[col];
		} catch(Exception ex)
		{
			ex.printStackTrace();
		}
		
	return null;
	}
	
	public boolean isCellEditable(int lin , int col)
	{
		return false;
	}
	


}

:arrow: Agora na sua classe DAO vc precisa instanciar esse Modelo de JTable passando as colunas e um Array dos dados esse array de Dados precisa ser do tipo Object prq os valores do JTable são do tipo Object

public List mostrarLista()
	{
		
		List linhas; // array de Dados
		PreparedStatement pstmt;
		
		try 
		{
			 pstmt = dbCon.prepareStatement("SELECT * FROM ");
			 pstmt.clearParameters();
			 ResultSet rs = pstmt.executeQuery();
			 ResultSetMetaData rsmd = rs.getMetaData();
			 int numCols = rsmd.getColumnCount();
			 linhas = new ArrayList();
			 	while (rs.next())
			 	{
			 		
			 		Object l[] = new Object[numCols];
			 		for (int i =0; i &lt numCols; i++)
			 			l[i] = rs.getObject(i+1);
			 		
			 	linhas.add(l);	
			 	}
			 	
		
		return linhas;
		} catch (SQLException e) 
		{
			return null;
			e.printStackTrace();
		}
	}

:arrow: Na Controller vc precisa criar o Modelo e alimenta-la
Vamos supor que minha classe DAO é responsavel em buscar os dados do banco de dados

DAO dao = new DAO();
    
List lista = dao.mostrarLista();

String [] colunas = {"Coluna A ","Coluna B"};

MyTableModel m = new MyTableModel( colunas , lista );

// Agora envie esse Modelo para View

:arrow: Na sua View vc precisa passar para construtor da JTable o modelo da sua JTable

// 
 AbstractModel
JTable table = new JTable(controller.devolveModeloJTable());

Mais sobre JTable:
Parte 1 http://www.guj.com.br/java.tutorial.artigo.140.1.guj
Parte 2 http://www.guj.com.br/java.tutorial.artigo.147.1.guj

Criado 29 de maio de 2007
Ultima resposta 30 de mai. de 2007
Respostas 3
Participantes 2