Problema: Mostrar os dados previamente cadastrados no BD na JTable!

2 respostas
danielfns

E ai pessoal, sou novo aqui e preciso muito da ajuda de vocês :lol:

é o seguinte, eu tenho um TableModel e quero que ele comece passando para a JTable os valores iniciais que JÁ ESTÃO NO BANCO DE DADOS... eu estou conseguindo tranquilamente passar os dados para o BD e após isso mostra-los na JTable, mas eu quero que ao iniciar a JTable ja tenha os valores que foram adicionados anteriormente (ou seja, o que ja esta previamente no BD)... espero ter sido claro :roll:

ajuda ai vai!

public class DaoCliente {
	
	Connection conexao;
	
	public DaoCliente(Connection conexao){
		this.conexao = conexao;		
	}
	
	public void insert(Clientes cli){
		try {
			Statement st = conexao.createStatement();
			st.execute("INSERT INTO clientes VALUES('" +cli.getNome()+"','" +
					 cli.getSexo() + "','" +
					 cli.getCodCliente() + "','" +
					 cli.getCpf() +"','" +
			         cli.getTelefone()+"')");
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
	public Map<Integer,Clientes> buscaTodosClientes(){ // aqui é onde ele faz a busca no BD
		Map<Integer,Clientes> lista = new TreeMap<Integer, Clientes>();
		try {
			Statement st = conexao.createStatement();
			ResultSet rs = st.executeQuery("SELECT * FROM clientes");	 			
			rs.first();
			while (rs.isAfterLast()){				
				Integer codigo = rs.getInt(0);
				String nome = rs.getString(1);
				Character sexo = rs.getString(2).charAt(0);
				String cpf = rs.getString(3);
				String telefone = rs.getString(4);
				
				Clientes cli = new Clientes(codigo,nome,sexo,cpf,telefone);
				lista.put(codigo,cli);
				rs.next();
			}
			
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return lista;
	}

}
public class UICadastroClientes extends Interfaces implements TableModelListener{
 
	private static UICadastroClientes tela;

	private JLabel lbTitulo;	
	private JButton btnInserir;
	
	private JTable listaClientes; 
	private TableModelCliente tmClientes;
	

	private UICadastroClientes(Programas programa) {
		super(programa, "Clientes");
		this.setSize(new Dimension(600, 400));

		Container cpFrame = this.getContentPane();
		cpFrame.setLayout(new BorderLayout());

		lbTitulo = new JLabel("Clientes Cadastrados: ");
		cpFrame.add(lbTitulo, BorderLayout.NORTH);
		
		tmClientes = new TableModelCliente(meuPrograma.getListaClientes());
		tmClientes.addTableModelListener(this);
		listaClientes = new JTable(tmClientes);	
		cpFrame.add(listaClientes, BorderLayout.CENTER);

		btnInserir = new JButton("Novo Cliente");
		btnInserir.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				abreTelaNovoCliente();
			}
		});

		cpFrame.add(btnInserir, BorderLayout.SOUTH);

	}

	public static UICadastroClientes getInstance(Programas programa) {
		if (tela == null) {
			tela = new UICadastroClientes(programa);
		}
		return tela;
	}

	private void abreTelaNovoCliente() {
		UIInsereCliente novoCliente = UIInsereCliente.getInstance(meuPrograma,tmClientes);
		novoCliente.setVisible(true);
	}

	public void tableChanged(TableModelEvent arg0) {
		this.invalidate();
		this.repaint();		
	}

}
public class Programas {

	Interfaces menu;
	Map<Integer,Clientes> listaClientes;
	Connection conexao;
	DaoCliente daoCliente;
	
	public Programas(){
		menu = new UIMenu(this); 		
		this.criaConexao();
		this.daoCliente =new DaoCliente(conexao);
		listaClientes = daoCliente.buscaTodosClientes();
	}
	
	public void criaConexao() {
		if (conexao == null){
			try {
				Class.forName("com.mysql.jdbc.Driver");				
			} catch (ClassNotFoundException e) {
				e.printStackTrace();
			}
			
			try {
				conexao = 
					DriverManager.getConnection("jdbc:mysql://localhost/Loja?user=root&password=root");
			} catch (SQLException e) {
				e.printStackTrace();
			}

		}
		
	}

	public static void main(String[] args){
		Programas meuPrograma = new Programas();
		meuPrograma.resolvaProblema();
	}

	private void resolvaProblema() {
		menu.setVisible(true);			
	}	
	
