Mostrar dados em pesquisa por jtable

Olá a todos. Gostaria de uma ajudinha ae

Eu recebo num jtextfield um código de um contrato.
no outro jtextfield eu recebo o nome do contrato, referente a este codigo.
Exemplo:

Cod: 01
Nome: Empresa 01

só que agora pra fazer a busca eu preciso que apareça o NOME também, eu consegui mostrar somente o código. Como resolvo isso? Valeu!

[code]private void jTTabelaLinhaSelecionada(JTable tabela)
{
if (tabela.getSelectedRow() != -1)
{

        txtCodigoContrato.setText((String.valueOf(notasf.get(tabela.getSelectedRow()).getCodContrato())));
        

    else
    {
        //JOptionPane.showMessageDialog(this, "Não há linhas para selecionar");
    }
}[/code]

Alguma solução, por favor?

Por acaso não é isso?

txtNomeContrato.setText((String.valueOf(notasf.get(tabela.getSelectedRow()).getNomeContrato())));

[quote=cbr0wn]Por acaso não é isso?

txtNomeContrato.setText((String.valueOf(notasf.get(tabela.getSelectedRow()).getNomeContrato()))); [/quote]

teoricamente sim, mas eu preciso que o nome seja referente ao código que aparecer

se o codigo da pesquisa for:

01 - empresa 1
02 - empresa 2

e nao 01 - qualquer nome

Então Rafa,

 Quando vc faz notasf.get(tabela.getSelectedRow()) isso retorna um objeto certo? Esse objeto tem código, nome, etc. Ou seja, o nome e o código se referem ao mesmo objeto. Não é qualquer nome. É o nome referente àquele código.
 Tenta fazer da maneira que lhe falei apenas adaptando os nomes e se não der certo, cole o erro para nós verificarmos.

[quote=cbr0wn]Então Rafa,

 Quando vc faz notasf.get(tabela.getSelectedRow()) isso retorna um objeto certo? Esse objeto tem código, nome, etc. Ou seja, o nome e o código se referem ao mesmo objeto. Não é qualquer nome. É o nome referente àquele código.
 Tenta fazer da maneira que lhe falei apenas adaptando os nomes e se não der certo, cole o erro para nós verificarmos.[/quote]

Me expressei mal, esqueci de dizer uma coisa

realmente desse jeito da certo, mas em notasf eu não tenho NomeContrato, somente o CodContrato.
o NomeContrato eu só tenho em lista de contratos, mas ai caso eu fizer em contratos ele me retorna NullPointerException (claro, ele vai retornar nulo pq nao nada mesmo, pois estao tudo em notasf)

Exemplo:

txtNomeContrato.setText((String.valueOf(contratos.get(tabela.getSelectedRow()).getNomeContrato())));

Se eu fizer isso, ele vai mostrar o codigo no jtextfield do nome também, mas teria um jeito de converter o codigo para o nome do contrato?

txtNomeContrato.setText((String.valueOf(notasf.get(tabela.getSelectedRow()).getCodContrato())));

Provavelmente vc não está usando o hibernate, certo?

então você pode criar um DAO que recebe o codigo do contrato e retorna o nome desse contrato. Dessa maneira seu código ficaria mais ou menos assim:

txtNomeContrato.setText(pesquisaDAO.buscaNomeContrato(notasf.get(tabela.getSelectedRow()).getCodContrato())); 

Se por acaso vc estiver usando o hibernate:

txtNomeContrato.setText((String.valueOf(notasf.get(tabela.getSelectedRow()).getCodContrato().getNomeContrato)));   

Show de bola. Criei o DAO e fiz um while e deu certo.

Aproveitando o tópico, vc sabe como eu resolvo este problema? No codigo abaixo eu tenho um cbIDContrato que era um ComboBox e nele vem um objeto.
Agora no lugar deste ComboBox é um jTextField que recebe o código.
Como eu faço pra ele aceitar isso? seja recebendo objeto ou string…

public void mostraValorContrato() throws SQLException { Contrato contrato = new Contrato(); ContratoDao dao = new ContratoDao(); contrato = (Contrato) cbIDContrato.getSelectedItem(); dao.valorContrato(contrato.getCodContrato()); lblValorContrato.setText(dao.valorContrato); }

Valeu!

rafa120,

Se isso agora é um JTextField, vc pode criar um DAO que recebe o número do contrato e retorna o objeto contrato. Então seu código ficaria mais ou menos da seguinte maneira:
public void mostraValorContrato() throws SQLException   
{   
    Contrato contrato = new Contrato();   
    ContratoDao dao = new ContratoDao();   
    contrato = dao.retornaObjContrato(Integer.parseInt(jtNumeroContrato.getText()));
    lblValorContrato.setText(dao.valorContrato(contrato.getCodContrato()));
}

Isso serve considerando que a sua tabela no banco de dados tem uma chave primária normal, mas se ela for composta, vc precisará de todos os campos que compõem a chave composta.

Esqueci de dizer uma coisa: se você for criar esse outro DAO poderá inutilizar o DAO que retorna o nome do contrato, pois se você tem o objeto Contrato terá todas as suas informações (inclusive o nome).

Veja o que ele me retorna:

incompatible types
required: contratos.bean.Contrato
found: java.lang.String

rafa,

  Sinceramente, eu não entendi nada do que vc estáa fazendo. Talvez vc poderia postar uma figura e mostrar mais partes do seu código. Apenas adiantando, seria mais interessante vc criar um objeto com todas as características que lhe interessam. Feito isso, crie um DAO que receba o código do contrato, preencha o objeto criado e retorne-o. Se for vários registros, você terá que retornar um list de objetos.

  Eu notei algumas coisas que você poderia melhorar no seu código, estou escrevendo cometários para você entender melhor
   public String valorContrato;   

   public String valorContrato(Integer codContrato) throws SQLException   
   {   
       String sql = "select c.cod_contrato,c.valor_contrato, valor_contrato "+                   //pq duas vezes o valor do contrato??
                   "from contrato c inner join nf n on c.cod_contrato = n.cod_contrato "+   
                   "where c.cod_contrato=? group by c.cod_contrato,c.valor_contrato";   
       PreparedStatement stmt = this.conexao.prepareStatement(sql);   
       stmt.setInt(1, codContrato);   
       ResultSet rs = stmt.executeQuery();   

/* ResultSet vc usa quando a sua consulta retorna vários registros (uma tabela por exemplo). Quando vc utiliza o método rs.next() vc está passando o cursor para a próxima linha da sua tabela. Por isso vc coloca ele em um while. Se vc vai retornar um único valor, não faz sentido percorrer várias linhas do seu select. Se você quer retornar o resultado inteiro do select aí sim faz sentido vc utilizar o Resultet e o while com rs.next(), mas dentro do while vc deve adicionar o objeto dentro de um List<Contrato> e retornar esse list.
*/
  
       while (rs.next())   
       {   
           valorContrato = rs.getString("valor_contrato");   
           //System.out.println("Valor contrato: "+valorContrato);   
       }   
  
       rs.close();   
       stmt.close();   
       return valorContrato;   
   }  

resolvido com o cod la de cima…era problema da classe!