2013-04-15 4 views
-1

Я пытаюсь создать окно подтверждения для удаления объектов, требующих ввода пользователем слова «Удалить» в текстовое поле, чтобы подтвердить их действие, а затем нажмите кнопку с надписью «Удалить», , Кроме того, у него будет стандартная кнопка «Отмена».Подтверждение повторного удаления с помощью 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); и вернуть ему логическое значение, чтобы указать, правильно ли они подтвердили статус удаления. Как я могу установить это, чтобы возвращать логическое значение, как показано в примере кода (что является своего рода псевдокодом, поскольку оно явно неверно). Возможно ли это с помощью однолинейного вызова, как указано?

+0

Используйте последовательный и логический отступ для кодовых блоков. Отступ кода предназначен для того, чтобы помочь людям понять поток программы! –

+0

Я использую отступы для отображения вложенных объектов при работе с пользовательскими интерфейсами, чтобы упростить отслеживание расположения объектов, когда они находятся внутри другого объекта, и упростить поиск, где мне нужно добавить/отредактировать/удалить элемент (хотя я делаю возможно, увлекся тем, что свойства элемента также отступы). Это то, что я делаю для себя, чтобы облегчить будущие изменения, но я забыл удалить его для публикации, извините. – DGolberg

ответ

0

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

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

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

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

Смежные вопросы