Duvida de ArryList com For

3 respostas
S

Pessoal, blz?

Tenho uma tabela no banco, e necessito buscar algumas informações desta tabela, para apresentar em uma Jtree. Pensei em criar uma arraylist, e incluir nesta arraylist os dados e apos incluir a arraylist na Jtree, mas nao ta dando muito certo.

private void carregar() throws SQLException { ResultSet arvore_p = null; ResultSet arvore_nome = null; try { arvore_p = conn.prepareStatement("select max(nr_sequencia) from fin_cpa").executeQuery(); arvore_nome = conn.prepareStatement("SELECT ARVORE, NR_SEQUENCIA FROM FIN_CPA ORDER BY ARVORE").executeQuery(); if (arvore_p.next() && arvore_nome.next()) { for (int tamanho = 0; tamanho <= arvore_p.getInt(1); tamanho++) { System.out.println("Tamanho " +tamanho); System.out.println(arvore_nome.getString(tamanho)); //o problema ta aqui, quando eu coloco para buscar a posição tamanho que é um inteiro incrementado no for, apresenta erro de indice de coluna invalido. Porem se eu colocar no lugar de "arvore_nome.getString(tamanho)", colocar (arvore_nome.getString(1), imprime corretamente. } String aa = arvore_p.getString(1); DefaultMutableTreeNode arvore_pp = new DefaultMutableTreeNode(aa); lista.add(arvore_pp); arvorepagar = new JTree(lista); sp.setViewportView(arvorepagar); System.out.println("recarregou"); } else { System.out.println("nao passou");} } catch (Exception a) { System.out.println("Erro: " +a); }

Como poderia incluir as informacoes da coluna arvore que buscam no banco dentro do arraylist para apos incluir ele no Jtree?

3 Respostas

nel

Primeiro, que baita código confuso colega. Edentação e organização são essenciais no desenvolvimento.
Procure refatorar este método e deixa-lo melhor organizado, foi complicado entende-lo (se é que eu entendi).

Sobre o laço de repetição, a sua segunda consulta retorna dois campos (ARVORE, NR_SEQUENCIA), portanto, se usar índice via ResultSet, só terá as posições 1 e 2, certo?

Outro detalhe importante, é que tu usando o .next() muda a posição do “ponteiro” do seu banco.
Como eu disse, refatora seu código, arruma esse método e seja objetivo no que tu quer, para melhor ajudarmos.

Abraços.

S

Nel, obrigado pelas Dicas!

em vez de If, utilizei o While, e a principio deu certo:

private void carregar() throws SQLException { ResultSet arvore_nome = null; String dados_arvore = null; try { arvore_nome = conn.prepareStatement("SELECT ARVORE FROM FIN_CPA ORDER BY ARVORE").executeQuery(); while (arvore_nome.next()) { dados_arvore = arvore_nome.getString(1); //variavel receber resultado do select DefaultMutableTreeNode arvore_pp = new DefaultMutableTreeNode(dados_arvore); //cria nó da arvore com valor do select lista.add(arvore_pp); //adiciona o nó dentro da arvore arvorepagar = new JTree(lista); //cria arvore e inclui a lista. sp.setViewportView(arvorepagar); } } catch (Exception a) { System.out.println("Erro ao carregar arvore: " +a); } }

S

Pessoal, conforme post anterior, consegui incluir os itens, sem utilizar o arraylist.

Mas estou com outro problema. Ao abrir a aplicacao, carrega corretamente a informacao do banco e inclui na Jtree. Ai tenho o seguinte metodo para saber qual item da arvore da selecionado, para trazer as informacoes deste item selecionado do banco posteriormente:

//aqui é o metodo que retorna o que esta selecionado		
arvorepagar.addMouseListener(new MouseAdapter() {
	public void mouseClicked(MouseEvent e) {
		System.out.println(arvorepagar.getSelectionPath().getPathComponent(1)); //imprime o item da arvore selecionado
	}
});

Acima eu consigo obter o item selecionado da arvore corretamente, para depois implementar o select para buscar as demais informacoes no banco do item selecionado.

O problema, eh quando eu insiro um novo item na arvore, ele aparece certinho nela, mas a partir deste momento, o metodo acima nao funciona mais, ou seja, depois que adiciono na arvore, e clicar em cima de algum item dela ele nao busca e nao imprimi mais o selecionado. Abaixao o metodo que inclui o novo item na arvore:

private void addconta(String conta) {
		conta = nmtitulo.getText();
		DefaultMutableTreeNode contaNo = new DefaultMutableTreeNode(conta);
		lista.add(contaNo);
		arvorepagar = new JTree(lista);
		sp.setViewportView(arvorepagar);
}

entao pensei, deve recarregar novamente a arvore, chamar novamente o metodo que postei post anterior, mas ai ficam duplicados os itens na Jtree, pois seria necessrio remover tudo e depois adicionar novamente, mas nao to conseguindo, nao tenho ideia de como fazer um metodo para excluir todos os itens para depois incluir novamente.

Alguem poderia me dar uma luz?

Criado 22 de novembro de 2012
Ultima resposta 25 de nov. de 2012
Respostas 3
Participantes 2