Usar setVisible() em outra classe

Boa noite, tenho um JFrame visivel, e ao clicar em um botao, é chamado um metodo de uma classe chamada engine que criei, nesse metodo da classe engine é executado alguns codigos e ao final deve-se esconder o JFrame(somente esconder, ou seja, usar o setVisible(false) ) porem nao consigo usar o setVisible em relação a classe em que esta o JFrame

Exemplo do código:

public class Engine
{
   public void Cadastra()
   {
       ...
       ...
       ...
       ...
       Cadastro_Cadastrar.setVisible(false);
   }
}

Precisamos de mais detalhes da sua classe Engine…

se possivel cole o código completo do metodo Cadastra()

[quote=danilo.coppi]Precisamos de mais detalhes da sua classe Engine…

se possivel cole o código completo do metodo Cadastra()
[/quote]

Vou postar a lógica inteira, mas considerem a parte final, onde tento usar o setVisible(false) na classe Cadastro_Cadastrar(extends JFrame)

public class Engine 
{
    public void Cadastrar()
    {
        if(Cadastro_Cadastrar.jTextField1.equals("") ||
           Cadastro_Cadastrar.jTextField2.getText().equals("") ||
           Cadastro_Cadastrar.jTextField3.getText().equals("") ||
           String.valueOf(Cadastro_Cadastrar.jPasswordField1.getPassword()).equals(""))
        {
            if(Cadastro_Cadastrar.jTextField1.getText().equals(""))
            {
                javax.swing.JOptionPane.showMessageDialog(null,
                    "O NOME NÃO FOI INFORMADO",
                    "ERRO - CADASTRO",
                    javax.swing.JOptionPane.WARNING_MESSAGE);
            }
            if(Cadastro_Cadastrar.jTextField2.getText().equals(""))
            {
                javax.swing.JOptionPane.showMessageDialog(null,
                    "O E-MAIL NÃO FOI INFORMADO",
                    "ERRO - CADASTRO",
                    javax.swing.JOptionPane.WARNING_MESSAGE);
            }
            if(Cadastro_Cadastrar.jTextField3.getText().equals(""))
            {
                javax.swing.JOptionPane.showMessageDialog(null,
                    "O LOGIN NÃO FOI INFORMADO",
                    "ERRO - CADASTRO",
                    javax.swing.JOptionPane.WARNING_MESSAGE);
            }
            if(String.valueOf(Cadastro_Cadastrar.jPasswordField1.getPassword()).equals(""))
            {
                javax.swing.JOptionPane.showMessageDialog(null,
                    "A SENHA NÃO FOI INFORMADA",
                    "ERRO - CADASTRO",
                    javax.swing.JOptionPane.WARNING_MESSAGE);
            }
        }
        else
        {
            Cadastro_Cadastrar.nomes[Cadastro_Cadastrar.aux]=Cadastro_Cadastrar.jTextField1.getText();
            Cadastro_Cadastrar.senha[Cadastro_Cadastrar.aux]=String.valueOf(Cadastro_Cadastrar.jPasswordField1.getPassword());
            Cadastro_Cadastrar.login[Cadastro_Cadastrar.aux]=Cadastro_Cadastrar.jTextField3.getText();
            javax.swing.JOptionPane.showMessageDialog(null,
                    "CADASTRO REALIZADO COM SUCESSO"
                  + "\nLOGIN: "+Cadastro_Cadastrar.login[Cadastro_Cadastrar.aux]
                  + "\nSENHA: "+Cadastro_Cadastrar.senha[Cadastro_Cadastrar.aux]
                  + "\n*Guarde estes dados",
                    "CADASTRO REALIZADO",
                    javax.swing.JOptionPane.INFORMATION_MESSAGE);
            Cadastro_Cadastrar.jTextField1.setText("");
            Cadastro_Cadastrar.jTextField2.setText("");
            Cadastro_Cadastrar.jTextField3.setText("");
            Cadastro_Cadastrar.jPasswordField1.setText("");
            Cadastro_Cadastrar.jComboBox1.setSelectedItem("M");
            Cadastro_Cadastrar.aux++;
            Cadastro_Cadastrar.setVisible(false);
        }
    }

Você poderia colocar um pedacinho do começo do Cadastro_Cadastrar para eu tirar uma dúvida?

Claro…OBS: Maioria do código foi gerado pelo Netbeans(Form Designer)

public class Cadastro_Cadastrar extends javax.swing.JFrame {
public static String nomes[]=new String[20];
public static String sexo[]=new String[20];
public static String login[]=new String[20];
public static String senha[]=new String[20];
public static int aux=0;
public Cadastro_Cadastrar() {
        initComponents();
}

Era o que eu suspeitava mesmo…

O problema é o seguinte:

Você está utilizando as variaveis de forma statica:

Então todo metodo e variavel declarada com “static” é acessivel da forma como você vem fazendo,
porém o metodo setVisible(false) não é estático, então você terá que instanciar o objeto Cadastro_Cadastrar (Cadastro_Cadastrar nomeDaVariavel = new Cadastro_Cadastrar()) para que possa chamar nomeDaVariavel.setVisible(false).

Caso você queira ter apenas 1 única instância do Cadastro_Cadastrar no seu programa todo, você deve utilizar o pattern Singleton…

Como fazer um singleton:

public class Cadastro_Cadastrar extends javax.swing.JFrame {  
    private static Cadastro_Cadastrar objeto = new Cadastro_Cadastrar();
    private Cadastro_Cadastrar() {  
        initComponents();
    }
    
