Como atualizar um JList

Olá,
Pessoal, estou fazendo fazendo um programa que o usúario seleciona um item em uma JList, abrindo assim uma tela para poder editar desse item. Essa tela de editar permite ao usuário a alterar o nome desse item.
Mas quando ele da um OK, o item que ele alterou continua com o nome antigo. Só é atualizado após o restart do programa.
Queria saber como faço para atualizar a JList sem ter que sair do programa.

Obrigado…

Brunno Tavares

To com o mesmo problema. Criei um programa que cadastra informações pessoais em um banco MySql ta funcionando legal mas, quando eu insiro ou um novo individuo ou altero um ja existante na JList não muda nada ate que eu reinicie o programa. Sera que alguem pode me ajudar ???
Desde ja agradeço.

o que que vc ta usando pra alimenta essa sua JList???

da pra vc usar DefaultListModel, um vetor de object ou um vector, eu aconselho o primeiro pois uso ele e não tenho problemas.

DefaultListModel opcoes= new DefaultListModel();
JList lista=new JList(opcoes);

pegue o indice do campo a ser alterado:

int index = lista.getSelectedIndex();

faça sua janela retornar uma String com o nome do campo após ter sido atualizado, exemplo bem basico:

String retorno=JOptionPane.showInputDialog("digite o novo nome do campo da lista: ");

ai depois vc apaga o nome do indice especifico que foi pego, e insere o nome atualizado no indice especifico tb.

acredito que isso resolva:

if (index != -1){
opcoes.remove(index);
opcoes.insertElementAt(retorno, index);
}

pelo menos pra mim aqui isso atualizo na hora…

a…eu coloquei o if ai pra não tenta altera caso o usuario não tenha selecionado nenhum item…

puts… respondi a pergunta de 2005 mais a de hj nada…kkkkkkkkkkkkk

acho q da pra vc usa de exemplo tb wagne23, vc vai inserir na JList o mesmo valor que no banco de dados?

se for isso, depois de da o insert table vc pega a mesma string e faz o q eu dexei no post anterior…

bom…espero ter ajudado…

Dá uma olhada nesse código

os métodos getContentPane().invalidate(); e getContentPane().validate(); são os responsáveis pela atualização do Jlist

01 import javax.swing.*;
02 import java.awt.*;
03 import java.awt.event.*;
04 
05 public class SwingExemplo3 extends JFrame implements ActionListener
06 {
07     JList lista;
08     JButton botaoAdicionar;
09     JTextField textField;
10     JPanel listPanel;
11     JPanel botaoPanel;
12     JScrollPane scroll;
13     DefaultListModel listModel;
14     
15     public SwingExemplo3()
16     {
17         super("GUJ - JList");
18         
19         textField = new JTextField("Digite algo");
20         botaoAdicionar = new JButton("Adicionar");        
21         listModel = new DefaultListModel();
22         listPanel = new JPanel();
23         botaoPanel = new JPanel();
24         
25         
26         // Adiciona um item inicial na lista
27         listModel.addElement("Item 1");
28         listModel.addElement("Item 2");
29         listModel.addElement("Item 3");
30         
31         // Configura a lista e adiciona ao painel
32         lista = new JList(listModel);
33         lista.setVisibleRowCount(3);
34         
35         scroll = new JScrollPane(lista);
36         
37         listPanel.add(scroll);
38         getContentPane().add(listPanel, BorderLayout.CENTER);
39     
40         // Adiciona o campo de texto e o botao ao painel
41         botaoAdicionar.addActionListener(this);
42         botaoPanel.add(textField);                        
43         botaoPanel.add(botaoAdicionar);
44         
45         getContentPane().add(botaoPanel, BorderLayout.SOUTH);
46         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);                
47         
48         // Mostra a janela
49         pack();
50         setVisible(true);
51     }
52     
53     public void actionPerformed(ActionEvent event)
54     {
55         if (textField.getText() != "") {
56             listModel.addElement(textField.getText());
57             getContentPane().invalidate();
58             getContentPane().validate();
59         }        
60     }
61         
62     public static void main(String args[])
63     {
64         SwingExemplo3 s = new SwingExemplo3();        
65     }
66 } 

