Conteúdo na JList

7 respostas
K

Tenho que colocar em um JList os dados de uma tabela para que o usuário selecione o que vai usar. Segue o código, não consegui colocar os dados na JList e não sei como arrumar.

Está dando o erro: java.lang.NullPointerException apontando para as linhas comentadas. Tem algo de errado no método atualizaLista()
import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.DefaultListModel;
import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.border.EmptyBorder;
import javax.swing.table.DefaultTableModel;
import javax.swing.JScrollPane;
import javax.swing.JList;
import java.awt.Button;
import java.awt.List;
import java.awt.Label;
import javax.swing.JLabel;

import br.com.bean.TabeladePreco;
import br.com.dao.TabeladePrecoDao;
import br.com.exception.DaoException;
import br.com.util.MascaraUtil;

import java.awt.Font;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.logging.Logger;

import javax.swing.JButton;
import javax.swing.JTextField;
import java.awt.Toolkit;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class CarrinhoPedido extends JFrame {

	private JPanel contentPane;
	private JTextField textField;
	private JList list;
	private JList list_1;
	
	private TabeladePrecoDao tabDao = new TabeladePrecoDao();
	private JList<String> lista;
	
	private DefaultListModel<String> dlm = new DefaultListModel<String>();

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					CarrinhoPedido frame = new CarrinhoPedido();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 * @throws DaoException 
	 */
	public CarrinhoPedido() throws DaoException {
		
		
		setIconImage(Toolkit.getDefaultToolkit().getImage(CarrinhoPedido.class.getResource("/br/com/images/logo_transp.png")));
		setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		setBounds(100, 100, 581, 366);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);
		
		JPanel panel = new JPanel();
		panel.setBounds(0, 0, 565, 328);
		contentPane.add(panel);
		panel.setLayout(null);
		
		Button button = new Button("Adicionar >>");
		button.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				//adicionaProteses();
			}
		});
		button.setBounds(250, 93, 70, 22);
		panel.add(button);
		
		Button button_1 = new Button("<<Remover");
		button_1.setBounds(250, 152, 70, 22);
		panel.add(button_1);
		
		List list_1 = new List();
		list_1.setBounds(345, 79, 210, 182);
		panel.add(list_1);
		atualizaLista(lista);  //Aponta pra cá o erro
		
		List list = new List();
		list.setBounds(10, 79, 222, 182);
		panel.add(list);
	//	atualizaLista(lista);
		
		JLabel lblPrtesesDaTabela = new JLabel("Pr\u00F3teses da Tabela");
		lblPrtesesDaTabela.setFont(new Font("Tahoma", Font.PLAIN, 13));
		lblPrtesesDaTabela.setBounds(40, 59, 124, 14);
		panel.add(lblPrtesesDaTabela);
		
		JLabel lblFormaoDoPedido = new JLabel("Forma\u00E7\u00E3o do Pedido");
		lblFormaoDoPedido.setFont(new Font("Tahoma", Font.PLAIN, 13));
		lblFormaoDoPedido.setBounds(374, 59, 136, 14);
		panel.add(lblFormaoDoPedido);
		
		JLabel lblFormaoDoPedido_1 = new JLabel("Forma\u00E7\u00E3o do Pedido");
		lblFormaoDoPedido_1.setFont(new Font("Kalinga", Font.BOLD, 16));
		lblFormaoDoPedido_1.setBounds(205, 11, 207, 14);
		panel.add(lblFormaoDoPedido_1);
		
		JButton btnSalvar = new JButton("Concluir");
		btnSalvar.setBounds(391, 294, 89, 23);
		panel.add(btnSalvar);
		
		JLabel lblTotalPedido = new JLabel("Total Pedido:");
		lblTotalPedido.setFont(new Font("Arial Black", Font.PLAIN, 12));
		lblTotalPedido.setBounds(40, 298, 109, 14);
		panel.add(lblTotalPedido);
		
		textField = new JFormattedTextField(MascaraUtil.setMascara("R$###.##"));
		textField.setBounds(135, 295, 86, 20);
		panel.add(textField);
		textField.setColumns(10);
	
	}
	
		
		public void atualizaLista(JList list) throws DaoException{
			
			DefaultListModel<String> dlm = new DefaultListModel<String>();
			lista.setModel(dlm); //O erro aponta pra cá
			
	       // dlm.setRowCount(0); 
			ArrayList<TabeladePreco> listaTab  = new ArrayList<TabeladePreco>();
			listaTab = (ArrayList<TabeladePreco>) tabDao.consultarProteses();
	 		String dados[] = new String[3]; 
	 		String protese = new String();
			for (TabeladePreco obj : listaTab) {
				dados[0] = String.valueOf(obj.getNumProtese()) ;
				dados[1] = obj.getNomeProtese();
				dados[2] = obj.getTipoProtese();
			//	dados[3] = String.valueOf(obj.getPrecoProtese());
				protese = dados[0] + " / " + dados[1] + " / " + dados[2];
				((DefaultListModel<String>) lista.getModel()).addElement(protese); 
			//	lista.setListData(protese); 
			} 
			lista.repaint();
		}
DAO
public List<TabeladePreco> consultarProteses() throws DaoException{		
		Connection conn = DbUtil.getConnection();
		PreparedStatement statement = null;
		ResultSet result = null;
		List<TabeladePreco> listaTab = new ArrayList<TabeladePreco>();
		try {
			statement = conn.prepareStatement(CONSULTA_TABELADEPRECO);
			result = statement.executeQuery();
			while (result.next()) {
				TabeladePreco objTab = new TabeladePreco();
				objTab.setNumProtese(result.getInt(4));
				objTab.setNomeProtese(result.getString(2));
				objTab.setTipoProtese(result.getString(1));
				objTab.setPrecoProtese(result.getDouble(3));
				listaTab.add(objTab);
			}
		} catch (SQLException e) {
			throw new DaoException(e);
		} finally {
			DbUtil.close(conn, statement, result);
		}
		return listaTab;		
	}

7 Respostas

E
private JList<String> lista;

Você está rodando código com erro de compilação. Quando você roda código com erro de compilação (o que o Eclipse permite), você pode ter resultados inesperados :frowning:

K

entanglement:
private JList<String> lista;

Você está rodando código com erro de compilação. Quando você roda código com erro de compilação (o que o Eclipse permite), você pode ter resultados inesperados :(

O próprio Eclipse sugeriu isso =/

E

Hum, não tinha visto que a classe JList agora é genérica na versão 7 do Java :slight_smile:

E

Vou dar um exemplo.

package guj;

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;

/**
 * Note que a classe a seguir não serve para conter seus dados, serve apenas para você copiar seus dados do DAO para o
 * JList.
 */
class Protese {
    public int codigo;
    public String nome;
    public String tipo;
    public double preco;

    public Protese(int codigo, String nome, String tipo, double preco) {
        this.codigo = codigo;
        this.nome = nome;
        this.tipo = tipo;
        this.preco = preco;
    }

    public String toString() {
        return String.format("%04d - %s - %s", codigo, nome, tipo);
    }
}

public class ExemploJList3 extends JFrame {
    private JScrollPane scrollPane;
    private JList<Protese> list;
    private JPanel panel;
    private JButton btnConsulta1;
    private JButton btnConsulta2;
    private JButton btnLimparTudo;
    private JLabel label;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    ExemploJList3 frame = new ExemploJList3();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public ExemploJList3() {

        initComponents();
    }

    private void initComponents() {
        setTitle("Exemplo JList");
        setBounds(100, 100, 450, 300);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        getContentPane().setLayout(new BorderLayout(0, 0));
        getContentPane().add(getLabel(), BorderLayout.NORTH);
        getContentPane().add(getScrollPane(), BorderLayout.CENTER);
        getContentPane().add(getPanel(), BorderLayout.SOUTH);
    }

    private JScrollPane getScrollPane() {
        if (scrollPane == null) {
            scrollPane = new JScrollPane();
            scrollPane.add(getList());
            scrollPane.setViewportView(getList());
        }
        return scrollPane;
    }

    private JPanel getPanel() {
        if (panel == null) {
            panel = new JPanel();
            panel.add(getBtnConsulta1());
            panel.add(getBtnConsulta2());
            panel.add(getBtnLimparTudo());
        }
        return panel;
    }

    private JButton getBtnConsulta1() {
        if (btnConsulta1 == null) {
            btnConsulta1 = new JButton("Consulta 1");
            btnConsulta1.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    DefaultListModel<Protese> dlm = ((DefaultListModel<Protese>) getList().getModel());
                    dlm.clear();
                    dlm.addElement(new Protese(10, "MMX-1002", "Porcelana", 120.00));
                    dlm.addElement(new Protese(20, "LLX-1092", "Resina", 240.00));
                    dlm.addElement(new Protese(30, "OGX-0929", "Zircônia", 360.00));
                }
            });
        }
        return btnConsulta1;
    }

    private JButton getBtnConsulta2() {
        if (btnConsulta2 == null) {
            btnConsulta2 = new JButton("Consulta 2");
            btnConsulta2.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    DefaultListModel<Protese> dlm = ((DefaultListModel<Protese>) getList().getModel());
                    dlm.clear();
                    dlm.addElement(new Protese(40, "OSX-2292", "Titânio", 720.00));
                    dlm.addElement(new Protese(50, "OLX-7788", "Alumina", 102.00));
                }
            });
        }
        return btnConsulta2;
    }

    private JButton getBtnLimparTudo() {
        if (btnLimparTudo == null) {
            btnLimparTudo = new JButton("Limpar Tudo");
            btnLimparTudo.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    DefaultListModel<Protese> dlm = ((DefaultListModel<Protese>) getList().getModel());
                    dlm.clear();
                }
            });
        }
        return btnLimparTudo;
    }

    private JLabel getLabel() {
        if (label == null) {
            label = new JLabel(".");
        }
        return label;
    }

    private JList<Protese> getList() {
        if (list == null) {
            list = new JList();
            list = new JList<Protese>();
            list.setModel(new DefaultListModel<Protese>());
            list.addListSelectionListener(new ListSelectionListener() {
                public void valueChanged(ListSelectionEvent e) {
                    // Note que "e.getValueIsAdjusting" e "lstList.getSelectedValue() != null" abaixo
                    // não são enfeite: se você não tratar essa condição, você vai tomar um NullPointerException
                    if (!e.getValueIsAdjusting() && list.getSelectedValue() != null) {
                        getLabel().setText(String.format("Preço da prótese: %.2f", list.getSelectedValue().preco));
                    }
                }
            });
        }
        return list;
    }
}
K
entanglement:
Vou dar um exemplo.
package guj;

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;

/**
 * Note que a classe a seguir não serve para conter seus dados, serve apenas para você copiar seus dados do DAO para o
 * JList.
 */
class Protese {
    public int codigo;
    public String nome;
    public String tipo;
    public double preco;

    public Protese(int codigo, String nome, String tipo, double preco) {
        this.codigo = codigo;
        this.nome = nome;
        this.tipo = tipo;
        this.preco = preco;
    }

    public String toString() {
        return String.format("%04d - %s - %s", codigo, nome, tipo);
    }
}

public class ExemploJList3 extends JFrame {
    private JScrollPane scrollPane;
    private JList<Protese> list;
    private JPanel panel;
    private JButton btnConsulta1;
    private JButton btnConsulta2;
    private JButton btnLimparTudo;
    private JLabel label;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    ExemploJList3 frame = new ExemploJList3();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public ExemploJList3() {

        initComponents();
    }

    private void initComponents() {
        setTitle("Exemplo JList");
        setBounds(100, 100, 450, 300);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        getContentPane().setLayout(new BorderLayout(0, 0));
        getContentPane().add(getLabel(), BorderLayout.NORTH);
        getContentPane().add(getScrollPane(), BorderLayout.CENTER);
        getContentPane().add(getPanel(), BorderLayout.SOUTH);
    }

    private JScrollPane getScrollPane() {
        if (scrollPane == null) {
            scrollPane = new JScrollPane();
            scrollPane.add(getList());
            scrollPane.setViewportView(getList());
        }
        return scrollPane;
    }

    private JPanel getPanel() {
        if (panel == null) {
            panel = new JPanel();
            panel.add(getBtnConsulta1());
            panel.add(getBtnConsulta2());
            panel.add(getBtnLimparTudo());
        }
        return panel;
    }

    private JButton getBtnConsulta1() {
        if (btnConsulta1 == null) {
            btnConsulta1 = new JButton("Consulta 1");
            btnConsulta1.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    DefaultListModel<Protese> dlm = ((DefaultListModel<Protese>) getList().getModel());
                    dlm.clear();
                    dlm.addElement(new Protese(10, "MMX-1002", "Porcelana", 120.00));
                    dlm.addElement(new Protese(20, "LLX-1092", "Resina", 240.00));
                    dlm.addElement(new Protese(30, "OGX-0929", "Zircônia", 360.00));
                }
            });
        }
        return btnConsulta1;
    }

    private JButton getBtnConsulta2() {
        if (btnConsulta2 == null) {
            btnConsulta2 = new JButton("Consulta 2");
            btnConsulta2.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    DefaultListModel<Protese> dlm = ((DefaultListModel<Protese>) getList().getModel());
                    dlm.clear();
                    dlm.addElement(new Protese(40, "OSX-2292", "Titânio", 720.00));
                    dlm.addElement(new Protese(50, "OLX-7788", "Alumina", 102.00));
                }
            });
        }
        return btnConsulta2;
    }

    private JButton getBtnLimparTudo() {
        if (btnLimparTudo == null) {
            btnLimparTudo = new JButton("Limpar Tudo");
            btnLimparTudo.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    DefaultListModel<Protese> dlm = ((DefaultListModel<Protese>) getList().getModel());
                    dlm.clear();
                }
            });
        }
        return btnLimparTudo;
    }

    private JLabel getLabel() {
        if (label == null) {
            label = new JLabel(".");
        }
        return label;
    }

    private JList<Protese> getList() {
        if (list == null) {
            list = new JList();
            list = new JList<Protese>();
            list.setModel(new DefaultListModel<Protese>());
            list.addListSelectionListener(new ListSelectionListener() {
                public void valueChanged(ListSelectionEvent e) {
                    // Note que "e.getValueIsAdjusting" e "lstList.getSelectedValue() != null" abaixo
                    // não são enfeite: se você não tratar essa condição, você vai tomar um NullPointerException
                    if (!e.getValueIsAdjusting() && list.getSelectedValue() != null) {
                        getLabel().setText(String.format("Preço da prótese: %.2f", list.getSelectedValue().preco));
                    }
                }
            });
        }
        return list;
    }
}

entanglement, obrigadão pelo exemplo!!
Achei interessante.. vou ver se consigo adaptá-lo para o jeito que preciso (;

K

Estaria certo fazer algo desse tipo? Pois tenho que fazer um ArrayList para buscar os dados na tabela do banco e depois acrescentar na JList
Não sei o que alterar na 7ª linha para que pare de dar null, no banco tem 2 informações armazenadas e na minha tabela de preço os dados aparecem.

public void actionPerformed(ActionEvent e) {  
                    DefaultListModel<Protese> dlm = ((DefaultListModel<Protese>) getList().getModel());  
                    dlm.clear();  
                    
                    ArrayList<TabeladePreco> listaTab  = new ArrayList<TabeladePreco>();                     
						try {
							listaTab = (ArrayList<TabeladePreco>) tabDao.consultarProteses(); //Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
						} catch (DaoException e1) {
							// TODO Auto-generated catch block
							e1.printStackTrace();
						}					
                      String dados[] = new String[4]; 
                      for (TabeladePreco obj : listaTab) {
				dados[0] = String.valueOf(obj.getNumProtese()) ;
				dados[1] = obj.getNomeProtese();
				dados[2] = obj.getTipoProtese();
				dados[3] = String.valueOf(obj.getPrecoProtese());
                     
                    dlm.addElement(new Protese(Integer.parseInt(dados[0]), dados[1], dados[2], Double.parseDouble(dados[3])));
                    dlm.addElement(new Protese(10, "MMX-1002", "Porcelana", 120.00));
} }
K

Ainda utilizando a classe que eu tinha feito antes.. dá um erro de NullPointerException quando uso o repaint, aí tiro e funciona a tela, mas a lista fica em branco

public void atualizaLista(JList<String> list) throws DaoException{						
			DefaultListModel<String> dlm = new DefaultListModel<String>();
		
			
	        dlm.addElement(""); 
			ArrayList<TabeladePreco> listaTab  = new ArrayList<TabeladePreco>();
			listaTab = (ArrayList<TabeladePreco>) tabDao.consultarProteses();
	 		String dados[] = new String[3]; 
	 		String protese=null;
	 	

			for (TabeladePreco obj : listaTab) {
				dados[0] = String.valueOf(obj.getNumProtese()) ;
				dados[1] = obj.getNomeProtese();
				dados[2] = obj.getTipoProtese();
			//	dados[3] = String.valueOf(obj.getPrecoProtese());
				protese = dados[0] + " / " + dados[1] + " / " + dados[2];
			
						System.out.println(protese); //está buscando os dados								

			} 
			dlm.add(dlm.getSize(), protese);		

			lista.repaint(); //O erro aponta pra cá, teria algo que possa substituir o repaint? Quando tiro essa linha a tela aparece, porém com a lista vazia
		}
Criado 25 de junho de 2013
Ultima resposta 6 de jul. de 2013
Respostas 7
Participantes 2