JTable e JList

10 respostas
S

Olá a todos,

Estou com um pequeno problema com a minha JList que faço sem problemas em uma JTable. O problema é o seguinte:
Eu insiro um registro no meu banco de dados e preciso atualizar a minha JList com esse novo registro. Consigo fazer isso em uma JTable sem problemas, mas não consigo fazer funcionar com uma Jlist, ou seja, estou seguindo a mesma lógica para fazer isso na JList. Consigo inserir o registro, mas no momento de atualizar a JList, não atualiza. Existe alguma diferença entre exibir o conteúdo atualizado de uma JList e fazer o mesmo em uma JTable?

Abaixo os dois códigos da minha JList.

private JList getJList_ListaPastaDoPerfilDoUsuario() {
		if (jList_ListaPastaDoPerfilDoUsuario == null) {
			jList_ListaPastaDoPerfilDoUsuario = new JList();
			PreencherJListDePastaDeContatos();
		}
		return jList_ListaPastaDoPerfilDoUsuario;
	}
public void PreencherJListDePastaDeContatos() {
		final DefaultListModel DLM_PastaDoPerfilUsuario = new DefaultListModel();
		jList_ListaPastaDoPerfilDoUsuario = new JList(DLM_PastaDoPerfilUsuario);
		try {
			PastaDeContatos ObjetoPastaDeContatos = new PastaDeContatos();
			DAO ObjetoDAOPastaDeContatos = new DAO(ObjetoPastaDeContatos);

			List<PastaDeContatos> ListarPastaDeContatos = new ArrayList<PastaDeContatos>();
			String ComandoSQL = " where CodigoPerfilUsuario="+CodigoRecebido;
			ListarPastaDeContatos = ObjetoDAOPastaDeContatos.ExibirRegistro("PastaDeContatos"+ComandoSQL);

			int TamanhoDaListaPastaDeContatos = ListarPastaDeContatos.size();
			for(int i=0;i<TamanhoDaListaPastaDeContatos;i++) {
				ObjetoPastaDeContatos = ListarPastaDeContatos.get(i);
				DLM_PastaDoPerfilUsuario.addElement(ObjetoPastaDeContatos.getDescricaoPasta());
				jList_ListaPastaDoPerfilDoUsuario.setCellRenderer(new Imagens());
			}
		}
		catch(Exception ErroPerfilUsuario) {
			JOptionPane.showMessageDialog(null,"Erro ao Exibir a Pasta do Perfil do Usuário! - "+ErroPerfilUsuario);
		}
	}

Grato,
Sérgio
>

10 Respostas

A

Olá, qual a mensagem que aparece, ou qual o estado da aplicação(trava, falha na renderização…)

outra coisa, tenta utilizar os padrões de codificação, e também os de projeto.

forte abraço estamos esperando o seu retorno.

S

Boa tarde André,

Esse é que é o problema, não apresenta nenhuma mensagem de erro. Faço o acompanhamento em tempo de execução. Mostra o comando INSERT sendo executado e pronto. A tela fica do jeito que estava antes, sem uma atualização com o novo registro.

O que você quis dizer com os padrões de desenvolvimento? São os padrões para dar nomes às variáveis, classes, métodos, etc…? Até procurei algo a respeito mas não localizei, se puder me indicar, agradeceria e muito, você não faz idéia. Mas algumas coisas, eu adaptei, pois estava tendo dificuldade na hora de localizar certas coisas no programa se usasse alguns padrões. Uma delas é usar abreviaturas, pode parecer estranho, mas sua mente trabalha dobrado, pois seus cérebro não foi “programado” para isso. rsrsrsrsrs…

Grato,
Sérgio

A

Olá,
documentei algumas coisas que precisamos entrar em acordo. :wink:

public void PreencherJListDePastaDeContatos() {
		final DefaultListModel DLM_PastaDoPerfilUsuario = new DefaultListModel();
		jList_ListaPastaDoPerfilDoUsuario = new JList(DLM_PastaDoPerfilUsuario);
		try {
			PastaDeContatos ObjetoPastaDeContatos = new PastaDeContatos();
			
			//pq o DAO recebe um PastaDeContatos?
			// o que o DAO fará com ele?
			DAO ObjetoDAOPastaDeContatos = new DAO(ObjetoPastaDeContatos);


			List<PastaDeContatos> ListarPastaDeContatos = new ArrayList<PastaDeContatos>();
			String ComandoSQL = " where CodigoPerfilUsuario="+CodigoRecebido;
			ListarPastaDeContatos = ObjetoDAOPastaDeContatos.ExibirRegistro("PastaDeContatos"+ComandoSQL);

			int TamanhoDaListaPastaDeContatos = ListarPastaDeContatos.size();
			for(int i = 0; i < TamanhoDaListaPastaDeContatos; i++) {
				//pq a referencia de 'ObjetoPastaDeContatos' não está aqui?
				// poderia ficar assim: PastaDeContatos ObjetoPastaDeContatos = ListarPastaDeContatos.get(i);
				//pois a cada interação vc terá uma referencia defirente, e como está no JList terá apenas 1(um) objeto
				ObjetoPastaDeContatos = ListarPastaDeContatos.get(i);
				DLM_PastaDoPerfilUsuario.addElement(ObjetoPastaDeContatos.getDescricaoPasta());
				
				//Tenta criar uma referencia fora desse laço, pois assim vc usa o mesmo objeto
				jList_ListaPastaDoPerfilDoUsuario.setCellRenderer(new Imagens());
			}
		}
		catch(Exception ErroPerfilUsuario) {
			JOptionPane.showMessageDialog(null,"Erro ao Exibir a Pasta do Perfil do Usuário! - "+ErroPerfilUsuario);
		}
	}

assim que vc verificar esse documentario que eu coloquei no proprio codigo, daremos alguma dicas de ‘formatação’ do codigo

ops!, vc foi programador pascal(dephi)?

forte abraço

M

fera tente isso:

substitua a linha

DLM_PastaDoPerfilUsuario.addElement(ObjetoPastaDeContatos.getDescricaoPasta());

por

((DLM_PastaDoPerfilUsuario)jList_ListaPastaDoPerfilDoUsuario.getModel()).addElement(ObjetoPastaDeContatos.getDescricaoPasta());
S

Olá Marlon,

Eu tô longe de ser “fera”, mas valeu"! rsrsrsrsrs
Fiz a substituição, mas o problema não está nessa linha. O corportamento do programa fica idêntico ao que estava antes, ou seja, não houve diferença. Ele chegar a fazer o INSERT e o SELECT para atualizar o JList, mas por algum motivo o JList não é atualizado.

Sérgio

S

andre.henriques:
Olá,
documentei algumas coisas que precisamos entrar em acordo. :wink:

public void PreencherJListDePastaDeContatos() {
		final DefaultListModel DLM_PastaDoPerfilUsuario = new DefaultListModel();
		jList_ListaPastaDoPerfilDoUsuario = new JList(DLM_PastaDoPerfilUsuario);
		try {
			PastaDeContatos ObjetoPastaDeContatos = new PastaDeContatos();
			
			//pq o DAO recebe um PastaDeContatos?
			// o que o DAO fará com ele?
			DAO ObjetoDAOPastaDeContatos = new DAO(ObjetoPastaDeContatos);


			List<PastaDeContatos> ListarPastaDeContatos = new ArrayList<PastaDeContatos>();
			String ComandoSQL = " where CodigoPerfilUsuario="+CodigoRecebido;
			ListarPastaDeContatos = ObjetoDAOPastaDeContatos.ExibirRegistro("PastaDeContatos"+ComandoSQL);

			int TamanhoDaListaPastaDeContatos = ListarPastaDeContatos.size();
			for(int i = 0; i < TamanhoDaListaPastaDeContatos; i++) {
				//pq a referencia de 'ObjetoPastaDeContatos' não está aqui?
				// poderia ficar assim: PastaDeContatos ObjetoPastaDeContatos = ListarPastaDeContatos.get(i);
				//pois a cada interação vc terá uma referencia defirente, e como está no JList terá apenas 1(um) objeto
				ObjetoPastaDeContatos = ListarPastaDeContatos.get(i);
				DLM_PastaDoPerfilUsuario.addElement(ObjetoPastaDeContatos.getDescricaoPasta());
				
				//Tenta criar uma referencia fora desse laço, pois assim vc usa o mesmo objeto
				jList_ListaPastaDoPerfilDoUsuario.setCellRenderer(new Imagens());
			}
		}
		catch(Exception ErroPerfilUsuario) {
			JOptionPane.showMessageDialog(null,"Erro ao Exibir a Pasta do Perfil do Usuário! - "+ErroPerfilUsuario);
		}
	}

