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