Estou com algumas dificuldades em JList, como adicionar e remover algo da lista

Estou com algumas dificuldades em JList, como adicionar e remover algo da lista.

Se repara no meu código ele adiciona o Nome em uma linha, Sobrenome em outra e a Idade também, alguém sabe como colocar o Nome, Sobrenome e Idade na mesma linha e como remover a linha selecionada?

[code]mport javax.swing.*;

import java.awt.;
import java.awt.event.
;

public class SwingExemplo3
extends JFrame
implements ActionListener {

private JLabel lblNome = new JLabel("Nome");

private JTextField txtNome = new JTextField(“Zeh”);
private JLabel lblSobreNome = new JLabel(“Sobre Nome”);
private JTextField txtSobreNome = new JTextField(“Silva”);
private JLabel lblIdade = new JLabel(“Idade”);
private JTextField txtIdade = new JTextField(“20”);

private JPanel pnlCampos = null; //painel Campos
private JPanel pnlBotoes = null; //painel Campos

JList lista;
JButton btAdicionar = new JButton(“Adicionar”);
JButton btRemover = new JButton(“Remover”);
JPanel listPanel = new JPanel(); //Painel para lista :slight_smile:
JScrollPane scroll;
DefaultListModel listModel = new DefaultListModel();

JPanel dadosSelecionados = new JPanel( new BorderLayout() );

public SwingExemplo3() {

setTitle("Vendas"); //titulo da janela

// Adiciona o botao no south
getPnlBotoes().add(getBtAdicionar(), BorderLayout.WEST);
getPnlBotoes().add(getBtRemover(), BorderLayout.CENTER);
getContentPane().add(getPnlBotoes(), BorderLayout.SOUTH);

getContentPane().add(getPnlCampos(), BorderLayout.NORTH); //coloca o pnlCampos no Norte

getContentPane().add(getScroll(), BorderLayout.CENTER );

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(500,400);
show();   

}

public JScrollPane getScroll(){

lista = new JList(listModel);
lista.setVisibleRowCount(4);
scroll = new JScrollPane(lista);

return scroll;

}

public JPanel getPnlCampos(){

if(pnlCampos==null){
			
    pnlCampos = new JPanel(new GridLayout(3, 2)); //divide o painel em uma "matriz" 1,2

    pnlCampos.add(lblNome); //o painel Campos recebe lblNome
    pnlCampos.add(txtNome); //o painel Campos recebe txtNome

    pnlCampos.add(lblSobreNome); //o painel Campos recebe lblNome
    pnlCampos.add(txtSobreNome); //o painel Campos recebe txtNome

    pnlCampos.add(lblIdade); //o painel Campos recebe lblNome
    pnlCampos.add(txtIdade); //o painel Campos recebe txtNome
	
}
return pnlCampos;

}

public JPanel getPnlBotoes() {
if(pnlBotoes==null){
pnlBotoes = new JPanel();

}
return pnlBotoes;

}

public JButton getBtAdicionar(){

btAdicionar.addActionListener(this);
return btAdicionar;

}
public JButton getBtRemover(){

btRemover.removeActionListener(this);
return btRemover;

}

public void actionPerformed(ActionEvent e) {

 if(e.getActionCommand().equals("Adicionar"))
 {
 	/*Se repara no meu código ele adiciona o Nome em uma linha,
 	 *  Sobrenome em outra e a Idade também, alguém  sabe como colocar o Nome,
 	 *  Sobrenome e Idade na mesma linha */
  listModel.addElement(txtNome.getText());
  listModel.addElement(txtSobreNome.getText());
  listModel.addElement(txtIdade.getText());
           getContentPane().invalidate();
           getContentPane().validate();
 }
 else
    if(e.getActionCommand().equals("Remover"))
    {       
    	//Aqui estou tentando remover alguma linha selecionada, + nao deu certo
    	
    	//listModel.removeElement(lista.getListSelectionListeners()); 
    	//listModel.removeElement(txtNome.getText());
    	
    	//lista.getListSelectionListeners();
    	//listModel.removeElement(lista.getSelectedValue());
           listModel.remove(lista.getSelectedIndex());   	
    	
    	
    }

}

public static void main(String args[]) {
SwingExemplo3 janela = new SwingExemplo3();
}
}

[/code]

Ass.: Adriano Barbosa
adrianosb@gmail.com

Troque isto:

listModel.addElement(txtNome.getText()); listModel.addElement(txtSobreNome.getText()); listModel.addElement(txtIdade.getText());

Por isto:

Ou crie um renderer, que é mais decente.

Muito Obrigado… + alguem pode me ajuda? Remover um item selecionado…

Provavelmente o seu List Model já possui um método remove().

Sim jah tem, + ele nao esta removendo … + obrigado…

Agora deu Certo, vou passar o codigo correto

[code]import javax.swing.*;

import java.awt.;
import java.awt.event.
;

public class SwingExemplo3
extends JFrame
implements ActionListener {

private JLabel lblNome = new JLabel("Nome");

private JTextField txtNome = new JTextField(“Zeh”);
private JLabel lblSobreNome = new JLabel(“Sobre Nome”);
private JTextField txtSobreNome = new JTextField(“Silva”);
private JLabel lblIdade = new JLabel(“Idade”);
private JTextField txtIdade = new JTextField(“20”);

private JPanel pnlCampos = null; //painel Campos
private JPanel pnlBotoes = null; //painel Campos

JList lista;
JButton btAdicionar = new JButton(“Adicionar”);
JButton btRemover = new JButton(“Remover”);
JPanel listPanel = new JPanel(); //Painel para lista :slight_smile:
JScrollPane scroll;
DefaultListModel listModel = new DefaultListModel();

JPanel dadosSelecionados = new JPanel( new BorderLayout() );

public SwingExemplo3() {

setTitle("Vendas"); //titulo da janela

// Adiciona o botao no south
getPnlBotoes().add(getBtAdicionar(), BorderLayout.WEST);
getPnlBotoes().add(getBtRemover(), BorderLayout.CENTER);
getContentPane().add(getPnlBotoes(), BorderLayout.SOUTH);

getContentPane().add(getPnlCampos(), BorderLayout.NORTH); //coloca o pnlCampos no Norte

getContentPane().add(getScroll(), BorderLayout.CENTER );

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(500,400);
show();

}

public JScrollPane getScroll(){

lista = new JList(listModel);
lista.setVisibleRowCount(4);
scroll = new JScrollPane(lista);

return scroll;

}

public JPanel getPnlCampos(){

if(pnlCampos==null){

    pnlCampos = new JPanel(new GridLayout(3, 2)); //divide o painel em uma "matriz" 1,2

    pnlCampos.add(lblNome); //o painel Campos recebe lblNome
    pnlCampos.add(txtNome); //o painel Campos recebe txtNome

    pnlCampos.add(lblSobreNome); //o painel Campos recebe lblNome
    pnlCampos.add(txtSobreNome); //o painel Campos recebe txtNome

    pnlCampos.add(lblIdade); //o painel Campos recebe lblNome
    pnlCampos.add(txtIdade); //o painel Campos recebe txtNome

}
return pnlCampos;

}

public JPanel getPnlBotoes() {
if(pnlBotoes==null){
pnlBotoes = new JPanel();

}
return pnlBotoes;

}

public JButton getBtAdicionar(){

btAdicionar.addActionListener(this);
return btAdicionar;

}
public JButton getBtRemover(){

btRemover.addActionListener(this);
return btRemover;

}

public void actionPerformed(ActionEvent e) {

 if(e.getActionCommand().equals("Adicionar"))
 {
 	/*Se repara no meu código ele adiciona o Nome em uma linha,
 	 *  Sobrenome em outra e a Idade também, alguém  sabe como colocar o Nome,
 	 *  Sobrenome e Idade na mesma linha */
  listModel.addElement(txtNome.getText()+" "+txtSobreNome.getText()+" "+txtIdade.getText());
  /*listModel.addElement(txtSobreNome.getText());
  listModel.addElement(txtIdade.getText());*/
           getContentPane().invalidate();
           getContentPane().validate();
 }
 else
    if(e.getActionCommand().equals("Remover"))
    {
    	
    	int index = lista.getSelectedIndex();
    	listModel.remove(index);


    }

}

public static void main(String args[]) {
SwingExemplo3 janela = new SwingExemplo3();
}
}
[/code]

Obrigado

Bom dia !! Digamos que depois de inserir os dados na JList eu queira gerar um arquivo txt através de um JButton por exemplo, qual seria o procedimento?