从JMenuItem

时间:2017-08-08 17:33:58

标签: java swing prompt jmenuitem jmenubar

我试图通过选择菜单栏中的exit-option来退出我的应用程序,但是我需要在程序关闭之前得到一个提示。

我试图通过阅读类似的问题找到答案,但许多解决方案只是以#34; System.exti(0)"在menuItem的actionListener中。我需要在应用程序关闭之前获得一个消息对话框。

这里我已经声明了菜单栏,你可以看到退出选项:

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());

这是我在ArchiveListener中的代码。您可以看到我已经尝试让退出选项在底部的代码中工作,但此解决方案无效:

 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);
            }

        }

    }

1 个答案:

答案 0 :(得分:1)

您的代码需要读取 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);
}

你需要阅读javadoc:o)