	protected void finalize() throws Throwable {		
		super.finalize(); 
		conexao.close();
	}

	public void adicionaCliente(Clientes cli){
		listaClientes.put(cli.getCodCliente(), cli);
		daoCliente.insert(cli);
	}
	
	public Map <Integer,Clientes> getListaClientes(){
		return listaClientes;
	}
}
public class TableModelCliente extends DefaultTableModel {

	private Map<Integer,Clientes> listaClientes;
	private DaoCliente listaDobanco;
	
	
	public TableModelCliente(Map<Integer,Clientes> lista){
		this.listaClientes = lista;
		
	}
	
	public int getColumnCount() {
		return 5;
	}

	public String getColumnName(int coluna) {	
		switch(coluna){
			case  0:return "Código";
			case  1:return "Nome";
			case  2:return "Sexo";
			case  3:return "CPF";
			case  4:return "Telefone";
			default:return "";
		}
	}

	public Object getValueAt(int linha, int coluna) {
		if (linha == 0){
			return getColumnName(coluna);
		}
		
		List<Clientes> vetor = new ArrayList<Clientes>();		
		vetor.addAll(listaClientes.values());	
		Clientes cli = vetor.get(linha-1);				
		switch(coluna){
			case  0:return cli.getCodCliente();
			case  1:return cli.getNome();
			case  2:return cli.getSexo();
			case  3:return cli.getCpf();
			case  4:return cli.getTelefone();
			default:return "";
		}
		
	}

	public Class<?> getColumnClass(int coluna) {
		switch(coluna){
		case  0:return Integer.class;
		case  1:return String.class;
		case  2:return Character.class;
		case  3:return String.class;
		case  4:return String.class;
		default:return Object.class;
		}
	}

	public int getRowCount() {
		
		return listaClientes != null ? listaClientes.size() + 1  : 1;
	}

	public boolean isCellEditable(int linha, int coluna) {
		if (linha == 0){
			return false;	
		}else{
			
			return true;
		
	}
	}

}

brigadão pessoal :D

2 Respostas

J

Não sei se você está buscando produtividade ou simplesmente fazendo alguma atividade acadêmica, no meu caso eu bati bastante a cabeça com esse tipo de problema que você está tentando resolver, depois de muito suor acabei inclusive desenvolvendo um sistema desktop inteiro em java puro, como o proposto por você, depois de pesquisar bastante sobre as IDE´s disponíveis pra desenvolvimento em Java acabei optando pelo NetBeans, esse tipo de coisa é bem tranquila de fazer com ele, guardando as devidas proporções é bem parecido com o que o Delphi disponibiliza para o desenvolvedor, ainda mais na versão 6.0 do NetBeans, claro que se você estiver fazendo algum trabalho acadêmico não tem muita saída, vai ter que fazer conforme o “figurino” da matéria, mas deixo a minha dica pra você… espero que seja proveitosa… se você ainda não viu o netbeans 6.0 e seus relacionamentos com os componentes de dados sugiro que você dê uma conferida nas screencasts que tem no site www.netbeans.org.

[]´s

danielfns

jmozer:
Não sei se você está buscando produtividade ou simplesmente fazendo alguma atividade acadêmica, no meu caso eu bati bastante a cabeça com esse tipo de problema que você está tentando resolver, depois de muito suor acabei inclusive desenvolvendo um sistema desktop inteiro em java puro, como o proposto por você, depois de pesquisar bastante sobre as IDE´s disponíveis pra desenvolvimento em Java acabei optando pelo NetBeans, esse tipo de coisa é bem tranquila de fazer com ele, guardando as devidas proporções é bem parecido com o que o Delphi disponibiliza para o desenvolvedor, ainda mais na versão 6.0 do NetBeans, claro que se você estiver fazendo algum trabalho acadêmico não tem muita saída, vai ter que fazer conforme o “figurino” da matéria, mas deixo a minha dica pra você… espero que seja proveitosa… se você ainda não viu o netbeans 6.0 e seus relacionamentos com os componentes de dados sugiro que você dê uma conferida nas screencasts que tem no site www.netbeans.org.

[]´s

pois é…é trabalho academico sim… :?

mas valew a dica sim! pensei que capturar os dados seria tão facil quanto inserir, mas num ta sendo não :smiley:

vlw cara…abraço e brigadão!

Criado 6 de dezembro de 2007
Ultima resposta 6 de dez. de 2007
Respostas 2
Participantes 2