Conteúdo na JList

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()

[code]
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();
	}[/code]

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; }

    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:

[quote=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 :([/quote]

O próprio Eclipse sugeriu isso =/

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

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;
    }
}

[quote=entanglement]Vou dar um exemplo.

[code]
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 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;
}

}

[/code][/quote]

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

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.

[code]public void actionPerformed(ActionEvent e) {
DefaultListModel dlm = ((DefaultListModel) 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)); [/code]
                  }  
            }

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

[code]public void atualizaLista(JList list) throws DaoException{
DefaultListModel dlm = new DefaultListModel();

        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
	}[/code]