    public Cadastro_Cadastrar getInstance() {
        return objeto;
    }
.
.
.
}

Com isso de qualquer lugar do seu programa você pode chamar a instância utilizando:

Cadastro_Cadastrar cadastro = Cadastro_Cadastrar.getInstance();
cadastro.setVisible(false);

Com isso você também não precisa ficar declarando tudo la dentro como static…

Deu pra entender a explicação?

acontece que eu possuo, um menu principal, e dele é possivel exibir o JFrame Cadastro_Cadastrar(), e ao finalizar os processos executados la, ele fica invisivel, para nao perder suas variaveis, entao se eu usar a instanciação dessa classe, vou estar iniciando outra classe e nao simplesmente deixando visivel o JFrame e retornando suas variaveis que ja possuem um valor que foi definido anteriormente, entende?

tem alguma sugestão? agradeço a atenção, obrigado

passa como parametro na classe engine o seu JForm


JFrame frame;
public void Cadastra(Jframe frame){
  this.frame = frame;

  frame.setVisivel(true)

} 

na hora de chamar o metodo


cadastrar(this)

[quote=rafaelviny]passa como parametro na classe engine o seu JForm


JFrame frame;
public void Cadastra(Jframe frame){
  this.frame = frame;

  frame.setVisivel(true)

} 

na hora de chamar o metodo


cadastrar(this)

[/quote]
aparentemente resolveu meu problema, haha!! finalmente…eu só nao entendi porque voce usou isso:

this.frame=frame;

se puder me explicar, agradeço, porque nao estou usando isso

mesmo assim, obrigado!

Para que o argumento frame que o método Cadastra(JFrame frame) recebe seja passado para a classe e não fique apenas com escopo dentro do método.

Abraço!

ei vc ja tentou colocar this.dispose(); no lugar do frame.setVisivel(false) ???

etnta ai e fala se deu certo

Estou com outro problema agora, preciso deixar o evento de um botao como STATIC, porem o codigo gerado pelo Netbeans pré-define ele como PRIVATE VOID, somente…existe algum meio para isso?

tem sim clica com o botao direito em cima do botao e vai na opiçao editar codigo fonte …

tem essas opiçoes la …

outra coisa vc usou frame.setVisivel(false) ele nao fexa a janela ela fica operando so que invisivel ou seja se vc abrir 1000 janelas elas vao estar la …
vc so nao vai velas … oa inves de usar frame.setVisivel(false) tente usar this.dispose(); … nisso a janela sera fexada e a operaçao dela tambem …

xauuuuuuuuuuuuuu…

Não. Com static você não estará fazendo uma sobrecarga.
Aliás, quando vc recorre ao static, em 90% dos casos, estará fazendo besteira.

Quanto ao outro problema, por que não faz o próprio JFrame chamar o setVisible logo após chamar o método da sua classe Engine?