Массив кнопок - 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);
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д