Con gli InternalFrame avevo fatto una cosa del genere
codice:
public void vetoableChange(PropertyChangeEvent event) throws PropertyVetoException{
String name = event.getPropertyName();
Object value = event.getNewValue();
if(desktop.getSelectedFrame() instanceof InternalFrame){
InternalFrame u=(InternalFrame)(desktop.getSelectedFrame());
if (name.equals("closed") && value.equals(Boolean.TRUE) && u.isUpdate()==true)
{
int result=JOptionPane.showConfirmDialog(iframe,"Il file non è stato salvato.\n Salvare?","File non salvato",JOptionPane.YES_NO_CANCEL_OPTION,JOptionPane.INFORMATION_MESSAGE);
if (result == JOptionPane.YES_OPTION){
u.setSave();
}else if(result ==JOptionPane.CANCEL_OPTION){
throw new PropertyVetoException("User Canceled close",event);
}
}//if name.equals
}
}
Penso si possa fare una cosa simile con i WindowListener