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ç
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
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/
Ok, vou ver se crio um post sobre isso, muito obrigado por tudo