Отключить кнопки на JAVA, но оставить уникальную кнопку в покое

Согласно моему предыдущему вопросу здесь: Удалить кнопку с таким же текстом при нажатии

Мне нужно, чтобы единственные кнопки, которые появляются более одной, исчезали при нажатии на них Проблема в том, что при нажатии на «Уникальные» (см. рисунок) они также исчезают. Мой код:

private String namesArr[] = {"Yakir","Yarden","Igor","Maoz","Moshe","Israel","Tal","Haim","Nati","Mor","Daniel","Idan"};
private Button buttonArr[] = new Button[namesArr.length];
private Font font;

public StudentsGUI(String caption) {
    super(caption);
    addWindowListener(new WindowAdapter(){
            public void windowClosing(WindowEvent e){
                    dispose();
                        System.exit(0);
                        }
                    }); 
    this.setLayout(new GridLayout(3,3));
    font = new Font("Ariel",Font.BOLD,35);

    for(int i=0;i<namesArr.length;i++) {
        buttonArr[i] = new Button(" "+namesArr[(int)(Math.random()*namesArr.length)]);
        buttonArr[i].setFont(font);
        buttonArr[i].addActionListener(this);
        this.add(buttonArr[i]);
    }
    setLocation(800,500);
    setVisible(true);
    pack();
}

public void actionPerformed(ActionEvent e) {
    if (e.getSource() instanceof Button) {
        String btnText = ((Button)e.getSource()).getLabel();
        for(int i=0; i<buttonArr.length; i++) {
            if (buttonArr[i].getLabel().equals(btnText)) {
                this.remove(buttonArr[i]);
                pack();
            }
        }
    }
}

Картинка для понимания: Отключить кнопки на JAVA, но оставить уникальную кнопку в покое

Таким образом, если щелкнуть «Идан», ведьма — это уникальное имя, ничего не произойдет, поскольку оно имеет только один экземпляр, но если щелкнуть «Маоз», все кнопки с заголовком «Маоз» исчезнут (это уже происходит)

так в чем именно заключается ваш вопрос и ваша проблема или ошибка?

nullPointer 25.02.2019 14:15

Как сделать так, чтобы исчезали только те, кто повторяется? Уникальные должны остаться, на картинке те, кому нужно остаться, независимо от того, нажимаете ли вы «Израиль», «Даниил» и «Идан».

Yakir Malka 25.02.2019 14:26
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
50
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы имеете в виду что-то вроде этого (в коде могут быть синтаксические ошибки)?

public void actionPerformed(ActionEvent e) {
    if (e.getSource() instanceof Button) {
        String btnText = ((Button)e.getSource()).getLabel();

        List<Button> btnList = new ArrayList<Button>();
        for(int i=0; i<buttonArr.length; i++) {
            if (buttonArr[i].getLabel().equals(btnText)) {
                btnList.add(buttonArr[i]);
                //this.remove(buttonArr[i]);
                //pack();
            }
        }
        if (btnList.size() > 1) {
            for (Iterator<Button> it = btnList.iterator(); it.hasNext()) {
                this.remove(it.next());
            }
            pack();
        }
    }
}

Ценю ваш ответ, но @funkyjelly опубликовал то, что нужно :) Спасибо!

Yakir Malka 04.06.2019 12:45
Ответ принят как подходящий

использование коллекций в соответствии с ответом @Freddy должно быть лучше. Однако, если вы хотите придерживаться массивов, это должно сделать что-то вроде ниже (хотя это не проверялось)

public void actionPerformed(ActionEvent e) {
        if (e.getSource() instanceof Button) {
            String btnText = ((Button)e.getSource()).getLabel();
            int counter = 0;
            for(int i=0; i<buttonArr.length; i++) {
                if (buttonArr[i].getLabel().equals(btnText)) counter++;
                if (count > 1) {
                   for(int j=0; j<buttonArr.length; j++) {
                      if (buttonArr[j].getLabel().equals(btnText))
                         this.remove(buttonArr[j]);
                   }
                }
            }
            pack();
        }
}

Спасибо! Протестировал его прямо сейчас, и он работает отлично! просто быстрый вопрос, что вы подразумеваете под коллекциями?

Yakir Malka 25.02.2019 14:58

например ArrayList, поскольку они предоставляют более простые методы добавления/удаления и т. д.: tutorialspoint.com/java/java_collections.htm

nullPointer 25.02.2019 15:14

Спасибо @funkyjelly

Yakir Malka 26.02.2019 13:26

Другие вопросы по теме