Selecionar Linha da JTable e carregar dados para JDialog[RESOLVIDO]

12 respostas
N

Boa tarde Pessoal,

Sou iniciante em Java…
Estou precisando de um help com JTable.
Minha situação é a seguinte, no aplicativo que estou desenvolvendo tenho um JDialog para pesquisa de Clientes, que quando o usuário definir
o nome para pesquisa e clica no botão Ok, vai abrir outro JDialog com uma JTable listando o resultado da pesquisa… nesse mesmo JDialog possui uma
uma barra de ferramentas com botões para alterar, excluir…

–> Preciso saber como selecionar o resultado da pesquisa (clicar na linha da JTable) e clicar no botão alterar (que vai abrir uma nova JDialog carregando os dados cadastrais do cliente que foi selecionado na JTable).

Já está tudo desenvolvido, só estou com o problema de clicar na linha e carregar os dados pra um outro JDialog que vai abrir quando for escolhida a opção no botão alterar/excluir…

12 Respostas

L

Oi,

Existe um método do JTable chamado getValueAt() que retorna o conteudo da linha e coluna selecionada.
Como ele retorna um formato Object, você poderá receber os valores em uma String.

Depois disso você já terá as informações de sua tabela e seria só criar o novo JDialog.

Tchauzin!

N

Boa Tarde Lina,

Obrigado pela força… ainda não consegui chegar no resultado que preciso… mas qualquer coisa posto outra vez…

S

Olá amigo

tem uma resposta minha neste link, espero que isso lhe ajude:

http://www.guj.com.br/posts/list/122887.java

Um abraço

Silvio Guedes

N

silviogs:
Olá amigo

tem uma resposta minha neste link, espero que isso lhe ajude:

http://www.guj.com.br/posts/list/122887.java

Um abraço

Silvio Guedes

Bom dia Silvio!

Obrigado pela ajuda amigo! Tentei implementar o código mas não deu certo…
Vou postar meu código… si você puder me dar uma forcinha ai…
Obrigado!

N

N

S

Olá amigo

manda o código que eu dou uma olhada.

Silvio Guedes

N
silviogs:
Olá amigo

manda o código que eu dou uma olhada.

Silvio Guedes

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.text.*;
import javax.swing.table.*;
import java.text.*;
import java.sql.*;
import java.util.*;	
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
	

public class PesquisaCliente extends JDialog{
	
	JLabel Lnome,Lcpf,Largumento;
	JTextField Tnome,Tcpf;
	JButton ok,sair;
	MaskFormatter Mcpf; 
	Inicial janela;
	
	public PesquisaCliente (Frame owner,String title,boolean modal){
		
	super(owner,title,modal);
	Container tela = getContentPane();
	tela.setLayout(null);
	setSize(500,250);
	setLocationRelativeTo(null);
	setResizable(false);
	
	//--------- Máscara CPF -----------
	
	try{
		Mcpf = new MaskFormatter("###.###.###-##");
		Mcpf.setPlaceholderCharacter('_');
	}
	catch(ParseException excp){}
	
	
	//---------- Definição dos botões ----------
	
	//Botão ok
	ok = new JButton ("Ok");
	ok.setFont(new Font("Arial",Font.PLAIN,12));
	ok.setBounds (110,170,100,25);
	tela.add(ok);
	ok.addActionListener(new ActionListener(){
	public void actionPerformed(ActionEvent e) {
	janela = new Inicial(null,"Resultado da Pesquisa",true);
	janela.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
	janela.setVisible(true);
	dispose();
	}});
	
	
	
	//Botão Sair
	sair = new JButton ("Sair");
	sair.setFont(new Font("Arial",Font.PLAIN,12));
	sair.setBounds (215,170,100,25);
	tela.add(sair);
	
	//Ação Bsair
        sair.addActionListener(
        	new ActionListener(){
        		public void actionPerformed(ActionEvent e){
        			dispose();
        		}
        	}
        );

	//---------- Fim botões ------------


	//--------- Definição dos campos de texto ---------
	
	Tnome = new JTextField(50);
	Tnome.setBounds(110,80,300,25);
	tela.add(Tnome);
	
	Tcpf = new JFormattedTextField(Mcpf);
	Tcpf.setBounds(110,120,200,25);
	tela.add(Tcpf);	
		
	//---------- Fim campos de texto --------------


	//--------- Definição dos rótulos ----------
	
	Largumento = new JLabel("Informe um argumento para a pesquisa");
	Largumento.setBounds(50,25,350,20);	
	Largumento.setFont(new Font("Arial",Font.PLAIN,12));
	tela.add(Largumento);
	
	Lnome = new JLabel ("Nome");
	Lnome.setBounds(50,80,80,20);
	Lnome.setFont(new Font("Arial",Font.PLAIN,12));
	tela.add(Lnome);

	Lcpf = new JLabel ("Cpf");
	Lcpf.setBounds(50,120,80,20);
	Lcpf.setFont(new Font("Arial",Font.PLAIN,12));
	tela.add(Lcpf);
	
	//--------- Fim rótulos -----------
	
	}
	
