Отменить панель параметров - PullRequest
1 голос
/ 23 марта 2012

У меня есть панель параметров, которая отображается при закрытии моего приложения (windowClosing()). У меня есть возможность выйти, свернуть или отменить.

Как закрыть панель параметров при выборе «Отмена», не закрывая все приложение?

Object[]options = {"Minimize", "Exit","Cancel"};

        int selection = JOptionPane.showOptionDialog(
            null, "Please select option", "Options", 0, 
            JOptionPane.INFORMATION_MESSAGE, null, options, options[1]);
        System.out.println(selection);

        switch(selection)
        {
            case 2:
            {
                // do something
            }
        }

Ответы [ 3 ]

3 голосов
/ 23 марта 2012

Вы можете вызвать yourFrame.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE); внутри вашего windowClosing() метода, если пользователь выберет «отмена» ....

2 голосов
/ 23 марта 2012
If (selection == JOptionPane.CANCEL_OPTION)
{
    // DO your stuff related to cancel click event.
}
1 голос
/ 23 марта 2012

Документация Oracle дает советы:

        final JDialog dialog = new JDialog(frame, 
                                     "Click a button",
                                     true);
        dialog.setContentPane(optionPane);
        dialog.setDefaultCloseOperation(
            JDialog.DO_NOTHING_ON_CLOSE);
        dialog.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent we) {
                setLabel("Thwarted user attempt to close window.");
            }
        });
        optionPane.addPropertyChangeListener(
            new PropertyChangeListener() {
                public void propertyChange(PropertyChangeEvent e) {
                    String prop = e.getPropertyName();

                    if (dialog.isVisible() 
                     && (e.getSource() == optionPane)
                     && (prop.equals(JOptionPane.VALUE_PROPERTY))) {
                        //If you were going to check something
                        //before closing the window, you'd do
                        //it here.
                        dialog.setVisible(false);
                    }
                }
            });
        dialog.pack();
        dialog.setVisible(true);

        int value = ((Integer)optionPane.getValue()).intValue();
        if (value == JOptionPane.YES_OPTION) {
            setLabel("Good.");
        } else if (value == JOptionPane.NO_OPTION) {
            setLabel("Try using the window decorations "
                     + "to close the non-auto-closing dialog. "
                     + "You can't!");
        }

Необходимо удалить операцию закрытия по умолчанию и добавить собственный прослушиватель, а затем использовать setVisible(false), чтобы закрыть его.

...