[quote=SanjuanRJ]Dá uma olhada nesse código

os métodos getContentPane().invalidate(); e getContentPane().validate(); são os responsáveis pela atualização do Jlist
[/quote]

Na verdade, esses métodos mandam o Swing repintar a tela inteira. Um grande exagero.

Quando você altera um objeto, nenhuma notificação é dada à JList e, sem saber da alteração, ela não tem qualquer preocupação em repintar o seu conteúdo. O método invalidate() e validate() força isso, mas para o JFrame inteiro. Usado dessa forma é um desperdício enorme de recursos.

Então, quem avisa o JList de que os dados foram alterados? A reposta é simples: O ListModel.
O ListModel controla todos os dados da JList. Dessa forma, é responsabilidade dele avisar ao List que algum dado foi alterado.
Para fazer isso, use o método fireContentsChanged, passando os índices dos objetos alterados, se estiver implementando o seu próprio ListModel, ou use o método set, se estiver com o DefaultListModel.

Normalmente, a chamada é simples como:

Onde índice é o indice do elemento que mudou e elemento é o elemento que você alterou. O set automaticamente dará um fire para o seu list, que atualizará os dados imediatamente, sem repintar a tela toda.

1 curtida

Olha o que eu to fazendo

[code]…
private JList empregados;
private DefaultListModel empregadosModel;

private void fillEmpregadosModel(DefaultListModel model){
Collection lista = null;
try{
if(empregadoDAO != null){
lista = empregadoDAO.recuperaEmpregados();
Iterator it = lista.iterator();
while (it.hasNext()){
Empregado emp = (Empregado) it.next();
model.addElement(emp);
}
}
}catch(Exception e){
e.printStackTrace();
}
}

private void exibeEmpregado(Empregado empregado){
SimpleDateFormat formater = new SimpleDateFormat(“dd/MM/yyyy”);
if (empregado != null){
txtCPF.setText(empregado.getCpf());
txtMatricula.setText(empregado.getMatricula());
txtNome.setText(empregado.getNome());
txtNascimento.setText(formater.format(empregado.getNascimento()));
txtEndereco.setText(empregado.getEndereco());
txtComplemento.setText(empregado.getComplemento());
txtCep.setText(empregado.getCep());
txtBairro.setText(empregado.getBairro());
txtCidade.setText(empregado.getCidade());
txtSalario.setText(new Double (empregado.getSalario()).toString());
departamentos.getModel().setSelectedItem(empregado.getDepartamento());
estados.getModel().setSelectedItem(empregado.getEstado());
}


public void posInit(){
txtCPF.requestFocus();
desabilitaCampos();
ButtonHandler bh = new ButtonHandler();
incluir.addActionListener(bh);
alterar.addActionListener(bh);
excluir.addActionListener(bh);
salvar.addActionListener(bh);
cancelar.addActionListener(bh);
ListHandler lh = new ListHandler();
}

class ListHandler extends MouseAdapter{
public void mouseCliked(MouseEvent me){
int index = empregados.locationToIndex(me.getPoint());
Object obj = empregadosModel.get(index);
if(obj instanceof Empregado){
Empregado emp = (Empregado)obj;
exibeEmpregado(emp);
habilitaCampos();
incluir.setEnabled(false);
alterar.setEnabled(true);
excluir.setEnabled(true);
salvar.setEnabled(false);
cancelar.setEnabled(true);
}else{
desabilitaCampos();
incluir.setEnabled(true);
alterar.setEnabled(false);
excluir.setEnabled(false);
salvar.setEnabled(false);
cancelar.setEnabled(true);
}
}
}

[/code]

Não sei se da pra entender mas é mais ou menos isso, to iniciando em java agora então ainda to meio perdido então se algum puder me dizer exatamento no que eu estou errando eu ficaria muito grato…

Ai valeu pela ajuda agora ta funcionando legal. Valeu galera…