JPanel.removeAll () не работает должным образом - PullRequest
0 голосов
/ 04 сентября 2018

Так что в настоящее время я учу себя использовать GUI, и я решил вернуться к коду для игры Go Fish, которую я создал, и добавить к нему GUI. Для панели, которая содержит карты игрока CPU, она отображает заднюю часть некоторых игральных карт, чтобы указать размер руки процессора.

Всякий раз, когда происходит изменение размера руки процессора, вызывается мой метод updateComputerCards для настройки количества карт, отображаемых на экране. Это делается путем вызова метода removeAll() для моей панели, а затем происходит повторное добавление необходимого количества изображений карт.

Моя проблема, однако, заключается в том, что когда игра начинается впервые, и в руке ЦП обнаруживаются совпадения, метод работает, как предполагалось, и количество появляющихся карт уменьшается. Тем не менее, каждый раз, когда вызывается метод, в графическом интерфейсе ничего не меняется, несмотря на то, что у процессора есть карты разных размеров.

Через отладчик я вижу, что метод removeAll() по какой-то причине не удаляет все компоненты на панели, даже если он успешно выполняется без проблем при первом вызове. Может ли кто-нибудь помочь мне здесь?

    public void updateComputerCards(ArrayList<Integer> hand) {
        labelPanel.removeAll();
        for (int i = 0; i < hand.size(); i++) {
            labelPanel.add(computerCardLabels.get(i));
            labelPanel.add(b.createHorizontalStrut(10));
        }

    }

1 Ответ

0 голосов
/ 04 сентября 2018

Вам нужно вызвать метод repaint () после внесения изменений. См. Живопись в AWT и Swing .

...