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

6 respostas
AdrianoSB

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?
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 :)
  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();
  }
}

Ass.: Adriano Barbosa
[email removido]

6 Respostas

danieldestro

Troque isto:

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

Por isto:

Ou crie um renderer, que é mais decente.

AdrianoSB

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

danieldestro

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

AdrianoSB

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

AdrianoSB
Agora deu Certo, vou passar o codigo correto
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 :)
  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();
  }
}

Obrigado

W.JUnior

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?

Criado 21 de novembro de 2004
Ultima resposta 30 de nov. de 2015
Respostas 6
Participantes 3