Массив кнопок - Java
Формулировка задачи:
Попробую свести задачу к минимуму. Есть кнопка "добавить", которая создает новую кнопку. Соответственно, добавлять кнопок можно сколько угодно. В итоге получается массив кнопок (кнопка "добавить" к нему не относится). Так вот, мне нужно, чтобы при нажатии на любую из кнопок этого массива, она удалялась. Вроде бы не сложно, но видимо я что-то до конца не понимаю и не могу правильно реализовать. Максимум что получилось - удаление последней добавленной кнопки, причем не важно на какую нажимаешь, а после этого отклик вообще теряется и ничего не происходит при нажатии на любую кнопку.
Ниже приведен метод, в котором по идее для каждой кнопки должен настраиваться свой обработчик событий.
В целом, я понимаю в чем проблема, видимо на все кнопки получается один обработчик событий, а после удаления кнопки, обработчик тоже удаляется, и остаются только старые кнопки, которые ничего не делают.
Так вот вопрос в том, как сделать так, чтобы у каждой кнопки был свой личный обработчик событий, но чтобы при этом не настраивать каждую кнопку отдельно, разумеется.
private HBox task; private TextField nameOfTask; private Button closePageButton; public HBox newTask() { task = new HBox(); nameOfTask = new TextField(); closePageButton = new Button("X"); closePageButton.setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent event) { task.getChildren().remove(closePageButton); } }); task.getChildren().addAll(nameOfTask, closePageButton); return task; }
Решение задачи: «Массив кнопок»
textual
Листинг программы
public class SelfDelButtons extends JFrame implements ActionListener { private int counter; private JPanel jp = new JPanel(); private ArrayList<JButton> list = new ArrayList<>(); SelfDelButtons() { setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); setSize(700, 100); add(jp); JButton button = new JButton("Primary Button"); button.addActionListener(this); jp.add(button); } @Override public void actionPerformed(ActionEvent e) { if (e.getActionCommand().equals("Primary Button")) { counter++; JButton nb = new JButton("Button " + counter); nb.addActionListener(this); jp.add(nb); list.add(nb); } else { findAndDelButton((JButton) e.getSource()); } jp.revalidate(); } void findAndDelButton(JButton b) { for (Iterator<JButton> iterator = list.iterator(); iterator.hasNext(); ) { JButton i = iterator.next(); if (i.equals(b)) { iterator.remove(); jp.remove(i); break; } } } public static void main(String[] args) { JFrame window = new SelfDelButtons(); window.setVisible(true); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д