Bom pessoal, estou desenvolvendo uma aplicação para uma loja que, por sua vez possui vários cadastros (usuários, clientes, etc…).
Eu gostaria de perguntar ao usuário se ele deseja realmente sair antes de fechar ou não o cadastro.
Eu já sei que preciso setar o DO_NOTHING como defaultCloseOperation e programar o JOptionPane no evento WindowClosing do formulário.
PORÉM eu acho o JOptionPane muito feio e pouco personalizável, então criei um Jframe “bonitinho” que possui dois botões: um SIM (que confirma o fechamento) e outro NÃO (que não faz nada).
Ele funciona da seguinte forma:
Quando o fecho ele simplesmente fecha;
Quando clico em NÃO ele também se fecha;
E quando clico em SIM ele deveria se fechar E FECHAR O FORMULÁRIO.
SÓ QUE ELE SIMPLISMEMTE NÃO FECHA O FORMULÁRIO!!!
Ele só está se fechando (o que era pra acontecer depois que fechasse o formulário)!
O código do botão SIM está programado da seguinte forma:
{
JframeForm Form = new JframeForm();
Form.dispose();
dispose();
}
ALGUÉM ME AJUDE POR FAVOR!!!
SINCERAMENTE NÃO SEI O QUE PODE SER 
Seu frame principal deve possuir um listner que recebe a resposta do seu outro frame ao ser acionado o click dos botões SIM ou NÃO, com base nisso, você executa a ação, pois o código que você fez apenas executa o dispose 2 vezes no mesmo frame.
1 curtida
CARAMBA, VALEU MESMO CARA!
Eu não imaginava que era tão rápido kkkkkkkk
Mas você pode me dizer como eu faço isso? Sou BEM iniciante ainda em Java
Seria algo mais ou menos dessa forma!
No seu frame principal ficaria o código abaixo:
FramePersonalizado frame = new FramePersonalizado(this, true);//Neste exemplo utilizei uma JDialog
frame.setVisible(true);
frame.addWindowListener(new java.awt.event.WindowAdapter() {
@Override
public void windowClosed(java.awt.event.WindowEvent evt) {
//Aqui você pega o retorno do framePersonalizado
//Se o retorno for verdadeiro aplica o dispose, caso contrário não executa nenhuma ação
}
});
1 curtida
Muito obrigado cara!
Vou tentar
Para não ficar feio, sempre utilizo o look and feel do sistema operacional.
Nos casos de só ter uma opção de Sim ou Não, utilizo o JOptionPane com os parâmetros adequados:
import java.awt.Dimension;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.UIManager;
public class Exemplo extends JFrame {
public static void main(String[] args) throws Exception {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
Exemplo telinha = new Exemplo();
telinha.setVisible(true);
}
public Exemplo() {
super("Minha Telinha");
setMinimumSize(new Dimension(640, 480));
setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
sair();
}
});
}
private void sair() {
if (confirma("Deseja realmente sair?")) {
System.exit(0);
}
}
private boolean confirma(String message) {
String title = "Confirmação";
int optionType = JOptionPane.YES_NO_OPTION;
int messageType = JOptionPane.QUESTION_MESSAGE;
int option = JOptionPane.showConfirmDialog(this, message, title, optionType, messageType);
return option == JOptionPane.YES_OPTION;
}
}
1 curtida