Fechar a jframe de outra classe?

Olá, eu gostaria de saber se é possível a partir de outra classe invocar o método dispose da minha classe que estende de jframe sem instancia-la?

Iae cara, de quantas classes estamos falando?
Uma classe filha de JFrame e uma outra qualquer que, em determinado momento, chama esse seu frame?

PS: Se eu não entendi por má interpretação leve em consideração o horário kk

Abç

1 curtida

Ok, não soube explicar mesmo, é assim eu possuo uma classe que estende de jframe, em outra classe eu gostaria de acessar o método dispose dela, só que eu não quero instancia-la para fazer isso, e eu gostaria de saber se isso é possível, entendeu?

Posta seu código.

Eu não tenho exatamente um código, pois já criei vários projetos e queria fazer isso e não deu, mais vou fazer um exemplo:
`

public class Janela extends JFrame
    Janela(){
      setTitle("teste");
  setSize(500,500);
      setVisible(true);
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  setLocationRelativeTo(null);
    }
 public static void main(String[]args){
    Janela j = new Janela();
 }
 public class OutraClasse{
    OutraClasse(){
      //porque nao consigo realizar esta operacao?
      Janela.dispose();
    }
  public static void main(String[]args){
     OutraClasse o = new OutraClasse();
   }
 }

`

Para utilizar o método dispose() deve utilizar um objeto e não uma classe.
Para conseguir isso que você quer, a classe Janela deve ser instanciada em OutraClasse, e nessa intância utilizar o dispose().
Como não sei o que você quer fazer exatamente, não sei como resolver isso, não sei as regras hehe

Cara, apesar de ser algo estranho de se fazer… copia esse código que fiz aqui e veja se resolve. Vlw

import javax.swing.JFrame;

public class MeuFrame extends JFrame {

private static JFrame frame;

public MeuFrame() {
    frame = new JFrame("Teste");
    frame.setSize(500, 500);
    frame.setVisible(true);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setLocationRelativeTo(null);
}

public static JFrame getInstancia() {
    return frame;
}

}

class OutraClasse {

OutraClasse() {
    //porque nao consigo realizar esta operacao?

}

public static void main(String[] args) {
    new MeuFrame();
    JFrame teste = MeuFrame.getInstancia();
    System.out.println(teste.getTitle());
}

}

OBSERVAÇÃO: No caso, eu fiz o “sout” do título do frame pra você ver que consegui capturar a instância criada anteriormente. Poderia tranquilamente fazer teste.dispose();

Ta mais assim a classe não está sendo instanciada certo?

Tenta o seguinte:

public class Janela extends JFrame Janela(){ setTitle("teste"); setSize(500,500); setVisible(true); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLocationRelativeTo(null); } public static void main(String[]args){ Janela j = new Janela(); } public class OutraClasse{ OutraClasse(){ //porque nao consigo realizar esta operacao? Janela jan = new Janela(); jan.dispose(); jan.setVisible(false) ou jan.setVisible(true); } public static void main(String[]args){ OutraClasse o = new OutraClasse(); } }

Não tem como fazer sem instancia-la?

O “MeuFrame” precisa ser instanciado em algum momento OBVIAMENTE (até porque tem que aparecer na tela).
Aquele código, na verdade, guarda em uma variável static esse frame, permitindo que você possa recuperar a instância (caso tenha sido criada em algum momento anterior) e faça o que quiser com ela.

COMO EU DISSE… é algo bem estranho e nem sei se deve-se fazer tal coisa. Vlw

1 curtida

Era isso mesmo que eu queria fazer, porque assim, se eu instanciar a classe que estende de jframe em outra classe e na classe que estende de jframe eu instanciar a classe que invoca o dispose a janela aparecerá duas vezes, entendeu? Você sabe porque que eu não consigo marcar sua resposta como correta(o botão não está aparecendo)?

Outra coisa, o método getInstancia é estático, exatamente o que eu preciso pois vou acessa-lo a partir de uma classe estática, porém eu não consigo fazer return this; pois o eclipse acusa erro, você sabe porque?

Você não faz return this;
Olha o código que eu postei, vai ver que eu mantenho uma instância de JFrame (criada no construtor) em uma variável static. É essa variável que eu retorno (e não this).

Obs: Essa classe MeuFrame não precisa (nem deve?) estender JFrame;

Ok, muito obrigado por tudo, não vou mais estender de jframe e vou fazer desse jeito, e outra coisa, você sabe porque que não aparece o botão para marcar sua resposta como correta? Tenho notado isso em todos os tópicos e além disso eu não estou recebendo mais notificações quando respondem meus posts.

Fala @Thallysson, beleza?
Desculpa a demora. Eu estava bloqueado para postar/responder devido à uma política de uso do GUJ para novos usuários, enfim…
Cara, não sei dizer sobre o porque não está conseguindo marcar como correta não.

Vlw, e de nada o/

1 curtida

Ok, vou ver se crio um post sobre isso, muito obrigado por tudo :slight_smile: