Inicializar jTextField static swing

Olá amigos

estou usando netbeans 6.1 com swing.

preciso que o jTextField fique estático pois a minha rotina é acessada de um outro frame, a minha rotina inicialmente foi declarada public void, mas como precisei mudar para public static void SelecionaCliente(), agora stá apresentando este erro:

Listaclientes.java:643: non-static variable jTextField1 cannot be referenced from a static context

como uso swing não posso mudar a inicialização dos componentes pois o netbeans não permite que se mude:

// Variables declaration - do not modify                     
private javax.swing.JTextField jTextField1;
public static void SelecionaCliente() throws Exception {
       
       try {
            stmt = bd.ConexaoBancoDados.conexao().createStatement(); 
            ResultSet rs = stmt.executeQuery("select * from clientes where id='" + id + "'");           
            rs.next();
            jTextField1.setText(rs.getString("codigo")); <--- o erro começa aqui. 
            jTextField2.setText(rs.getString("nome"));
            jTextField3.setText(rs.getString("fantasia"));
            jTextField4.setText(rs.getString("rg_inscestadual"));
            jTextField5.setText(rs.getString("cnpf_cnpj"));
            jTextField6.setText(rs.getString("datanascimento"));
            jTextField7.setText(rs.getString("endereco"));
            jTextField9.setText(rs.getString("cep"));
            jTextField9.setText(rs.getString("cidade"));
            jTextField10.setText(rs.getString("telefone"));
            jTextField11.setText(rs.getString("telcomercial"));            
            jTextField12.setText(rs.getString("celular"));
            jTextField13.setText(rs.getString("complemento"));
            jTextField14.setText(rs.getString("email"));
            jTextField15.setText(rs.getString("homepage"));
            jTextField16.setText(rs.getString("contato"));
            jTextField17.setText(rs.getString("cargo_contato"));
            jTextField18.setText(rs.getString("css"));       
            if ( rs.getString("tipocliente") == null )  {
               jComboBox1.setSelectedIndex(0);  
            }  
            else {
               jComboBox1.setSelectedItem(rs.getString("tipocliente"));        
            }
            
            if ( rs.getString("uf") == null )  {
               jComboBox2.setSelectedIndex(0);  
            }
            else {
               jComboBox2.setSelectedItem(rs.getString("uf"));
            }
            macao = "A";
            
       } catch (SQLException ex) {
                 Logger.getLogger(Listaclientes.class.getName()).log(Level.SEVERE, null, ex);
       }         
       stmt.close();  
}

Alguém poderia ajudar?

muito obrigado

Silvio Guedes

Grande Silvio, o netbenas deicha voce mecher na inicialização de variaveis - Codigo personalizado, caso resolva seu problema.
Clique com o botao direito no componente que deseja mudar a inicialização, agora vá em personaliza codigo. Pronto agora mude pra codigo personalizado o comboboxinho do lado esquerdo pra codigo personalizado ! Pronto, metodos tabajara de ser !!! :lol:
Mas se não resolver tenta implementar um listener, neste outro Frame, acho que funciona !

Usar um JTextField estático, assim como boa parte das variáveis estáticas, é uma péssima idéia.

No lugar, crie um método no seu JDialog para retornar o valor do JTextField. Por exemplo:

public class SeuDialog extends JDialog {
     private JTextField txtNome;

     //Métodos para desenhar o dialog

    public String getNome() {
        return txtNome.getText();
    }
}

//Depois, na hora de usar
SeuDialog janela = new SeuDialog();
janela.setVisible(true);
String nomeEscrito = janela.getNome();

Essa janela deve ser modal. Muitas vezes, ao invés de retornar somente o nome, é melhor também que a janela já faça a validação dos dados e o get retorne um objeto pronto. Por exemplo, se a janela for de cliente, o ideal é que ela faça a validação de todos os campos e o método de retorno seja simplesmente getCliente().

Você ainda pode adicionar um método na sua janela para dizer se a pessoa clicou em ok ou cancel.

Da mesma forma, crie um construtor na sua janela que, de posse de um objeto da classe Cliente, preencha todos os campos. Isso é bem útil para edição.

Vini Godoy, não comprendi direito o uso desta classe … é porque ela vai ser “global” ?
Desculpe a ignorancia, sou iniciante em java !

Grande 71C4700 :smiley:

valeu mesmo.

Também sou iniciante em Java, mas já programo há mais de 20 anos. Comecei bem cedo.

muito obrigado.

Silvio Guedes.

Não, ela não vai ser global.

A classe de Clientes representaria um cliente. No Java, não trabalhamos diretamente com o banco de dados. Sempre carregamos os valores para classes. Além de mais seguras, as classes implementam e validam diversas regras de negócio. Só depois usamos classes para persistir os dados (os tais DAOs). É para facilitar esse trabalho de ler do banco e converter em classes (e vice-versas) que coisas como o JPA e o Hibernate existem.

As telas do sistema também são classes. Elas fazem basicamente o mesmo trabalho, mas agora, ao invés de converter dados do BD para classes, elas passam a ter a missão de ler dados vindos do usuário (e por isso apresentar uma interface gráfica), valida-los e, só então, gerar a classe de negócios para que possamos trabalhar internamente.