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

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…

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!

Boa Tarde Lina,

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

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

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

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!


Olá amigo

manda o código que eu dou uma olhada.

Silvio Guedes

[quote=silviogs]Olá amigo

manda o código que eu dou uma olhada.

Silvio Guedes[/quote]

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

}
}[/code]

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!

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






[quote=Nicholas]Silvio segue a sequência de telas do aplicativo pra você entender melhor…






[/quote]

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

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

Obrigado!

[quote=edgar_coutinho]Nicholas! estou com o mesmo problema ! caso descubra como fazer se puder me ajudar !

Obrigado![/quote]

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