Повторно используемое подтверждение удаления с помощью JTextField

Я пытаюсь придумать окно подтверждения для удаления объектов, которое требует, чтобы пользователь вводил слово «Удалить» в текстовое поле, чтобы подтвердить свое действие, а затем нажимал кнопку с надписью «Удалить». Кроме того, у него также будет стандартная кнопка «Отмена».

Ниже приведена основная идея того, что я хочу, но я не уверен, как правильно вернуть логическое значение:

public static boolean confirmDelete(String msg) {
    JPanel panel = new JPanel();
        JPanel sPanel1 = new JPanel();
            JPanel ssPanel1 = new JPanel();
                ssPanel1.setLayout(new BoxLayout(ssPanel1, BoxLayout.Y_AXIS));
                    JLabel lbl = new JLabel(msg);
                    confirm = new JTextField(10);
                ssPanel1.add(lbl);
                ssPanel1.add(confirm);
            JPanel ssPanel2 = new JPanel();
                ssPanel2.setLayout(new BoxLayout(ssPanel2, BoxLayout.Y_AXIS));
                    JButton ok = new JButton("Delete");
                        ok.addActionListener(new ActionListener() {
                            @Override
                            public void actionPerformed(ActionEvent arg0) {
                                if(confirm.getText().toLowerCase().equals("delete")) {
                                    //Set the returned value to true;
                                } else {
                                    alertMsg("Invalid input. Please try again.");
                                }
                            }
                        });
                    JButton cancel = new JButton("Cancel");
                        cancel.addActionListener(new ActionListener() {
                            @Override
                            public void actionPerformed(ActionEvent arg0) {
                                //Set the returned value to false;
                            }
                        });
                ssPanel2.add(ok);
                ssPanel2.add(cancel);
            sPanel1.add(ssPanel1);
            sPanel1.add(ssPanel2);
        panel.add(sPanel1);

    JFrame deleteFrm = new JFrame("Confirm Delete");
    deleteFrm.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);

    //Add content to the window.
    deleteFrm.setContentPane(panel);

    //Display the window.
    deleteFrm.pack();

    deleteFrm.setVisible(true);
}

По сути, я хотел бы вызвать это окно, используя строку boolean deleteItem = ClassName.confirmDelete(msg);, и вернуть логическое значение, чтобы указать, правильно ли они подтвердили статус удаления. Как я могу настроить это так, чтобы возвращалось логическое значение, как показано в примере кода (который является своего рода псевдокодом, поскольку он явно неверен). Возможно ли это даже с однострочным вызовом, как упоминалось?


person DGolberg    schedule 15.04.2013    source источник
comment
Используйте последовательный и логичный отступ для блоков кода. Отступ кода предназначен для того, чтобы помочь людям понять ход программы!   -  person Andrew Thompson    schedule 16.04.2013
comment
Я использую отступы для отображения вложенных объектов при работе с пользовательскими интерфейсами, чтобы упростить отслеживание размещения объектов, когда они находятся внутри другого объекта, и упростить поиск места, где мне нужно добавить/отредактировать/удалить элемент (хотя я, возможно, увлекитесь также свойствами элемента с отступом). Это то, что я делаю для себя, чтобы упростить будущие правки, но я забыл удалить это для поста, извините.   -  person DGolberg    schedule 16.04.2013


Ответы (2)


Вместо этого используйте JOptionPane. Будет проще получить результат выбора пользователя, а затем определить логический код. Посмотрите здесь, например, JOptionPane YES/No Options Confirm Dialog Box Issue -Java или здесь результаты поиска Google: примеры JOPtionPane

person Elior    schedule 15.04.2013

Я нашел ответ на свой вопрос здесь, и это было довольно немного проще, чем я думал. В результате я придумал следующий код для возврата логического значения, как я хотел, без всей работы, связанной с созданием моего собственного окна:

public static boolean confirmDelete(String msg) {
    String str = JOptionPane.showInputDialog(msg);
    if(str != null && str.toLowerCase().equals("delete")) return true;
    return false;
}

Ответ Элиора, хотя и не совсем то, что я искал, указал мне правильное направление, поэтому +1. Не уверен, как я пропустил метод showInputDialog() для JOptionPane, но в основном это то, что я искал (не просто подтверждение да/нет; данные слишком чувствительны для чего-то такого простого).

редактировать: добавлено str != null &&, иначе при отмене выдается nullPointerException.

person DGolberg    schedule 15.04.2013