Массив кнопок - Java

Узнай цену своей работы

Формулировка задачи:

Попробую свести задачу к минимуму. Есть кнопка "добавить", которая создает новую кнопку. Соответственно, добавлять кнопок можно сколько угодно. В итоге получается массив кнопок (кнопка "добавить" к нему не относится). Так вот, мне нужно, чтобы при нажатии на любую из кнопок этого массива, она удалялась. Вроде бы не сложно, но видимо я что-то до конца не понимаю и не могу правильно реализовать. Максимум что получилось - удаление последней добавленной кнопки, причем не важно на какую нажимаешь, а после этого отклик вообще теряется и ничего не происходит при нажатии на любую кнопку. Ниже приведен метод, в котором по идее для каждой кнопки должен настраиваться свой обработчик событий. В целом, я понимаю в чем проблема, видимо на все кнопки получается один обработчик событий, а после удаления кнопки, обработчик тоже удаляется, и остаются только старые кнопки, которые ничего не делают. Так вот вопрос в том, как сделать так, чтобы у каждой кнопки был свой личный обработчик событий, но чтобы при этом не настраивать каждую кнопку отдельно, разумеется.
Листинг программы
  1. private HBox task;
  2. private TextField nameOfTask;
  3. private Button closePageButton;
  4. public HBox newTask() {
  5. task = new HBox();
  6. nameOfTask = new TextField();
  7. closePageButton = new Button("X");
  8. closePageButton.setOnAction(new EventHandler<ActionEvent>() {
  9. @Override
  10. public void handle(ActionEvent event) {
  11. task.getChildren().remove(closePageButton);
  12. }
  13. });
  14. task.getChildren().addAll(nameOfTask, closePageButton);
  15. return task;
  16. }

Решение задачи: «Массив кнопок»

textual
Листинг программы
  1. public class SelfDelButtons extends JFrame implements ActionListener {
  2.  
  3.     private int counter;
  4.     private JPanel jp = new JPanel();
  5.     private ArrayList<JButton> list = new ArrayList<>();
  6.  
  7.     SelfDelButtons() {
  8.         setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
  9.         setSize(700, 100);
  10.         add(jp);
  11.         JButton button = new JButton("Primary Button");
  12.         button.addActionListener(this);
  13.         jp.add(button);
  14.     }
  15.  
  16.     @Override
  17.     public void actionPerformed(ActionEvent e) {
  18.         if (e.getActionCommand().equals("Primary Button")) {
  19.             counter++;
  20.             JButton nb = new JButton("Button " + counter);
  21.             nb.addActionListener(this);
  22.             jp.add(nb);
  23.             list.add(nb);
  24.         } else {
  25.             findAndDelButton((JButton) e.getSource());
  26.         }
  27.         jp.revalidate();
  28.     }
  29.  
  30.     void findAndDelButton(JButton b) {
  31.         for (Iterator<JButton> iterator = list.iterator(); iterator.hasNext(); ) {
  32.             JButton i = iterator.next();
  33.             if (i.equals(b)) {
  34.                 iterator.remove();
  35.                 jp.remove(i);
  36.                 break;
  37.             }
  38.         }
  39.     }
  40.  
  41.     public static void main(String[] args) {
  42.         JFrame window = new SelfDelButtons();
  43.         window.setVisible(true);
  44.     }
  45. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 3.818 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут