Oi
eu estou criando um aplicação e vai ter uma JList e vai ler do banco os valores da lista. Bem isso OK pegando com
//conexão ao banco e stm classforname aquelas coisas
while(rs.next()){
String 1 = rs.getString(1);
System.out.println(1);
}
eu quero saber se ao invés de imprimir no console da para colocar na lista String[] dados = {"um","dois","tres"};
JList lista = new JList(dados);
e pegar esses valores e colocar no JList quando eu pedir para abrir essa tela que tem a JList.
Se dá para adicionar em tempo de execução! pode até sumir depois… só preciso no momento para o usuário selecionar o item (é com getSelectedValue()???) e fazer o que eu preciso.
eu achei esse endereço com explicações sobre JList.
Por enquanto obrigado
Ricardo
Opa,
Adicionei um texto fixo diretamente na action de um jButton, mas acho que com isso você consegue adaptar ao seu código.
privatevoidjButton1ActionPerformed(java.awt.event.ActionEventevt){
DefaultListModeldlm=newDefaultListModel();for(inti=0; i < jList1.getModel().getSize(); i++) {dlm.addElement(jList1.getModel().getElementAt(i));}
dlm.addElement("Texto Inserido");jList1.setModel(dlm);}
Dessa maneira ele pega o atual conteudo da lista e adiciona no final mais uma linha. Se os dados que a lista já possuia vinham do banco, trate primeiramente a inserção dos dados e depois crie um DefaultListModel com os dados do banco e não com os dados da lista, assim vai garantir que eles estejam atualizados.
[]´s
Daniel
M
Matheus_Leandro_Ferr
De uma olhada:
publicclassEstudosextendsJFrame{JListlista;JTextFieldcampo;publicEstudos(){super("A classe JList");Containerc=getContentPane();c.setLayout(newFlowLayout(FlowLayout.LEFT));// Cria um novo DefaultListModelDefaultListModelmodelo=newDefaultListModel();// Cria a JListlista=newJList();// Atribui o DefaultListModel à JListlista.setModel(modelo);// Um botão que permite adicionar itens na JListJButtonbtn=newJButton("Adicionar na JList");btn.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEvente){Stringvalor=campo.getText();if(valor.length()!=0){((DefaultListModel)(lista.getModel())).addElement(valor);campo.setText("");campo.requestFocus();}}});// Adiciona a lista à janelac.add(newJScrollPane(lista));// Cria um JTextField e o adiciona à janelacampo=newJTextField(10);c.add(campo);// Adiciona o botão à janelac.add(btn);setSize(350,250);setVisible(true);}publicstaticvoidmain(Stringargs[]){Estudosapp=newEstudos();app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}}
Nesse novo método ele disconsidera o que já existia na lista e pega somente os registros que estão no banco.
Como o seu novo registro já vai estar lá, dessa maneira deve funcionar corretamente.
[]´s
Daniel
R
rickzale
yorgan
surgiu um problema... na verdade isso esta para um botão! E eu preciso saber se é possível tb ele criar a lista quando for chamado, assim que abrir. Assim:
Frame A tem um botão que abre outro Frame B, que tem a lista, e quando for aberto pelo botão do Frame A, AUTOMATICAMENTE cria a lista para o usuario. OK?
segue o meu código (do botão que eu criei) para vc ver que esta dando um erro. Ele pega o ultimo registro do banco apenas (não pega tudo).
assim:
isso que eu quero pode ser feito no construtor, antes de tudo?
Valew
Ricardo
7
71C4700
Chará, vc pode sim passa pro contrutor do outro Frame algum objeto, por exemplo o ResultSet que vc pesquisou e filtrou no primeiro Frame.
publicclassListaDinamicaextendsjavax.swing.JFrame{publicListaDinamica(){initComponents();try{Class.forName("com.mysql.jdbc.Driver");con=DriverManager.getConnection("jdbc:mysql://localhost/dbsgod","root","");}catch(Exceptionex){System.out.println("Ex : "+ex.getMessage());}atualizaLista();// Atualiza já quando instacia}Connectioncon;privatevoidatualizaLista(){DefaultListModeldlm=newDefaultListModel();jList1.setModel(dlm);try{ResultSetres=con.createStatement().executeQuery("select * from familia");while(res.next()){dlm.addElement(res.getString("Nome"));}}catch(Exceptione){e.printStackTrace();}}privatevoidjButton1ActionPerformed(java.awt.event.ActionEventevt){atualizaLista();}publicstaticvoidmain(Stringargs[]){java.awt.EventQueue.invokeLater(newRunnable(){publicvoidrun(){newListaDinamica().setVisible(true);}});}privatejavax.swing.JButtonjButton1;privatejavax.swing.JListjList1;privatejavax.swing.JScrollPanejScrollPane1;}
Ai vc pode chamar atualizaLista() de onde quiser.
e pode passa pra outro Frame o ResultSet que é tratado no metodo atualizaLista();
Y
yorgan
Só mais uma coisa, de uma olhada em MVC para separar as camadas da sua aplicação. Deixar tudo na view certamente vai dar dor de cabeça depois.
[]´s
Daniel
C
criador
Já foi resolvido este problema?
Se ainda não, talvez posso ajudá-lo.
V
ViniGodoy
Qual é o problema de fazer:
List<String> lista = new ArrayList<String>();
while(rs.next()){
//Dica: Use o nome do campo, não o índice
lista.add(rs.getString("Nome"));
}
71C4700 Deu certo isso q vc falou. Agora eu chamo o AtualizaLista na hora que ele entra (o metódo da classe pela construtor da classe). Deu OK! Obrigado…
yorgan
Essa está sendo a maior das dores de cabeça (dor de cabeça boa!!!). O cliente QUER DE QUALQUER JEITO MVC e isso está me tomando um tempo maior. Mas vou fazer assim para despois transferir para JSP (trampo futuro, que vai garantir + leite para minhas 3 filhas). Mas mesmo assim obrigado, de novo!
ViniGodoy
Eu pensei em usar isso… até no NetBeans e no Eclipse ele grita por " Expected" que já tava me deixando louco…
Valew tb. Obrigado…
criador
Testei e não deu erro mais (o que queria está OK!) Vc tem outra idéia? Estou aberto para sugestões…