assim que vc verificar esse documentario que eu coloquei no proprio codigo, daremos alguma dicas de ‘formatação’ do codigo

ops!, vc foi programador pascal(dephi)?

forte abraço

Olá André,

Então vamos lá.

  1. O DAO é a minha classe de persistência com o banco de dados. Nela está o meu INSERT, DELETE e o EXIBIRREGISTROS que aparece mais abaixo.
  2. Se eu colocar o “ObjetoPastaDeContatos” aonde você indica eu não consigo fazer o select no banco de dados com a condição (where) que está acima.
  3. A linha que você pediu para tirar do laço ela coloca uma imagem ao lado de cada linha. E a medida que eu seleciono a linha a imagem muda. Essa linha de código foi tirada de um exemplo disponível no site oficial do Java.

Qualquer coisa é só perguntar.

Grato,
Sérgio

A

Faz o seguinte pra não perder tanto tempo com ‘axismo’ da minha parte, verifica quantos objetos estão dentro da lista, utiliza o JOptionPane, vc já tem guardado em uma variavel.

S

Valeu André,

Com uma solução simples conseguiu descobrir o que estava acontecendo e porque estava acontecendo. Explico:
A diferença é que com o JTable eu usava a entrada de um novo registro no mesmo form (Frame ou JPanel). Quando comecei a usar o JList eu usei um segundo form (Frame) separado do primeiro para fazer a entrada de um novo registro. O que estava acontecendo é que quando eu inseria um registro no segundo form e fechava, claro que nada acontecia no primeiro form. Ou seja, quando eu volto para o primeiro form após fechar o segundo form, não existe nenhum comando para atualizar o JList. Pois é, simples e eu aqui quebrando cabeça sem analisar a lógica direito. Que vacilo!

Resumindo, é só colocar o comando no lugar certo do primeiro form que ele vai atualizar a JList. E depois eu é que sou fera! rsrsrsrs

Valeu e obrigado.

Sérgio

A

massa, foi resolvido?

“ver só” tenta dá uma olhada em padrão de codificação do JAVA, é pq a leitura do código fica mais rapida, não digo que o padrao java é mais rapido em comparação a outros, mas pq todos(ou quase todos) a utilizam é melhor.

forte abraço.

S

Resolveu sim André,

Quanto aos padrões de codificação já estou dando uma olhada. Vou dar uma lida com mais calma para adotar corretamente. O que eu não gostei é das abreviaturas para os componentes, por exemplo. Tipo btn para Botão, lbl para JLabel e por aí vai. Particularmente não gosto de trabalhar assim, usando abreviaturas. Abreviar é fazer o cérebro trabalhar dobrado, ele lê e traduz. O detalhe é que preciso me adaptar ao mercado, e aí não tem jeito. Mas com certeza a maioria, senão tudo, vai ter que mudar.

Grato,
Sérgio

Criado 21 de junho de 2011
Ultima resposta 22 de jun. de 2011
Respostas 10
Participantes 3