	//---- Definição da Classe Inicial ----
	
	private class Inicial extends JDialog{
	private Connection con;
	private JTable tabela;
	private JButton pesquisar,alterar,excluir,detalhar,relatorio,sair;
	private JToolBar ferramentas;
	private ImageIcon imagens[];
	private AlterarCliente JDialogAlterar;
	
		private Inicial(Frame owner,String title,boolean modal){
		super(owner,title,modal);
		setSize(850,500);
		setLocationRelativeTo(null);
		setResizable(false);
		String url = "jdbc:odbc:Dbpl";
		String usuario = "";
		String senha = "";
		
		String icones[]={"imagens/img/pesquisar.png","imagens/img/alterar.png","imagens/img/excluir.png","imagens/img/detalhar.png","imagens/img/relatorio.png","imagens/img/sair.png"};
		imagens = new ImageIcon[6];
		for(int i = 0;i < 6;i++){
		imagens[i] = new ImageIcon(icones[i]);}
		ferramentas = new JToolBar();
		ferramentas.setRollover(true);
		ferramentas.setBounds(0,1,850,40);
		getContentPane().add(ferramentas);
		
		//Botão pesquisar
		pesquisar = new JButton(imagens[0]);
		ferramentas.add(pesquisar);
		pesquisar.setToolTipText("Nova Pesquisa");
		
		//Botão alterar
		alterar = new JButton(imagens[1]);
		ferramentas.add(alterar);
		alterar.setToolTipText("Alterar");
		alterar.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				JDialogAlterar = new AlterarCliente(null,"Alterar Cadastro",true);
				JDialogAlterar.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
				JDialogAlterar.setVisible(true);
			}
		});
		
		
		//Botão excluir
		excluir = new JButton(imagens[2]);
		ferramentas.add(excluir);
		excluir.setToolTipText("Excluir");
		
		//Botão detalhar
		detalhar = new JButton(imagens[3]);
		ferramentas.add(detalhar);
		detalhar.setToolTipText("Detalhar");
		
		//Botão relatório
		relatorio = new JButton(imagens[4]);
		ferramentas.add(relatorio);
		relatorio.setToolTipText("Relatório");
			
		
		//Botão sair
		sair = new JButton(imagens[5]);
		ferramentas.add(sair);
		sair.setToolTipText("Sair");
		sair.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				dispose();
			}});
		
		
		//Conecção com o Dbpl
		try
			{
			Class.forName( "sun.jdbc.odbc.JdbcOdbcDriver" );
			con = DriverManager.getConnection(url, usuario, senha);
			}
			catch (Exception e)
				{
				JOptionPane.showMessageDialog(null,"Conexão não estabelecida","Mensagem do Programa",JOptionPane.ERROR_MESSAGE);
					}
					buscaTabela();
		}
	
		//Busca Tabela
		private void buscaTabela(){
		Statement st;
		ResultSet res;
				
		try {
			  Vector cabecalho = new Vector();
			  Vector linhas = new Vector();
			  st = con.createStatement();
		      res = st.executeQuery("SELECT NOME,CPF,FAZENDA,MUNICIPIO_FAZENDA,UF_FAZENDA FROM CadastroDeClientes WHERE nome LIKE'%"+Tnome.getText()+"%' ORDER BY nome ASC");
	          res.next();
		      ResultSetMetaData rsmd = res.getMetaData();
	      
		      for (int i = 1; i <= rsmd.getColumnCount(); ++i)
		      	cabecalho.addElement(rsmd.getColumnName(i));
		      do{
		  		  linhas.addElement(proximaLinha(res,rsmd));
				}
			
			  while (res.next());	
			  //desabilita a edição das células da JTable
			  DefaultTableModel modelo = new DefaultTableModel(linhas,cabecalho);
			  tabela = new JTable(modelo){
			  public boolean isCellEditable(int linhas,int cabecalho){
			  return false;
			  }
			  };
			  
			  //Evento do mouse -----> ESTOU TRAVADO AQUI!!!
			  tabela.addMouseListener(new MouseAdapter(){
			  	public void mouseClicked(MouseEvent e){
			  		if(e.getClickCount() == 1){
			  		Codigo = tabela.getDefaultTableModel.getValueAt(tabela.getSelectedRow(),0);
			  		}
			  	}
			  });
			  
	          tabela.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
			  JScrollPane scroller = new JScrollPane(tabela);
	          getContentPane().add(scroller, BorderLayout.SOUTH);
		      validate();
		      st.close();
			  }
			  catch (SQLException sqlex) {
		      }
		      
		      	      
   }
    
	    //Configuração de Linhas
		private Vector proximaLinha(ResultSet rs, ResultSetMetaData rsmd ){
		Vector LinhaAtual = new Vector();
		
		try{
			  for (int i = 1; i <= rsmd.getColumnCount(); ++i)
			  switch(rsmd.getColumnType(i)){
				case Types.VARCHAR: LinhaAtual.addElement(rs.getString(i));
				break;
				case Types.TIMESTAMP: LinhaAtual.addElement(rs.getDate(i));
				break;
				case Types.INTEGER: LinhaAtual.addElement(new Long(rs.getLong(i)));
				break;
		    	}
		   }
		   
		catch(SQLException e) {
		}
		
		return LinhaAtual;
		}
}
}

Estou com dúvidas em relação ao código da linha 229 ---> Codigo = tabela.getDefaultTableModel.getValueAt(tabela.getSelectedRow(),0);
o que seria este [Código = .... ?], utilizo o cpf para fazer referência a cada cliente cadastrado... e não um contador...

Obrigado companheiro!

N

Silvio segue a sequência de telas do aplicativo pra você entender melhor…






N

Nicholas:
Silvio segue a sequência de telas do aplicativo pra você entender melhor…






Após selecionar a linha e clicar no botao alterar preciso que os dados referentes ao cliente apareçam na janela de alteração…

E

Nicholas! estou com o mesmo problema ! caso descubra como fazer se puder me ajudar !

Obrigado!

N

edgar_coutinho:
Nicholas! estou com o mesmo problema ! caso descubra como fazer se puder me ajudar !

Obrigado!

Boa Noite Edgar!

É o seguinte… para passar dados de uma tela “X” para uma tela “Y”, utilizei parâmetros na criação do objeto que chama a tela “Y”. E na tela “Y” criei Strings que recepcionam estes valores que são passados por parâmentro! Segue abaixo dois trechos de código. O primeiro é a tela “X” que possui uma JTable populada que ao ser selecionada uma linha e clicado no botão alterar instancia um JDialog (tela “Y”) com JTextFields com os valores correspondentes setados.

//Botão alterar
		ImageIcon imageButtonAlterarCliente = new ImageIcon(getClass().getResource("imagens/img/alterar.png"));
		alterar = new JButton(imageButtonAlterarCliente);
		ferramentas.add(alterar);
		alterar.setToolTipText("Alterar");
		alterar.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
			   if (tabela.getSelectedRow()< 0){
               	   JOptionPane.showMessageDialog(null,"Nenhum registro foi selecionado!",null,JOptionPane.ERROR_MESSAGE,null);
               	}
               	else
               	{	
                	String cpf = (String)tabela.getValueAt(tabela.getSelectedRow(),1);
                	
					try{
        			String url = "jdbc:odbc:Dbpl";
					String usuario = "";
					String senha = "";
					Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
					Connection con;
					con = DriverManager.getConnection(url,usuario,senha);
					Statement st = con.createStatement();
                	ResultSet rs = st.executeQuery("SELECT * FROM CadastroDeClientes WHERE CPF = '"+cpf+"'");
                	rs.next();
					String nome = (rs.getString("NOME"));
					String rg = (rs.getString("RG"));
					String cnpj = (rs.getString("CNPJ"));
					String insc = (rs.getString("INSC_ESTADUAL"));
					String endereco = (rs.getString("ENDERECO"));
					String cep = (rs.getString("CEP"));
					String municipio = (rs.getString("MUNICIPIO"));
					String uf = (rs.getString("UF"));
					String telefone = (rs.getString("TELEFONE"));
					String celular = (rs.getString("CELULAR"));
					String ipr = (rs.getString("IPR"));
					String fazenda = (rs.getString("FAZENDA"));
					String municipio_fazenda = (rs.getString("MUNICIPIO_FAZENDA"));
					String Tel_fazenda = (rs.getString("TEL_FAZENDA"));
					String uf_fazenda = (rs.getString("UF_FAZENDA"));
					String contato = (rs.getString("CONTATO"));
                	
               		AlterarCliente Alterar = new AlterarCliente(null,"Alterar",true,""+nome+"",""+cpf+"",""+rg+"",""+cnpj+"",""+insc+"",""+endereco+"",""+cep+"",""+municipio+"",""+uf+"",""+telefone+"",""+celular+"",""+ipr+"",""+fazenda+"",""+municipio_fazenda+"",""+Tel_fazenda+"",""+uf_fazenda+"",""+contato+"");
				    Alterar.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
					Alterar.setVisible(true);
					
                	
                       }
   			     	catch(Exception event)
					{
						JOptionPane.showMessageDialog(null," ERRO\nFalha de comunicação interna!","DataBase",JOptionPane.ERROR_MESSAGE);
					} 
						               	
					
               	}}});

TELA DE ALTERAÇÃO QUE FOI INSTANCIADA
*Nesta tela de alteração basicamente recepcionei os valores que foram passados por parâmetros e depois setei nos JTextField’s. Após isto é só fazer um update no banco de dados.

public AlterarCliente(Frame owner,String title,boolean modal,String ValueNome,String ValueCpf,String ValueRg,String ValueCnpj,String ValueInsc,String ValueEndereco,String ValueCep,String ValueMunicipio,String ValueUf,String ValueTelefone,String ValueCelular,String ValueIpr,String ValueFazenda,String ValueMunicipioFazenda,String ValueTelFazenda,String ValueUfFazenda,String ValueContato) {
    	super(owner,title,modal);
    	Container tela = getContentPane();
    	tela.setLayout(null);
    	setSize (610,550);
    	setResizable(false);
     	setLocationRelativeTo(null);

PARA SETAR OS VALORES NOS JTEXTFIELDS

Tcnpj.setText(ValueCnpj);

JDIALOG DE ALTERAÇÃO DE CADASTRO - UPDATE
Nesta tela os JTextFields já estão todos preenchidos com os dados recepcionados, o usuário pode alterar o que quiser e após clicar no botão ok o banco faz um getText nos TextFields e armazena novamente no banco.

//Botão ok
        Bok = new JButton ("Ok");
        Bok.setBounds (150,450,100,25);
        Bok.setFont(new Font("Arial",Font.PLAIN,12));
        tela.add (Bok);
        Bok.addActionListener(new ActionListener(){
        	public void actionPerformed(ActionEvent e){
	       	try{
        	String url = "jdbc:odbc:Dbpl";
			String usuario = "";
			String senha = "";
			Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
			Connection con;
			con = DriverManager.getConnection(url,usuario,senha);
			Statement st = con.createStatement();
			st.executeUpdate("UPDATE CadastroDeClientes SET NOME='"+TextAltNome.getText()+"', RG='"+Trg.getText()+"',INSC_ESTADUAL='"+TinscEst.getText()+"',ENDERECO='"+Tendereco.getText()+"',CEP='"+Tcep.getText()+"',MUNICIPIO='"+Tmunicipio.getText()+"',UF='"+Tuf.getText()+"',TELEFONE='"+Ttelefone.getText()+"',CELULAR='"+Tcelular.getText()+"',IPR='"+TinscProdutor.getText()+"',FAZENDA='"+Tfazenda.getText()+"',MUNICIPIO_FAZENDA='"+TmunicipioFaz.getText()+"',TEL_FAZENDA='"+TtelFazenda.getText()+"',UF_FAZENDA='"+TufFaz.getText()+"',CONTATO='"+Tcontato.getText()+"' WHERE CPF = '"+Tcpf.getText()+"'");
			TextAltNome.requestFocus();
			JOptionPane.showMessageDialog(null,"        Alteração efetuada \n            com sucesso!","DataBase",JOptionPane.INFORMATION_MESSAGE);
			st.close();
			con.close(); 
           	}
        	catch(Exception event)
			{
			JOptionPane.showMessageDialog(null,"                    ERRO\nFalha de comunicação interna!","DataBase",JOptionPane.ERROR_MESSAGE);
			}
			dispose();
        }});

Abraço

Nicholas Ferreira

Criado 6 de abril de 2009
Ultima resposta 4 de mai. de 2009
Respostas 12
Participantes 4