2017-08-08 3 views
-1

J'essaie de quitter mon application en choisissant l'option de sortie dans la barre de menu, mais je dois recevoir une invite avant la fermeture du programme.Obtenir une invite d'un JMenuItem

J'ai essayé de trouver la réponse ici en lisant des questions similaires, mais beaucoup de solutions se terminent juste avec "System.exti (0)" dans le liste d'action du menuItem. J'ai besoin d'une boîte de dialogue avant que l'application ne soit fermée.

Ici, j'ai déclaré la barre de menu et vous pouvez voir la sortie-options:

JMenuBar menuBar = new JMenuBar(); 
    JMenu archiveMenu = new JMenu("Archive"); 
    menuBar.add(archiveMenu); 
    newMap = archiveMenu.add("New Map"); 
    newMap.addActionListener(new ArchiveListener()); 
    loadPlaces = archiveMenu.add("Load Places"); 
    loadPlaces.addActionListener(new ArchiveListener()); 
    save = archiveMenu.add("Save"); 
    save.addActionListener(new ArchiveListener()); 
    exit = archiveMenu.add("Exit"); 
    exit.addActionListener(new ArchiveListener()); 

Et voici mon code du ArchiveListener. Vous pouvez voir que j'ai essayé d'obtenir la sortie-possibilité de travailler dans le code à très bas, mais cette solution ne fonctionne pas:

class ArchiveListener implements ActionListener { 

    public void actionPerformed(ActionEvent ave) { 
     if (ave.getSource() == newMap) { 
      int result = fc.showOpenDialog(null); 
      if (result != JFileChooser.APPROVE_OPTION) { 
       return; 
      } else { 
       File file = fc.getSelectedFile(); 
       String filePath = file.getAbsolutePath(); 
       display.setImage(filePath); 
       validate(); 
       repaint(); 
      } 

     } else if (ave.getSource() == loadPlaces) { 

      int result = fc.showOpenDialog(null); 
      if (result != JFileChooser.APPROVE_OPTION) { 
       return; 
      } else { 
       loadPlaces(); 
      } 
     } 
     if (ave.getSource() == save) { 
      if (fc.showSaveDialog(null) == JFileChooser.APPROVE_OPTION) { 
       // File file = fc.getSelectedFile(); 
      } 
      try { 
       FileWriter outfile = new FileWriter("jarvafaltet.places.txt"); 
       PrintWriter out = new PrintWriter(outfile); 
       for (Place p : positionList.values()) { 
        System.out.println(p); 
        out.println(p); 
        out.close(); 
       } 

       outfile.close(); 

      } catch (FileNotFoundException e) { 
       JOptionPane.showMessageDialog(null, "Filen kan ej hittas"); 

      } catch (IOException e) { 
       JOptionPane.showMessageDialog(null, "Fel" + e.getMessage()); 

      } 

     } 

     if ("exit".equals(ave.getActionCommand())) { 

      int dialogButton = JOptionPane.YES_NO_OPTION; 
      JOptionPane.showConfirmDialog(null, "Would You Like to Save your Previous Note First?", "Warning", dialogButton); 

      if (dialogButton == JOptionPane.YES_OPTION) { 
       System.exit(NORMAL); 
      } 

     } 

    } 

Répondre

1

Votre code doit lire la valeur retournée par showConfirmDialog:

int dialogButton = JOptionPane.showConfirmDialog(null, "Would You Like to Save your Previous Note First?", "Warning", JOptionPane.YES_NO_OPTION); 
if (dialogButton == JOptionPane.YES_OPTION) { 
    System.exit(NORMAL); 
} 

et vous devez lire la javadoc: o)