Boa noite, pesquisei muito aqui no forum e oque achei ainda me deixou em duvidas, e como o topico estava fechado precisei criar um outro.
Estou fazendo uma aplicação em JAVA no NetBeans para minha apresentação de TCC, e estou precisando fechar um JFrame a partir de outro JFrame. Tipo, tenho o JFrame de venda, e aciono o botão que chama o JFrame de pagamento da venda, ao acionar o botao Concluir do JFrame de pagamento desejo fechar os dois JFrames ( o de pagamento e o de venda).
Faz o seguinte:
na classe pagamento cria um atributo publico;
quando vc chamar o frame pagamento ao abrir e fazer o que tem que fazer, ao clicar em concluir ele atribui o valor true;
na tela de que chamou venda, dentro do mesmo botao vc faz uma condição que verifica esse atributo,
se verdadeiro fecha a frame venda
false não fecha;
Olá, você só precisa passar a instancia da tela de venda para a tela de pagamento através do construtor,ex:
Na tela de Venda
// O parâmetro passa a própria instância para a tela de pagamento
TelaPagamento tp = new TelaPagamento(this);
tp.show();
Na tela de pagamento
// Construtor
private TelaVenda telaVenda;
public TelaPagamento(TelaVenda telaVenda){
initComponents();
// Aqui se passa a instancia da tela de venda para a tela de pgto.
this.telaVenda = telaVenda;
}
// Método que fecha as telas depois do pagamento (esse método está na tela de pagamento)
private void realizarPagamento(){
//... Sua lógica ...
dispose();
telaVenda.dispose();
}
muito obrigado, consegui com essa sua dica,
porem a linha new PgmVenda(telavenda).setVisible(true); fica com o seguinte erro:
non-static variable telavenda cannot be referenced from a static context
public static void main(String args[]) {
.....
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new PgmVenda(telavenda).setVisible(true);
}
});
}
Isso ocorre pois o método main é estático, mas você não precisa dele, pois ele é necessário somente nas classes ou telas que iniciem seu sistema, ou seja, na tela principal.