Problemas na Utilização do JList

11 respostas
C

Estou desenvolvendo um Sistema java desktop com Java + NetBeans 6.1 + MySQL e travei na utilização do Jlist. São duas listas onde em uma estão os produtos cadastrados e a outra recebe os produtos selecionados na primeira, e dois Jbuttons que servem para fazer a navegação dos produtos entre as duas listas, um selecionando os produtos da lista de cadastrados e removendo-os dela quando selecionados e outro para quando se desiste desta seleção, estando o produto já dentro da lista de selecionados executando a mesma função do primeiro em sentido inverso (removendo da lista de selecionados e retornando à lista de cadastrados).

Bem, é assim que deveria funcionar. Na verdade consegui carregar a primeira lista e já tentei de tudo para selecionar itens dentro dela e não consegui. Fiz testes e verifiquei que, mesmo marcados para a seleção, os mesmos não são selecionados, retornando sempre -1 (nenhum item da lista selecionado).

Já pesquisei e testei vários códigos postados em diversos fórum e ainda assim não funciona. O JList carrega e só....não exibe nenhum outro erro mas também não seleciona nenhum item marcado. Alguém pode me ajudar?

A seguir vão alguns trechos de código retirados do NetBeans 6.1

private DefaultListModel ListaDespSanCad = new DefaultListModel();    
private DefaultListModel ListaDespSanSelec = new DefaultListModel();

 jScrollPane1 = new javax.swing.JScrollPane();
 JListDespSanCad = new javax.swing.JList();

jScrollPane2 = new javax.swing.JScrollPane();
JListDespSanSelec = new javax.swing.JList();

 JListDespSanCad.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Pendências Cadastradas", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Arial", 0, 14))); // NOI18N
 JListDespSanCad.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
 JListDespSanCad.setModel(ListaDespSanCad);
JListDespSanCad.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
JListDespSanCad.setLayoutOrientation(javax.swing.JList.VERTICAL_WRAP);
JListDespSanCad.setSelectionModel(JListDespSanCad.getSelectionModel());
JListDespSanCad.setVisibleRowCount(5);
jScrollPane1.setViewportView(JListDespSanCad);



JListDespSanSelec.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Pendências Selecionadas", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Arial", 0, 14))); // NOI18N
JListDespSanSelec.setFont(new java.awt.Font("Arial", 0, 12));
jScrollPane2.setViewportView(JListDespSanSelec);

 JListDespSanCad = new javax.swing.JList();
 preencherListaCadastrados();     
     
public void preencherListaCadastrados(){
    
    try{        
       java.sql.PreparedStatement stmt = BD.cnn.prepareStatement("select pendencia from tabdespsanead " +
       "where idai = " + varIdAI ); 
       ResultSet rs = stmt.executeQuery();
       while(rs.next())
          {
           ListaDespSanCad.addElement(rs.getString("PENDENCIA"));           
          }
       rs.close();
       stmt.close();
       }
    catch(Exception erro)
       {                            
       JOptionPane.showMessageDialog(null,"Erro: " + erro.getMessage());
       }
}     
 
private void cmdSelecionaActionPerformed(java.awt.event.ActionEvent evt) {                                             
// TODO add your handling code here:
   if(JListDespSanCad.getSelectedIndex() != -1) 
     {
       ListaDespSanCad.removeElement(JListDespSanCad.getSelectedIndex());
     }
   else
     {  
   JoptionPane.showMessageDialog(null,(JListDespSanCad.getSelectedIndex()) + "Selecione um valor da lista!");
     }
}                                            

 // Variables declaration - do not modify                     
 private javax.swing.JList JListDespSanCad;
 private javax.swing.JList JListDespSanSelec;
 private javax.swing.JScrollPane jScrollPane1;
 private javax.swing.JScrollPane jScrollPane2;

11 Respostas

C

Uma dica por favor!!!

lina

Oi,

Ainda não entendi a sua pergunta.
Não teria como você fazer uma classe pequena apenas com um JList e um JButton para simular isso? Quando fizer essa classe, post aqui!

Compilarei e tentarei ajudar =)

Tchauzin!

C

Me desculpe se ficou meio confuso. Estou trabalhando com aquele esquema de dois JList’s (um de produtos cadastrados no BD e outro de selecionados no primeiro JList) e dois JButton’s entre eles com Label’s “>>” e “<<” para fazer a navegação entre os dois.

O primeiro JList recebe os produtos cadastrados no BD em MySQL e o segundo deveria receber os produtos selecionados no primeiro JList. É aí que estou tendo dificuldades: O primeiro está recebendo os dados do BD, mas não consigo removê-los e adicioná-los ao segundo JList.

Já pesquisei algumas dicas mas ainda não consegui.

Valeu.

C

Sobe!!!

Alchemist
# private void cmdSelecionaActionPerformed(java.awt.event.ActionEvent evt) {                                               
# // TODO add your handling code here:  
#    if(JListDespSanCad.getSelectedIndex() != -1)   
#      {  
#        ListaDespSanCad.removeElement(JListDespSanCad.getSelectedIndex());  
#      }  
#    else  
#      {    
#    JoptionPane.showMessageDialog(null,(JListDespSanCad.getSelectedIndex()) + "Selecione um valor da lista!");  
#      }  
# }

Que erro da aqui nesta action ?

Alchemist

Cara aqui tem tudo o que vc precisa para fazer funcionar !!

http://java.sun.com/docs/books/tutorial/uiswing/components/list.html

CrOnNoS

Tem diversos problemas que podem ocorrer que só com isso do código não dá para identificar nenhum.
Um problema simples, tem certeza que após atualizar os elementos das 2 JList você está validando novamente elas para demonstrar as mudanças ?
Como você tá atualizando eles ? etc etc
Tem como passa o resto do código ?
De preferência um exemplo mais simples mesmo (e se possível sem esse código demoniaco gerado pelo eclipse, mas se non tiver como whatever hehe)

C

Alchemist, conforme vc havia me perguntado anteriormente, aquela action só me retorne o valor de -1, isto é, não está selecionado valores dentro do JList.

C

Caramba…não consigo achar onde está o erro.

C

Valeu…Faltou implementar o Código de Criação do JList dentro do NetBeans. Eu estava inicializando o Jlist no local errado.

C

Valeu.

Criado 18 de novembro de 2009
Ultima resposta 21 de nov. de 2009
Respostas 11
Participantes 4